[
  {
    "path": ".gitignore",
    "content": "# Python\n__pycache__/\n*.py[cod]\n*$py.class\n\n# Distribution / Packaging\nbuild/\ndist/\n*.egg-info/\n.eggs/\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n\n# macOS\n.DS_Store\n\n# IDEs\n.idea/\n.vscode/\n*.swp\n"
  },
  {
    "path": "AnalysisCSN/CSN.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Andy'\n\nclass CSN:\n    def __init__(self, apk_obj):\n        self.apk = apk_obj\n        self.certs = []\n        try:\n            # androguard 3.3.5+ returns x509 objects\n            self.certs = list(self.apk.get_certificates())\n        except Exception as e:\n            print(f\"Error getting certificates: {e}\")\n        \n        self.cert = self.certs[0] if self.certs else None\n\n    def get_size(self):\n        try:\n            for f in self.apk.get_files():\n                if f.endswith('.RSA') or f.endswith('.DSA') or f.endswith('.EC'):\n                     # get_file returns bytes\n                     return str(len(self.apk.get_file(f)))\n        except:\n            pass\n        return \"0\"\n\n    def getCertificateSN(self):\n        if not self.cert: return \"\"\n        try:\n            return format(self.cert.serial_number, 'x').lower()\n        except:\n            return \"\"\n\n    def getCertificateIDN(self):\n        if not self.cert: return \"\"\n        try:\n            # Use rfc4514_string for standard string representation\n            # It returns comma separated values like CN=Name,C=US\n            return self.cert.issuer.rfc4514_string()\n        except:\n            return str(self.cert.issuer)\n\n    def getCertificateSDN(self):\n        if not self.cert: return \"\"\n        try:\n            return self.cert.subject.rfc4514_string()\n        except:\n            return str(self.cert.subject)\n"
  },
  {
    "path": "AnalysisCSN/__init__.py",
    "content": "__author__ = 'Andy'\n"
  },
  {
    "path": "AnalysisDEX/InitDEX.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Andy'\n\nfrom androguard.core.dex import DEX\n\nclass InitDEX:\n    def __init__(self, apk_obj):\n        self.apk = apk_obj\n        self.dexheader = {}\n\n    def getDexInfo(self):\n        self.dexheader = {}\n        try:\n            # Get the first dex file\n            # androguard returns bytes, so we need to wrap it in DEX object\n            dex_files = list(self.apk.get_all_dex())\n            if not dex_files:\n                return {}\n            \n            d = DEX(dex_files[0])\n            \n            # Helper to format values\n            def fmt(val):\n                if val is None:\n                    return \"\"\n                if isinstance(val, int):\n                    return \"%X\" % val\n                if isinstance(val, bytes):\n                    return val.hex().upper()\n                return str(val)\n\n            h = d.header\n            \n            # Use getattr to be safe with different androguard versions, or assume standard fields\n            self.dexheader[\"header_magic\"] = fmt(getattr(h, \"magic\", b\"\"))\n            self.dexheader[\"header_checksum\"] = fmt(getattr(h, \"checksum\", 0))\n            self.dexheader[\"header_signature\"] = fmt(getattr(h, \"signature\", b\"\"))\n            self.dexheader[\"header_fileSize\"] = fmt(getattr(h, \"file_size\", 0))\n            self.dexheader[\"header_headerSize\"] = fmt(getattr(h, \"header_size\", 0))\n            self.dexheader[\"header_endianTag\"] = fmt(getattr(h, \"endian_tag\", 0))\n            self.dexheader[\"header_linkSize\"] = fmt(getattr(h, \"link_size\", 0))\n            self.dexheader[\"header_linkOff\"] = fmt(getattr(h, \"link_off\", 0))\n            self.dexheader[\"header_mapOff\"] = fmt(getattr(h, \"map_off\", 0))\n            self.dexheader[\"header_stringIdsSize\"] = fmt(getattr(h, \"string_ids_size\", 0))\n            self.dexheader[\"header_stringIdsOff\"] = fmt(getattr(h, \"string_ids_off\", 0))\n            self.dexheader[\"header_typeIdsSize\"] = fmt(getattr(h, \"type_ids_size\", 0))\n            self.dexheader[\"header_typeIdsOff\"] = fmt(getattr(h, \"type_ids_off\", 0))\n            self.dexheader[\"header_protoIdsSize\"] = fmt(getattr(h, \"proto_ids_size\", 0))\n            self.dexheader[\"header_protoIdsOff\"] = fmt(getattr(h, \"proto_ids_off\", 0))\n            self.dexheader[\"header_fieldIdsSize\"] = fmt(getattr(h, \"field_ids_size\", 0))\n            self.dexheader[\"header_fieldIdsOff\"] = fmt(getattr(h, \"field_ids_off\", 0))\n            self.dexheader[\"header_methodIdsSize\"] = fmt(getattr(h, \"method_ids_size\", 0))\n            self.dexheader[\"header_methodIdsOff\"] = fmt(getattr(h, \"method_ids_off\", 0))\n            self.dexheader[\"header_classDefsSize\"] = fmt(getattr(h, \"class_defs_size\", 0))\n            self.dexheader[\"header_classDefsOff\"] = fmt(getattr(h, \"class_defs_off\", 0))\n            self.dexheader[\"header_dataSize\"] = fmt(getattr(h, \"data_size\", 0))\n            self.dexheader[\"header_dataOff\"] = fmt(getattr(h, \"data_off\", 0))\n\n        except Exception as e:\n            print(f\"Error getting DEX info: {e}\")\n            import traceback\n            traceback.print_exc()\n\n        return self.dexheader\n"
  },
  {
    "path": "AnalysisDEX/__init__.py",
    "content": "__author__ = 'Andy'\n"
  },
  {
    "path": "AnalysisXML/AXML.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Andy'\n\nMIN_SDK_VERSION = {\n    \"1\": \"Android 1.0\",\n    \"2\": \"Android 1.1\",\n    \"3\": \"Android 1.5\",\n    \"4\": \"Android 1.6\",\n    \"5\": \"Android 2.0\",\n    \"6\": \"Android 2.0.1\",\n    \"7\": \"Android 2.1-update1\",\n    \"8\": \"Android 2.2\",\n    \"9\": \"Android 2.3 - 2.3.2\",\n    \"10\": \"Android 2.3.3 - 2.3.4\",\n    \"11\": \"Android 3.0\",\n    \"12\": \"Android 3.1\",\n    \"13\": \"Android 3.2\",\n    \"14\": \"Android 4.0.0 - 4.0.2\",\n    \"15\": \"Android 4.0.3 - 4.0.4\",\n    \"16\": \"Android 4.1 - 4.1.1\",\n    \"17\": \"Android 4.2 - 4.2.2\",\n    \"18\": \"Android 4.3\",\n    \"19\": \"Android 4.4\",\n    \"20\": \"Android 4.4W\",\n    \"21\": \"Android 5.0\",\n    \"22\": \"Android 5.1\",\n    \"23\": \"Android 6.0\",\n    \"24\": \"Android 7.0\",\n    \"25\": \"Android 7.1\",\n    \"26\": \"Android 8.0\",\n    \"27\": \"Android 8.1\",\n    \"28\": \"Android 9\",\n    \"29\": \"Android 10\",\n    \"30\": \"Android 11\",\n    \"31\": \"Android 12\",\n    \"32\": \"Android 12L\",\n    \"33\": \"Android 13\",\n    \"34\": \"Android 14\",\n}\n\nRISK_PERMISSION = {\n    \"android.permission.SEND_SMS\": \"可无提示直接发送短信\",\n    \"android.permission.RECEIVE_SMS\": \"可监控短信接收\",\n    \"android.permission.CALL_PRIVILEGED\": \"可无提示直接拨打电话\",\n    \"android.permission.INTERNET\": \"具有完全的互联网访问权限\",\n    \"android.permission.READ_CONTACTS\": \"可读取联系人信息\",\n    \"android.permission.WRITE_CONTACTS\": \"可修改联系人信息\",\n    \"android.permission.CHANGE_WIFI_STATE\": \"可修改手机当前WIFI设置\",\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": \"可对存储卡进行读写操作\",\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": \"可创建程序快捷方式\",\n    \"android.permission.READ_PHONE_STATE\": \"可读取手机状态和身份\",\n    \"android.permission.INSTALL_PACKAGES\": \"可安装其它程序\",\n    \"android.permission.READ_SMS\": \"读取短信或彩信\",\n    \"android.permission.WRITE_SMS\": \"编辑短信或彩信\",\n    \"android.permission.RESTART_PACKAGES\": \"重启应用程序\",\n    \"android.permission.CALL_PHONE\": \"直接拨打电话\",\n    \"android.permission.ACCESS_COARSE_LOCATION\": \"可获取当前粗略位置信息\",\n    \"android.permission.ACCESS_FINE_LOCATION\": \"可获取当前精确位置信息\",\n}\n\nclass AXML:\n    def __init__(self, apk_obj):\n        self.apk = apk_obj\n\n    def get_package(self):\n        return self.apk.get_package()\n\n    def get_androidversion_name(self):\n        return self.apk.get_androidversion_name()\n\n    def get_androidversion_code(self):\n        return self.apk.get_androidversion_code()\n\n    def getMinSdkVersion(self):\n        min_sdk = self.apk.get_min_sdk_version()\n        if min_sdk:\n            return MIN_SDK_VERSION.get(str(min_sdk), str(min_sdk))\n        return \"None\"\n\n    def getRiskPermission(self):\n        permissions = self.apk.get_permissions()\n        risk_perms = []\n        if not permissions:\n            return [\"该程序未发现含有权限\"]\n        \n        for p in permissions:\n            if p in RISK_PERMISSION:\n                desc = RISK_PERMISSION[p]\n                if desc not in risk_perms:\n                    risk_perms.append(desc)\n        \n        if risk_perms:\n            return risk_perms\n        else:\n            return [\"该程序未发现含有风险权限\"]\n"
  },
  {
    "path": "AnalysisXML/__init__.py",
    "content": "__author__ = 'Andy'\n"
  },
  {
    "path": "ApkDetecter.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Andy'\n\nimport sys\nimport os\nimport platform\nimport ctypes\n\n# === FIX FOR PYINSTALLER NOCONSOLE ===\n# Some libraries (like androguard) try to write to stdout/stderr even if it's None.\n# We redirect them to a dummy writer if they are None.\nclass NullWriter:\n    def write(self, text):\n        pass\n    def flush(self):\n        pass\n    def isatty(self):\n        return False\n\nif sys.stdout is None:\n    sys.stdout = NullWriter()\nif sys.stderr is None:\n    sys.stderr = NullWriter()\n# =====================================\n\n# Add libs to path\nsys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'libs'))\n\nfrom PyQt5 import QtWidgets, QtGui, QtCore\n# from GUI import StyleSheet  <-- REMOVED\nfrom GUI.MainForm import MainForm\n\n# === INLINED STYLESHEET TO AVOID IMPORT ERRORS ===\nQSS_COMMON = \"\"\"\n/* General Window */\nQMainWindow, QDialog, QWidget {\n    background-color: #2b2b2b;\n    color: #e0e0e0;\n    font-family: \"Segoe UI\", \"Arial\", sans-serif;\n}\n\n/* GroupBox */\nQGroupBox {\n    border: 1px solid #3d3d3d;\n    border-radius: 6px;\n    margin-top: 24px;\n    font-weight: bold;\n    color: #e0e0e0;\n}\n\nQGroupBox::title {\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    left: 10px;\n    padding: 0 5px;\n    color: #4da6ff; /* Blue accent */\n}\n\n/* Labels */\nQLabel {\n    color: #cccccc;\n}\n\n/* TextBrowser / TextEdit / LineEdit */\nQTextBrowser, QTextEdit, QLineEdit {\n    background-color: #363636;\n    border: 1px solid #3d3d3d;\n    border-radius: 4px;\n    color: #ffffff;\n    selection-background-color: #4da6ff;\n}\n\nQTextBrowser:disabled, QTextEdit:disabled {\n    background-color: #2f2f2f;\n    color: #909090;\n    border: 1px solid #333333;\n}\n\n/* Push Buttons */\nQPushButton {\n    background-color: #3a3a3a;\n    border: 1px solid #4a4a4a;\n    border-radius: 4px;\n    color: #e0e0e0;\n    padding: 4px 12px;\n    min-height: 20px;\n}\n\nQPushButton:hover {\n    background-color: #4a4a4a;\n    border: 1px solid #5a5a5a;\n}\n\nQPushButton:pressed {\n    background-color: #2a2a2a;\n}\n\nQPushButton#file_open {\n    background-color: #007acc;\n    color: white;\n    border: 1px solid #005c99;\n}\n\nQPushButton#file_open:hover {\n    background-color: #008ae6;\n}\n\nQPushButton#file_open:pressed {\n    background-color: #005c99;\n}\n\n/* Progress Bar */\nQProgressBar {\n    border: 1px solid #3d3d3d;\n    border-radius: 4px;\n    background-color: #363636;\n    text-align: center;\n    color: #e0e0e0;\n}\n\nQProgressBar::chunk {\n    background-color: #007acc;\n    border-radius: 3px;\n}\n\n/* ScrollBars */\nQScrollBar:vertical {\n    border: none;\n    background: #2b2b2b;\n    width: 10px;\n    margin: 0px 0px 0px 0px;\n}\n\nQScrollBar::handle:vertical {\n    background: #505050;\n    min-height: 20px;\n    border-radius: 5px;\n}\n\nQScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {\n    height: 0px;\n}\n\nQScrollBar:horizontal {\n    border: none;\n    background: #2b2b2b;\n    height: 10px;\n    margin: 0px 0px 0px 0px;\n}\n\nQScrollBar::handle:horizontal {\n    background: #505050;\n    min-width: 20px;\n    border-radius: 5px;\n}\n\nQScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {\n    width: 0px;\n}\n\"\"\"\n\nQSS_WIN_OVERRIDES = \"\"\"\n/* Windows Specific Overrides for High DPI / Readability */\nQMainWindow, QDialog, QWidget {\n    font-size: 24px;\n}\n\nQGroupBox {\n    font-size: 26px;\n    margin-top: 36px;\n}\n\nQGroupBox::title {\n    top: -24px;\n    left: 10px;\n}\n\nQLabel {\n    font-size: 24px;\n}\n\nQTextBrowser, QTextEdit, QLineEdit {\n    font-size: 24px;\n    padding: 10px;\n}\n\nQPushButton {\n    padding: 8px 20px;\n    min-height: 32px;\n}\n\nQScrollBar:vertical {\n    width: 20px;\n}\n\nQScrollBar:horizontal {\n    height: 20px;\n}\n\"\"\"\n\nQSS_MAC_OVERRIDES = \"\"\"\n/* macOS Specific Overrides */\nQLabel {\n    font-size: 12px;\n}\n/* Other defaults are usually fine on Mac */\n\"\"\"\n\nif platform.system() == \"Windows\":\n    GLOBAL_QSS = QSS_COMMON + QSS_WIN_OVERRIDES\nelse:\n    # Default to Mac/Linux style\n    GLOBAL_QSS = QSS_COMMON + QSS_MAC_OVERRIDES\n# ===============================================\n\ndef resource_path(relative_path):\n    \"\"\" Get absolute path to resource, works for dev and for PyInstaller \"\"\"\n    try:\n        # PyInstaller creates a temp folder and stores path in _MEIPASS\n        base_path = sys._MEIPASS\n    except Exception:\n        base_path = os.path.abspath(\".\")\n\n    return os.path.join(base_path, relative_path)\n\nif __name__ == \"__main__\":\n    # Fix for Windows Taskbar Icon\n    if platform.system() == 'Windows':\n        try:\n            # Set AppUserModelID to ensure the taskbar icon is displayed correctly\n            myappid = 'mycompany.myproduct.subproduct.version' # Arbitrary string\n            ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)\n        except Exception as e:\n            pass\n\n    app = QtWidgets.QApplication(sys.argv)\n    \n    # Set Style\n    app.setStyle(\"Fusion\")\n    app.setStyleSheet(GLOBAL_QSS)\n\n    # Set Application Icon (Global)\n    logo_path = resource_path(os.path.join('Resources', 'logo.png'))\n    if os.path.exists(logo_path):\n        # Windows: Load icon directly (Best for Taskbar/Titlebar)\n        if platform.system() == 'Windows':\n            # Windows: Load the large icon directly. \n            # We avoid adding small sizes manually to prevent Windows from picking a low-res version.\n            app.setWindowIcon(QtGui.QIcon(logo_path))\n        else:\n            # macOS/Linux: Use padding/scaling logic (Original logic)\n            original_pixmap = QtGui.QPixmap(logo_path)\n            \n            if not original_pixmap.isNull():\n                # Create a square canvas (transparent)\n                size = 1024\n                padded_pixmap = QtGui.QPixmap(size, size)\n                padded_pixmap.fill(QtCore.Qt.transparent)\n                \n                # Calculate padding (scale to 80% of the canvas)\n                scale_factor = 0.8\n                new_w = int(size * scale_factor)\n                new_h = int(size * scale_factor)\n                x = (size - new_w) // 2\n                y = (size - new_h) // 2\n                \n                painter = QtGui.QPainter(padded_pixmap)\n                painter.setRenderHint(QtGui.QPainter.SmoothPixmapTransform)\n                painter.setRenderHint(QtGui.QPainter.Antialiasing)\n                \n                painter.drawPixmap(x, y, new_w, new_h, original_pixmap)\n                painter.end()\n                \n                app.setWindowIcon(QtGui.QIcon(padded_pixmap))\n        \n        # For macOS Dock icon (sometimes requires this specific call or packaging)\n        try:\n            # This is a workaround for Python not being a bundled app on macOS\n            pass \n        except:\n            pass\n    \n    # Main Window\n    myapp = MainForm()\n    myapp.show()\n    \n    sys.exit(app.exec_())\n"
  },
  {
    "path": "ApkDetecter.pyw",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Andy'\n\nimport sys\nimport os\n\n# Add libs to path\nsys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'libs'))\n\nfrom PyQt5 import QtWidgets\nimport StyleSheet\nfrom GUI.MainForm import MainForm\n\nif __name__ == \"__main__\":\n    app = QtWidgets.QApplication(sys.argv)\n    \n    # Set Style\n    app.setStyle(\"Fusion\")\n    app.setStyleSheet(StyleSheet.QSS)\n    \n    # Main Window\n    myapp = MainForm()\n    myapp.show()\n    \n    sys.exit(app.exec_())\n"
  },
  {
    "path": "ApkDetecter.spec",
    "content": "# -*- mode: python ; coding: utf-8 -*-\n\nblock_cipher = None\n\nimport os\nimport sys\n\n# Ensure libs path is included\nsys.path.insert(0, os.path.abspath('libs'))\n\na = Analysis(\n    ['ApkDetecter.py'],\n    pathex=['.'],\n    binaries=[],\n    datas=[\n        ('Resources', 'Resources'),\n        ('libs', 'libs'),\n        ('Core', 'Core'),\n        ('GUI', 'GUI'),\n        ('AnalysisCSN', 'AnalysisCSN'),\n        ('AnalysisDEX', 'AnalysisDEX'),\n        ('AnalysisXML', 'AnalysisXML'),\n    ],\n    hiddenimports=[\n        'PyQt5', \n        'cryptography', \n        'asn1crypto', \n        'androguard', \n        'click', \n        'colorama', \n        'loguru',\n        'xml.etree.ElementTree',\n        'zipfile'\n    ],\n    hookspath=[],\n    hooksconfig={},\n    runtime_hooks=[],\n    excludes=[],\n    cipher=block_cipher,\n    noarchive=False,\n)\n\npyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)\n\nexe = EXE(\n    pyz,\n    a.scripts,\n    [],\n    exclude_binaries=True,\n    name='ApkDetecter',\n    debug=False,\n    bootloader_ignore_signals=False,\n    strip=False,\n    upx=True,\n    console=False, \n    disable_windowed_traceback=False,\n    argv_emulation=False,\n    target_arch=None,\n    codesign_identity=None,\n    entitlements_file=None,\n    icon='Resources/logo.png'\n)\n\ncoll = COLLECT(\n    exe,\n    a.binaries,\n    a.zipfiles,\n    a.datas,\n    strip=False,\n    upx=True,\n    upx_exclude=[],\n    name='ApkDetecter',\n)\n\napp = BUNDLE(\n    coll,\n    name='ApkDetecter.app',\n    icon='Resources/AppIcon.icns',\n    bundle_identifier='com.apkdetecter.app',\n    info_plist={\n        'NSHighResolutionCapable': 'True',\n        'CFBundleShortVersionString': '1.0.0',\n        'CFBundleVersion': '1.0.0',\n    },\n)\n"
  },
  {
    "path": "CheckProtect.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Andy'\n\nimport json\nimport os\nfrom androguard.core.apk import APK\n\nclass CheckProtect:\n    def __init__(self, apk_obj):\n        \"\"\"\n        :param apk_obj: androguard.core.apk.APK object\n        \"\"\"\n        self.apk = apk_obj\n        self.signatures = []\n        self._load_signatures()\n\n    def _load_signatures(self):\n        \"\"\"\n        Load signatures from Resources/signatures.json\n        \"\"\"\n        try:\n            base_dir = os.path.dirname(os.path.abspath(__file__))\n            json_path = os.path.join(base_dir, 'Resources', 'signatures.json')\n            \n            if os.path.exists(json_path):\n                with open(json_path, 'r', encoding='utf-8') as f:\n                    data = json.load(f)\n                    self.signatures = data.get('signatures', [])\n            else:\n                # Fallback if file not found (though it should be there)\n                print(f\"Warning: Signature file not found at {json_path}\")\n        except Exception as e:\n            print(f\"Error loading signatures: {e}\")\n\n    def check_protectflag(self):\n        detected_protectors = set()\n        files = self.apk.get_files()\n        \n        # Pre-process files for faster matching\n        # file_set: just filenames (e.g., \"libjiagu.so\")\n        file_set = set()\n        # path_set: full paths (e.g., \"assets/libjiagu.so\")\n        path_set = set(files)\n        \n        for f in files:\n            # Extract basename\n            if '/' in f:\n                basename = f.split('/')[-1]\n            else:\n                basename = f\n            file_set.add(basename)\n\n        for signature in self.signatures:\n            name = signature['name']\n            rules = signature.get('rules', [])\n            \n            match_found = False\n            for rule in rules:\n                rule_type = rule.get('type', 'file')\n                \n                if rule_type == 'combined':\n                    # All conditions must be met\n                    conditions = rule.get('conditions', [])\n                    all_conditions_met = True\n                    for cond in conditions:\n                        if not self._check_rule(cond, file_set, path_set):\n                            all_conditions_met = False\n                            break\n                    if all_conditions_met:\n                        match_found = True\n                        break\n                else:\n                    # Single rule\n                    if self._check_rule(rule, file_set, path_set):\n                        match_found = True\n                        break\n            \n            if match_found:\n                detected_protectors.add(name)\n\n        if detected_protectors:\n            # Format: \"该APK已加固=>360加固 腾讯加固\"\n            return \"该APK已加固=>\" + \" \".join(sorted(detected_protectors))\n        \n        return \"该APK未加密\"\n\n    def _check_rule(self, rule, file_set, path_set):\n        rule_type = rule.get('type', 'file')\n        pattern = rule.get('pattern', '')\n        match_mode = rule.get('match', 'exact') # exact, startswith, endswith, contains\n\n        target_set = file_set if rule_type == 'file' else path_set\n\n        # Optimization for exact match on file set\n        if rule_type == 'file' and match_mode == 'exact':\n            return pattern in target_set\n\n        # For other cases, iterate\n        for item in target_set:\n            if match_mode == 'exact':\n                if item == pattern: return True\n            elif match_mode == 'startswith':\n                if item.startswith(pattern): return True\n            elif match_mode == 'endswith':\n                if item.endswith(pattern): return True\n            elif match_mode == 'contains':\n                if pattern in item: return True\n        \n        return False\n"
  },
  {
    "path": "GUI/AppInfoWidget.py",
    "content": "\nfrom PyQt5 import QtWidgets, QtCore, QtGui\nimport os\nimport platform\n\nclass AppInfoWidget(QtWidgets.QWidget):\n    def __init__(self, parent=None):\n        super(AppInfoWidget, self).__init__(parent)\n        self.init_ui()\n\n    def init_ui(self):\n        self.layout = QtWidgets.QVBoxLayout(self)\n        self.layout.setContentsMargins(0, 0, 0, 0)\n        self.layout.setSpacing(10)\n\n        # Header Section\n        self.header_frame = QtWidgets.QFrame()\n        self.header_frame.setObjectName(\"HeaderFrame\")\n        self.header_layout = QtWidgets.QHBoxLayout(self.header_frame)\n        self.header_layout.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) # Align Top\n        self.header_layout.setSpacing(20)\n        \n        # Icon\n        self.icon_label = QtWidgets.QLabel()\n        self.icon_label.setFixedSize(125, 125)\n        self.icon_label.setAlignment(QtCore.Qt.AlignCenter)\n        self.icon_label.setStyleSheet(\"background-color: #333; border-radius: 10px;\")\n        \n        # Info Block\n        self.title_info_layout = QtWidgets.QVBoxLayout()\n        self.title_info_layout.setAlignment(QtCore.Qt.AlignTop) # Also Align Top\n        self.title_info_layout.setSpacing(5)\n        self.title_info_layout.setContentsMargins(0, 5, 0, 0) \n        \n        # Platform specific font sizes\n        if platform.system() == 'Windows':\n            name_size = \"30px\"\n            pkg_size = \"29px\"\n        else:\n            name_size = \"18px\"\n            pkg_size = \"14px\"\n\n        self.app_name_label = QtWidgets.QLabel(\"App Name\")\n        self.app_name_label.setStyleSheet(f\"font-size: {name_size}; font-weight: bold; color: #fff;\")\n        self.package_label = QtWidgets.QLabel(\"com.example.app\")\n        self.package_label.setStyleSheet(f\"color: #aaa; font-size: {pkg_size};\")\n        self.version_label = QtWidgets.QLabel(\"v1.0.0\")\n        self.version_label.setStyleSheet(\"color: #4da6ff; font-weight: bold;\")\n        \n        self.title_info_layout.addWidget(self.app_name_label)\n        self.title_info_layout.addWidget(self.package_label)\n        self.title_info_layout.addWidget(self.version_label)\n        \n        self.header_layout.addWidget(self.icon_label)\n        self.header_layout.addLayout(self.title_info_layout)\n        self.header_layout.addStretch()\n\n        self.layout.addWidget(self.header_frame)\n\n        # Tabs\n        self.tabs = QtWidgets.QTabWidget()\n        self.layout.addWidget(self.tabs)\n\n        # Tab 1: Basic Info\n        self.tab_basic = QtWidgets.QWidget()\n        self.tabs.addTab(self.tab_basic, \"Basic Info\")\n        self.init_basic_tab()\n\n        # Tab 2: Permissions (Was Advanced Info)\n        self.tab_perms = QtWidgets.QWidget()\n        self.tabs.addTab(self.tab_perms, \"Permissions & Entitlements\")\n        self.init_perms_tab()\n        \n        # Tab 3: Components (Dynamic)\n        self.tab_components = QtWidgets.QTextEdit()\n        self.tab_components.setReadOnly(True)\n        self.tabs.addTab(self.tab_components, \"Components\")\n\n    def init_basic_tab(self):\n        # Using a ScrollArea because Cert info can be long\n        self.basic_scroll = QtWidgets.QScrollArea(self.tab_basic)\n        self.basic_scroll.setWidgetResizable(True)\n        self.basic_scroll.setFrameShape(QtWidgets.QFrame.NoFrame)\n        \n        # Main Layout for Tab (holds ScrollArea)\n        tab_layout = QtWidgets.QVBoxLayout(self.tab_basic)\n        tab_layout.setContentsMargins(0,0,0,0)\n        tab_layout.addWidget(self.basic_scroll)\n        \n        # Content Widget inside ScrollArea\n        self.basic_content = QtWidgets.QWidget()\n        self.basic_scroll.setWidget(self.basic_content)\n        \n        layout = QtWidgets.QVBoxLayout(self.basic_content)\n        layout.setAlignment(QtCore.Qt.AlignTop)\n        layout.setSpacing(15)\n\n        # --- Grid for key-value pairs ---\n        self.grid_widget = QtWidgets.QWidget()\n        grid_layout = QtWidgets.QGridLayout(self.grid_widget)\n        grid_layout.setContentsMargins(0,0,0,0)\n        \n        self.basic_labels = {}\n        keys = [\n            (\"Size\", \"size\"),\n            (\"MD5\", \"md5\"),\n            (\"Min SDK / OS\", \"min_sdk\"),\n            (\"Target SDK\", \"target_sdk\"),\n            (\"Protection\", \"protect\")\n        ]\n\n        row = 0\n        for label_text, key in keys:\n            lbl = QtWidgets.QLabel(label_text + \":\")\n            lbl.setStyleSheet(\"color: #ccc; font-weight: bold;\")\n            val = QtWidgets.QLineEdit()\n            val.setReadOnly(True)\n            val.setObjectName(f\"val_{key}\")\n            \n            grid_layout.addWidget(lbl, row, 0)\n            grid_layout.addWidget(val, row, 1)\n            self.basic_labels[key] = val\n            row += 1\n            \n        layout.addWidget(self.grid_widget)\n        \n        # --- Certificate / Provisioning Info Section ---\n        self.cert_label = QtWidgets.QLabel(\"Certificate / Signature Info\")\n        \n        if platform.system() == 'Windows':\n            cert_size = \"26px\"\n        else:\n            cert_size = \"16px\"\n            \n        self.cert_label.setStyleSheet(f\"font-size: {cert_size}; font-weight: bold; color: #4da6ff; margin-top: 20px; margin-bottom: 5px;\")\n        layout.addWidget(self.cert_label)\n        \n        self.cert_text = QtWidgets.QTextEdit()\n        self.cert_text.setReadOnly(True)\n        # Allow it to expand\n        self.cert_text.setMinimumHeight(200)\n        layout.addWidget(self.cert_text)\n\n\n    def init_perms_tab(self):\n        layout = QtWidgets.QVBoxLayout(self.tab_perms)\n        self.perms_text = QtWidgets.QTextEdit()\n        self.perms_text.setReadOnly(True)\n        layout.addWidget(self.perms_text)\n\n    def update_data(self, analyzer_type, analyzer):\n        # Update Header\n        info = analyzer.get_basic_info()\n        self.app_name_label.setText(str(info.get('name', 'Unknown')))\n        self.package_label.setText(str(info.get('package', 'Unknown')))\n        self.version_label.setText(str(info.get('version', 'Unknown')))\n\n        # Update Icon\n        if analyzer.icon_data:\n            pixmap = QtGui.QPixmap()\n            if not pixmap.loadFromData(analyzer.icon_data):\n                self.icon_label.setText(\"Bad Icon\")\n            else:\n                self.icon_label.setPixmap(pixmap.scaled(100, 100, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation))\n        else:\n            self.icon_label.setText(\"No Icon\")\n\n        # Update Basic Info (Grid)\n        for key, widget in self.basic_labels.items():\n            val = info.get(key, 'N/A')\n            widget.setText(str(val))\n\n        # Update Cert/Prov Info & Permissions based on type\n        if analyzer_type == 'apk':\n            self._update_apk_details(analyzer)\n        else:\n            self._update_ipa_details(analyzer)\n\n    def _update_apk_details(self, analyzer):\n        # 1. Certificate Info (Now in Basic Tab)\n        content = \"\"\n        cert = analyzer.cert_info\n        if cert:\n            content += f\"<b>Issuer:</b> {cert.get('issuer')}<br>\"\n            content += f\"<b>Subject:</b> {cert.get('subject')}<br>\"\n            content += f\"<b>Serial:</b> {cert.get('serial')}<br>\"\n            content += f\"<b>SHA1:</b> {cert.get('sha1')}<br>\"\n            content += f\"<b>SHA256:</b> {cert.get('sha256')}<br>\"\n        else:\n            content += \"No certificate info found.<br>\"\n        \n        self.cert_text.setHtml(content)\n\n        # 2. Permissions (Now in Permissions Tab)\n        perm_content = \"<h2>Permissions</h2>\"\n        perms = analyzer.info.get('permissions', [])\n        if perms:\n            perm_content += \"<ul>\"\n            for p in perms:\n                perm_content += f\"<li>{p}</li>\"\n            perm_content += \"</ul>\"\n        else:\n            perm_content += \"<p>No permissions requested.</p>\"\n\n        self.perms_text.setHtml(perm_content)\n\n        # 3. Components\n        comp_text = \"Activities:\\n\" + \"\\n\".join(analyzer.info.get('activities', []))\n        comp_text += \"\\n\\nServices:\\n\" + \"\\n\".join(analyzer.info.get('services', []))\n        comp_text += \"\\n\\nReceivers:\\n\" + \"\\n\".join(analyzer.info.get('receivers', []))\n        comp_text += \"\\n\\nProviders:\\n\" + \"\\n\".join(analyzer.info.get('providers', []))\n        self.tab_components.setText(comp_text)\n\n    def _update_ipa_details(self, analyzer):\n        details = analyzer.get_details()\n        prov = details.get('provision', {})\n\n        # 1. Provisioning Info (Now in Basic Tab)\n        content = \"\"\n        if prov:\n            content += f\"<b>App ID Name:</b> {prov.get('app_id_name')}<br>\"\n            content += f\"<b>Team Name:</b> {prov.get('team_name')} ({prov.get('team_id')})<br>\"\n            content += f\"<b>UUID:</b> {prov.get('uuid')}<br>\"\n            content += f\"<b>Created:</b> {prov.get('creation_date')}<br>\"\n            content += f\"<b>Expires:</b> {prov.get('expiration_date')}<br>\"\n            content += \"<h3>Provisioned Devices</h3><ul>\"\n            for dev in prov.get('provisioned_devices', []):\n                content += f\"<li>{dev}</li>\"\n            content += \"</ul>\"\n        else:\n            content += \"<p>No embedded.mobileprovision found.</p>\"\n            \n        self.cert_text.setHtml(content)\n\n        # 2. Entitlements (Now in Permissions Tab)\n        perm_content = \"<h2>Entitlements</h2>\"\n        if prov:\n            perm_content += \"<ul>\"\n            for k, v in prov.get('entitlements', {}).items():\n                perm_content += f\"<li><b>{k}:</b> {v}</li>\"\n            perm_content += \"</ul>\"\n        else:\n             perm_content += \"<p>No entitlements found.</p>\"\n        \n        self.perms_text.setHtml(perm_content)\n\n        # 3. Components\n        comp_text = \"URL Schemes:\\n\"\n        for scheme in details.get('url_schemes', []):\n            comp_text += f\"- {scheme}\\n\"\n        \n        comp_text += f\"\\nSupported Platforms: {details.get('supported_platforms')}\"\n        comp_text += f\"\\nDTPlatformName: {details.get('platform')}\"\n        \n        self.tab_components.setText(comp_text)\n"
  },
  {
    "path": "GUI/MainForm.py",
    "content": "\nfrom PyQt5 import QtWidgets, QtCore, QtGui\nimport sys\nimport os\nimport platform\n\nfrom GUI.AppInfoWidget import AppInfoWidget\nfrom Core.ApkAnalyzer import ApkAnalyzer\nfrom Core.IpaAnalyzer import IpaAnalyzer\nfrom Core.DeepScanner import DeepScanner\n\nclass DeepScanThread(QtCore.QThread):\n    progress_signal = QtCore.pyqtSignal(int, str)\n    finished_signal = QtCore.pyqtSignal(object)\n\n    def __init__(self, apk_obj=None, ipa_path=None, analyzer=None):\n        super(DeepScanThread, self).__init__()\n        self.apk = apk_obj\n        self.ipa_path = ipa_path\n        self.analyzer = analyzer\n\n    def run(self):\n        binary_path_in_zip = None\n        if self.analyzer and hasattr(self.analyzer, 'binary_path'):\n            binary_path_in_zip = self.analyzer.binary_path\n            \n        scanner = DeepScanner(self.apk, self.ipa_path, binary_path_in_zip)\n        results = scanner.scan(self.emit_progress)\n        self.finished_signal.emit(results)\n\n    def emit_progress(self, value, message):\n        self.progress_signal.emit(value, message)\n\nclass AnalysisThread(QtCore.QThread):\n    progress_signal = QtCore.pyqtSignal(int, str)\n    finished_signal = QtCore.pyqtSignal(bool, object, str)\n\n    def __init__(self, file_path):\n        super(AnalysisThread, self).__init__()\n        self.file_path = file_path\n        self.analyzer = None\n        self.analyzer_type = None\n\n    def run(self):\n        try:\n            if self.file_path.lower().endswith('.apk'):\n                self.analyzer = ApkAnalyzer(self.file_path)\n                self.analyzer_type = 'apk'\n            elif self.file_path.lower().endswith('.ipa'):\n                self.analyzer = IpaAnalyzer(self.file_path)\n                self.analyzer_type = 'ipa'\n            else:\n                self.finished_signal.emit(False, None, \"Unsupported file type\")\n                return\n\n            self.analyzer.set_progress_callback(self.emit_progress)\n            success = self.analyzer.analyze()\n            \n            if success:\n                self.finished_signal.emit(True, self.analyzer, self.analyzer_type)\n            else:\n                self.finished_signal.emit(False, None, self.analyzer.error)\n        except Exception as e:\n            self.finished_signal.emit(False, None, str(e))\n            import traceback\n            traceback.print_exc()\n\n    def emit_progress(self, value, message):\n        self.progress_signal.emit(value, message)\n\nclass OverlayWidget(QtWidgets.QWidget):\n    def __init__(self, parent=None):\n        super(OverlayWidget, self).__init__(parent)\n        self.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents, False)\n        self.setAttribute(QtCore.Qt.WA_NoSystemBackground, False)\n        \n        # Auto-progress timer to prevent \"stuck\" feeling\n        self.creep_timer = QtCore.QTimer(self)\n        self.creep_timer.timeout.connect(self._on_creep_timer)\n        self.creep_mode = False\n        \n        # Layer 1: Log (Bottom)\n        self.log_widget = QtWidgets.QTextEdit(self)\n        self.log_widget.setReadOnly(True)\n        \n        if platform.system() == 'Windows':\n            log_font_size = \"20px\"\n            card_width = 800\n            loading_font = \"36px\"\n            action_font = \"20px\"\n        else:\n            log_font_size = \"13px\"\n            card_width = 500\n            loading_font = \"24px\"\n            action_font = \"14px\"\n            \n        self.log_widget.setStyleSheet(f\"\"\"\n            QTextEdit {{\n                background-color: #1a1a1a;\n                color: #00ff00;\n                border: none;\n                font-family: \"Courier New\", monospace;\n                font-size: {log_font_size};\n                padding: 10px;\n            }}\n        \"\"\")\n        \n        # Layer 2: Dim/Blur (Middle)\n        self.dim_widget = QtWidgets.QWidget(self)\n        self.dim_widget.setStyleSheet(\"background-color: rgba(0, 0, 0, 150);\")\n        self.dim_widget.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)\n        \n        # Layer 3: Progress (Top)\n        self.progress_container = QtWidgets.QWidget(self)\n        self.progress_container.setAttribute(QtCore.Qt.WA_TranslucentBackground)\n        \n        # Setup Progress Layout\n        self.progress_layout = QtWidgets.QVBoxLayout(self.progress_container)\n        self.progress_layout.setAlignment(QtCore.Qt.AlignCenter)\n        \n        self.progress_card = QtWidgets.QWidget()\n        self.progress_card.setFixedWidth(card_width)\n        self.progress_card.setStyleSheet(\"\"\"\n            QWidget {\n                background-color: rgba(40, 40, 40, 240);\n                border: 1px solid #555;\n                border-radius: 10px;\n            }\n            QLabel {\n                background-color: transparent;\n                color: white;\n                border: none;\n            }\n        \"\"\")\n        \n        card_layout = QtWidgets.QVBoxLayout(self.progress_card)\n        card_layout.setContentsMargins(30, 30, 30, 30)\n        \n        self.loading_label = QtWidgets.QLabel(\"Analyzing...\")\n        self.loading_label.setStyleSheet(f\"font-size: {loading_font}; font-weight: bold; margin-bottom: 10px;\")\n        self.loading_label.setAlignment(QtCore.Qt.AlignCenter)\n        \n        self.progress_bar = QtWidgets.QProgressBar()\n        \n        if platform.system() == 'Windows':\n            self.progress_bar.setFixedHeight(30)\n            pb_font_size = \"18px\"\n        else:\n            self.progress_bar.setFixedHeight(8)\n            pb_font_size = \"10px\"\n            \n        self.progress_bar.setStyleSheet(f\"\"\"\n            QProgressBar {{\n                border: none;\n                background-color: #444;\n                border-radius: 4px;\n                text-align: center;\n                color: white;\n                font-weight: bold;\n                font-size: {pb_font_size};\n            }}\n            QProgressBar::chunk {{\n                background-color: #007acc;\n                border-radius: 4px;\n            }}\n        \"\"\")\n        \n        self.current_action_label = QtWidgets.QLabel(\"Initializing...\")\n        self.current_action_label.setStyleSheet(f\"font-size: {action_font}; color: #aaa; margin-top: 5px;\")\n        self.current_action_label.setAlignment(QtCore.Qt.AlignCenter)\n        \n        card_layout.addWidget(self.loading_label)\n        card_layout.addWidget(self.progress_bar)\n        card_layout.addWidget(self.current_action_label)\n        \n        self.progress_layout.addWidget(self.progress_card)\n\n    def resizeEvent(self, event):\n        s = event.size()\n        # Ensure full coverage\n        self.log_widget.setGeometry(0, 0, s.width(), s.height())\n        self.dim_widget.setGeometry(0, 0, s.width(), s.height())\n        self.progress_container.setGeometry(0, 0, s.width(), s.height())\n        \n        # Ensure Z-Order (Lower is bottom)\n        self.log_widget.lower()\n        self.dim_widget.stackUnder(self.progress_container)\n        self.progress_container.raise_()\n        \n        super(OverlayWidget, self).resizeEvent(event)\n\n    def set_progress(self, value, message):\n        # Always update message\n        self.current_action_label.setText(message)\n        self.log_text_append(f\"> {message}\")\n\n        # Logic for progress bar\n        current_val = self.progress_bar.value()\n        \n        # Reset if value is 0 (new analysis)\n        if value == 0:\n            self.progress_bar.setValue(0)\n            self.creep_timer.stop() # Stop previous timer if any\n            return\n\n        # If new value is higher, jump to it\n        if value > current_val:\n            self.progress_bar.setValue(value)\n        \n        # If value is 100, stop creep\n        if value >= 100:\n            self.creep_timer.stop()\n            self.progress_bar.setValue(100)\n        elif value > 0 and not self.creep_timer.isActive():\n            # Start creeping if not started\n            self._start_creep()\n\n    def _start_creep(self):\n        # Start a slow timer to increment progress artificially\n        # This prevents the \"stuck\" feeling\n        self.creep_timer.start(500) # Check every 500ms\n\n    def _on_creep_timer(self):\n        val = self.progress_bar.value()\n        if val < 95:\n            # Slow down as we get higher\n            # 0-50: fast\n            # 50-80: medium\n            # 80-95: slow\n            \n            should_increment = False\n            import random\n            \n            if val < 50:\n                should_increment = True # Always increment\n            elif val < 80:\n                should_increment = (random.random() > 0.3) # 70% chance\n            else:\n                should_increment = (random.random() > 0.7) # 30% chance\n                \n            if should_increment:\n                self.progress_bar.setValue(val + 1)\n\n    def log_text_append(self, text):\n        self.log_widget.append(text)\n        cursor = self.log_widget.textCursor()\n        cursor.movePosition(QtGui.QTextCursor.End)\n        self.log_widget.setTextCursor(cursor)\n        \n    def clear_log(self):\n        self.log_widget.clear()\n\n\nclass MainForm(QtWidgets.QMainWindow):\n    def __init__(self):\n        super(MainForm, self).__init__()\n        self.setWindowTitle(\"AppDetecter - Modern APK/IPA Analyzer\")\n        \n        if platform.system() == 'Windows':\n            self.resize(1600, 1100) # Windows specific large size\n        else:\n            self.resize(900, 600) # Mac default\n            \n        self.setAcceptDrops(True)\n        \n        self.init_ui()\n\n    def load_icon(self, name):\n        \"\"\"Helper to load icons from Resources/icons/\"\"\"\n        if getattr(sys, 'frozen', False):\n            base_dir = sys._MEIPASS\n        else:\n            base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n            \n        icon_path = os.path.join(base_dir, 'Resources', 'icons', f'{name}.svg')\n        if os.path.exists(icon_path):\n            return QtGui.QIcon(icon_path)\n        return QtGui.QIcon() # Return empty icon if not found\n\n    def init_ui(self):\n        # Central Widget\n        self.central_widget = QtWidgets.QWidget()\n        self.setCentralWidget(self.central_widget)\n        self.main_layout = QtWidgets.QVBoxLayout(self.central_widget)\n        self.main_layout.setContentsMargins(0, 0, 0, 0) # Full bleed\n\n        # Stacked Layout to hold Drop Area and App Info\n        self.stacked_widget = QtWidgets.QStackedWidget()\n        self.main_layout.addWidget(self.stacked_widget)\n\n        # 1. Drop Area Page\n        self.drop_page = QtWidgets.QWidget()\n        drop_layout = QtWidgets.QVBoxLayout(self.drop_page)\n        drop_layout.setAlignment(QtCore.Qt.AlignCenter)\n        \n        self.drop_label = QtWidgets.QLabel(\"Drop APK / IPA File Here\")\n        self.drop_label.setAlignment(QtCore.Qt.AlignCenter)\n        self.drop_label.setStyleSheet(\"\"\"\n            QLabel {\n                font-size: 36px;\n                color: #888;\n                font-weight: bold;\n            }\n        \"\"\")\n        \n        self.sub_drop_label = QtWidgets.QLabel(\"or select File > Open from menu\")\n        self.sub_drop_label.setAlignment(QtCore.Qt.AlignCenter)\n        self.sub_drop_label.setStyleSheet(\"font-size: 18px; color: #666;\")\n        \n        # Try to load logo\n        # For Window Icon: Handled in ApkDetecter.py globally\n        # logo_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'Resources', 'logo.png')\n        # if os.path.exists(logo_path):\n        #    self.setWindowIcon(QtGui.QIcon(logo_path))\n\n        drop_layout.addStretch()\n        # Removed icon_graphic from display\n        drop_layout.addWidget(self.drop_label)\n        drop_layout.addWidget(self.sub_drop_label)\n        drop_layout.addStretch()\n        \n        self.stacked_widget.addWidget(self.drop_page)\n\n        # 2. App Info Page\n        self.app_info_widget = AppInfoWidget()\n        self.stacked_widget.addWidget(self.app_info_widget)\n\n        # Overlay for Loading (Hidden by default)\n        # Note: Parent is central_widget to cover everything inside it\n        self.overlay = OverlayWidget(self.central_widget)\n        self.overlay.hide()\n\n        # Menu Bar\n        # On macOS, we want the native global menu bar.\n        # On Windows, user requested to remove it to match Mac's \"clean window\" look (since Mac has it in system bar).\n        if platform.system() == 'Darwin':\n            menubar = self.menuBar()\n            file_menu = menubar.addMenu(\"File\")\n            \n            open_action = QtWidgets.QAction(\"Open\", self)\n            open_action.setShortcut(\"Ctrl+O\")\n            open_action.setIcon(self.load_icon('open'))\n            open_action.triggered.connect(self.open_file_dialog)\n            file_menu.addAction(open_action)\n\n            exit_action = QtWidgets.QAction(\"Exit\", self)\n            exit_action.setShortcut(\"Ctrl+Q\")\n            exit_action.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogCloseButton))\n            exit_action.triggered.connect(self.close)\n            file_menu.addAction(exit_action)\n            \n            help_menu = menubar.addMenu(\"Help\")\n            about_action = QtWidgets.QAction(\"About\", self)\n            about_action.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxInformation))\n            about_action.triggered.connect(self.show_about)\n            help_menu.addAction(about_action)\n        else:\n            # For Windows (and others), we define actions but don't add them to a MenuBar\n            # ensuring they can still be triggered via shortcuts or Toolbar if needed.\n            open_action = QtWidgets.QAction(\"Open\", self)\n            open_action.setShortcut(\"Ctrl+O\")\n            open_action.setIcon(self.load_icon('open'))\n            open_action.triggered.connect(self.open_file_dialog)\n\n            exit_action = QtWidgets.QAction(\"Exit\", self)\n            exit_action.setShortcut(\"Ctrl+Q\")\n            exit_action.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogCloseButton))\n            exit_action.triggered.connect(self.close)\n            \n            about_action = QtWidgets.QAction(\"About\", self)\n            about_action.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxInformation))\n            about_action.triggered.connect(self.show_about)\n\n        # Toolbar\n        toolbar = QtWidgets.QToolBar(\"Main Toolbar\")\n        toolbar.setMovable(False)\n        toolbar.setFloatable(False)\n        if platform.system() == 'Windows':\n            toolbar.setIconSize(QtCore.QSize(48, 48))\n        else:\n            toolbar.setIconSize(QtCore.QSize(32, 32)) # Default mac size\n        self.addToolBar(toolbar)\n\n        toolbar.addAction(open_action)\n\n        # Clear Action\n        clear_action = QtWidgets.QAction(\"Clear\", self)\n        clear_action.setIcon(self.load_icon('clear'))\n        clear_action.setToolTip(\"Clear current analysis\")\n        clear_action.triggered.connect(self.clear_analysis)\n        toolbar.addAction(clear_action)\n\n        toolbar.addSeparator()\n\n        # Export Action\n        export_action = QtWidgets.QAction(\"Export\", self)\n        export_action.setIcon(self.load_icon('export'))\n        export_action.setToolTip(\"Export analysis report\")\n        export_action.triggered.connect(self.export_report)\n        toolbar.addAction(export_action)\n        \n        # Deep Scan Action\n        deep_scan_action = QtWidgets.QAction(\"Deep Scan\", self)\n        deep_scan_action.setIcon(self.load_icon('scan'))\n        deep_scan_action.setToolTip(\"Run deep scan (Slow)\")\n        deep_scan_action.triggered.connect(self.run_deep_scan)\n        toolbar.addAction(deep_scan_action)\n\n        # Add a spacer to push other items (if any)\n        # empty_widget = QtWidgets.QWidget()\n        # empty_widget.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)\n        # toolbar.addWidget(empty_widget)\n        \n        # Status Bar\n        self.status_bar = self.statusBar()\n        self.status_bar.showMessage(\"Ready\")\n\n    def resizeEvent(self, event):\n        # Resize overlay to cover entire window content area\n        self.overlay.resize(self.central_widget.size())\n        super(MainForm, self).resizeEvent(event)\n\n    def dragEnterEvent(self, event):\n        if event.mimeData().hasUrls():\n            event.accept()\n            self.drop_page.setStyleSheet(\"background-color: #2a2a2a;\") # Highlight\n        else:\n            event.ignore()\n\n    def dragLeaveEvent(self, event):\n        self.drop_page.setStyleSheet(\"\") # Reset\n\n    def dropEvent(self, event):\n        self.drop_page.setStyleSheet(\"\")\n        files = [u.toLocalFile() for u in event.mimeData().urls()]\n        for f in files:\n            if f.lower().endswith('.apk') or f.lower().endswith('.ipa'):\n                self.load_file(f)\n                break\n\n    def open_file_dialog(self):\n        options = QtWidgets.QFileDialog.Options()\n        fname, _ = QtWidgets.QFileDialog.getOpenFileName(self, \"Open App File\", \"\", \"App Files (*.apk *.ipa);;APK Files (*.apk);;IPA Files (*.ipa);;All Files (*)\", options=options)\n        if fname:\n            self.load_file(fname)\n\n    def load_file(self, file_path):\n        self.overlay.clear_log() # Clear previous logs\n        self.overlay.show()\n        self.overlay.raise_()\n        self.overlay.set_progress(0, f\"Initializing analysis for {os.path.basename(file_path)}...\")\n        self.status_bar.showMessage(f\"Analyzing {file_path}...\")\n\n        # Start Thread\n        self.thread = AnalysisThread(file_path)\n        self.thread.progress_signal.connect(self.update_progress)\n        self.thread.finished_signal.connect(self.analysis_finished)\n        self.thread.start()\n\n    def update_progress(self, value, message):\n        self.overlay.set_progress(value, message)\n        self.status_bar.showMessage(message)\n\n    def analysis_finished(self, success, analyzer, analyzer_type):\n        self.overlay.hide()\n        \n        if success:\n            self.stacked_widget.setCurrentWidget(self.app_info_widget)\n            self.app_info_widget.update_data(analyzer_type, analyzer)\n            self.status_bar.showMessage(f\"Loaded: {os.path.basename(self.thread.file_path)}\")\n            \n            # Store data for export\n            self.current_analyzer_info = analyzer.get_basic_info()\n            # Add more details if needed\n            self.current_analyzer_info['full_details'] = analyzer.info\n            \n        else:\n            self.stacked_widget.setCurrentWidget(self.drop_page)\n            error_msg = analyzer_type if analyzer_type else \"Error\"\n            QtWidgets.QMessageBox.critical(self, \"Analysis Error\", str(error_msg))\n            self.status_bar.showMessage(\"Analysis failed.\")\n\n    def show_about(self):\n        QtWidgets.QMessageBox.about(self, \"About\", \n            \"<h3>AppDetecter</h3>\"\n            \"<p>A modern tool for analyzing Android (APK) and iOS (IPA) applications.</p>\"\n            \"<p>Refactored by AYL.</p>\"\n        )\n\n    def clear_analysis(self):\n        self.stacked_widget.setCurrentWidget(self.drop_page)\n        self.status_bar.showMessage(\"Ready\")\n        self.setWindowTitle(\"AppDetecter - Modern APK/IPA Analyzer\")\n\n    def export_report(self):\n        if self.stacked_widget.currentWidget() != self.app_info_widget:\n            QtWidgets.QMessageBox.warning(self, \"Export\", \"No analysis data to export. Please load an app first.\")\n            return\n\n        options = QtWidgets.QFileDialog.Options()\n        file_path, _ = QtWidgets.QFileDialog.getSaveFileName(self, \"Export Report\", \"report.json\", \"JSON Files (*.json);;Text Files (*.txt)\", options=options)\n        \n        if file_path:\n            try:\n                if hasattr(self, 'current_analyzer_info'):\n                    import json\n                    with open(file_path, 'w', encoding='utf-8') as f:\n                        json.dump(self.current_analyzer_info, f, indent=4, ensure_ascii=False)\n                    self.status_bar.showMessage(f\"Report exported to {file_path}\")\n                else:\n                     QtWidgets.QMessageBox.warning(self, \"Export\", \"Data not available for export.\")\n\n            except Exception as e:\n                QtWidgets.QMessageBox.critical(self, \"Export Error\", str(e))\n\n    def run_deep_scan(self):\n        if self.stacked_widget.currentWidget() != self.app_info_widget:\n            QtWidgets.QMessageBox.warning(self, \"Deep Scan\", \"Please load an app first.\")\n            return\n\n        # Check if we have an analyzer instance\n        if hasattr(self, 'thread') and self.thread.analyzer:\n             analyzer = self.thread.analyzer\n             \n             # Determine type\n             apk_obj = None\n             ipa_path = None\n             \n             if hasattr(analyzer, 'apk'):\n                 apk_obj = analyzer.apk\n             elif hasattr(analyzer, 'file_path') and analyzer.file_path.lower().endswith('.ipa'):\n                 ipa_path = analyzer.file_path\n                 # Pass the found binary path if available\n                 if hasattr(analyzer, 'binary_path'):\n                     # We can't pass it directly to DeepScanner constructor as currently defined,\n                     # but we can improve DeepScanner or DeepScanThread.\n                     # Let's pass the analyzer itself to DeepScanThread instead?\n                     pass\n             \n             if apk_obj or ipa_path:\n                 self.overlay.show()\n                 self.overlay.raise_()\n                 self.overlay.set_progress(0, \"Starting Deep Scan...\")\n                 \n                 # Run in a new thread to avoid blocking UI\n                 self.scan_thread = DeepScanThread(apk_obj, ipa_path, analyzer)\n                 self.scan_thread.progress_signal.connect(self.update_progress)\n                 self.scan_thread.finished_signal.connect(self.deep_scan_finished)\n                 self.scan_thread.start()\n             else:\n                 QtWidgets.QMessageBox.warning(self, \"Deep Scan\", \"Could not determine scan target (APK/IPA).\")\n        else:\n             QtWidgets.QMessageBox.warning(self, \"Deep Scan\", \"Analysis session expired. Please reload the app.\")\n\n    def deep_scan_finished(self, results):\n        self.overlay.hide()\n        self.status_bar.showMessage(\"Deep Scan Completed\")\n        \n        # Show results in a new dialog or tab\n        # For now, let's use a simple dialog with tabs\n        dlg = QtWidgets.QDialog(self)\n        dlg.setWindowTitle(\"Deep Scan Results\")\n        # Remove the context help button (?)\n        dlg.setWindowFlags(dlg.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint)\n        \n        if platform.system() == 'Windows':\n            dlg.resize(1200, 1000)\n        else:\n            dlg.resize(600, 500)\n        \n        layout = QtWidgets.QVBoxLayout(dlg)\n        tabs = QtWidgets.QTabWidget()\n        \n        # Helper to add tab\n        def add_result_tab(name, data_list):\n            widget = QtWidgets.QWidget()\n            vbox = QtWidgets.QVBoxLayout(widget)\n            text_edit = QtWidgets.QTextEdit()\n            text_edit.setReadOnly(True)\n            if data_list:\n                text_edit.setText(\"\\n\".join(data_list))\n            else:\n                text_edit.setText(\"No entries found.\")\n            vbox.addWidget(text_edit)\n            tabs.addTab(widget, f\"{name} ({len(data_list)})\")\n            \n        add_result_tab(\"URLs\", results.get(\"urls\", []))\n        add_result_tab(\"IPs\", results.get(\"ips\", []))\n        add_result_tab(\"Strings\", results.get(\"sensitive_strings\", []))\n        add_result_tab(\"Anti-Debug\", results.get(\"anti_debug\", []))\n        add_result_tab(\"Crypto\", results.get(\"crypto\", []))\n        \n        layout.addWidget(tabs)\n        \n        # Button Box\n        btn_layout = QtWidgets.QHBoxLayout()\n        \n        export_btn = QtWidgets.QPushButton(\"Export Results\")\n        export_btn.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogSaveButton))\n        export_btn.clicked.connect(lambda: self.export_deep_scan_results(results, dlg))\n        btn_layout.addWidget(export_btn)\n        \n        btn_layout.addStretch()\n        \n        close_btn = QtWidgets.QPushButton(\"Close\")\n        close_btn.clicked.connect(dlg.accept)\n        btn_layout.addWidget(close_btn)\n        \n        layout.addLayout(btn_layout)\n        \n        dlg.exec_()\n\n    def export_deep_scan_results(self, results, parent_dlg):\n        options = QtWidgets.QFileDialog.Options()\n        file_path, _ = QtWidgets.QFileDialog.getSaveFileName(parent_dlg, \"Export Deep Scan Results\", \"deep_scan_results.zip\", \"ZIP Files (*.zip)\", options=options)\n        \n        if file_path:\n            try:\n                import zipfile\n                \n                with zipfile.ZipFile(file_path, 'w', zipfile.ZIP_DEFLATED) as zf:\n                    # Helper to write list to file in zip\n                    def write_list_to_zip(name, data_list):\n                        content = \"\"\n                        if data_list:\n                            content = \"\\n\".join(data_list)\n                        else:\n                            content = \"No entries found.\"\n                        zf.writestr(f\"{name}.txt\", content)\n\n                    write_list_to_zip(\"URLs\", results.get(\"urls\", []))\n                    write_list_to_zip(\"IPs\", results.get(\"ips\", []))\n                    write_list_to_zip(\"Strings\", results.get(\"sensitive_strings\", []))\n                    write_list_to_zip(\"Anti-Debug\", results.get(\"anti_debug\", []))\n                    write_list_to_zip(\"Crypto\", results.get(\"crypto\", []))\n\n                QtWidgets.QMessageBox.information(parent_dlg, \"Export\", f\"Results exported to {file_path}\")\n            except Exception as e:\n                QtWidgets.QMessageBox.critical(parent_dlg, \"Export Error\", str(e))\n\n"
  },
  {
    "path": "GUI/StyleSheet.py",
    "content": "\n# Modern Dark Theme for ApkDetecter\nimport platform\n\nQSS_COMMON = \"\"\"\n/* General Window */\nQMainWindow, QDialog, QWidget {\n    background-color: #2b2b2b;\n    color: #e0e0e0;\n    font-family: \"Segoe UI\", \"Arial\", sans-serif;\n}\n\n/* GroupBox */\nQGroupBox {\n    border: 1px solid #3d3d3d;\n    border-radius: 6px;\n    margin-top: 24px;\n    font-weight: bold;\n    color: #e0e0e0;\n}\n\nQGroupBox::title {\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    left: 10px;\n    padding: 0 5px;\n    color: #4da6ff; /* Blue accent */\n}\n\n/* Labels */\nQLabel {\n    color: #cccccc;\n}\n\n/* TextBrowser / TextEdit / LineEdit */\nQTextBrowser, QTextEdit, QLineEdit {\n    background-color: #363636;\n    border: 1px solid #3d3d3d;\n    border-radius: 4px;\n    color: #ffffff;\n    selection-background-color: #4da6ff;\n}\n\nQTextBrowser:disabled, QTextEdit:disabled {\n    background-color: #2f2f2f;\n    color: #909090;\n    border: 1px solid #333333;\n}\n\n/* Push Buttons */\nQPushButton {\n    background-color: #3a3a3a;\n    border: 1px solid #4a4a4a;\n    border-radius: 4px;\n    color: #e0e0e0;\n    padding: 4px 12px;\n    min-height: 20px;\n}\n\nQPushButton:hover {\n    background-color: #4a4a4a;\n    border: 1px solid #5a5a5a;\n}\n\nQPushButton:pressed {\n    background-color: #2a2a2a;\n}\n\nQPushButton#file_open {\n    background-color: #007acc;\n    color: white;\n    border: 1px solid #005c99;\n}\n\nQPushButton#file_open:hover {\n    background-color: #008ae6;\n}\n\nQPushButton#file_open:pressed {\n    background-color: #005c99;\n}\n\n/* Progress Bar */\nQProgressBar {\n    border: 1px solid #3d3d3d;\n    border-radius: 4px;\n    background-color: #363636;\n    text-align: center;\n    color: #e0e0e0;\n}\n\nQProgressBar::chunk {\n    background-color: #007acc;\n    border-radius: 3px;\n}\n\n/* ScrollBars */\nQScrollBar:vertical {\n    border: none;\n    background: #2b2b2b;\n    width: 10px;\n    margin: 0px 0px 0px 0px;\n}\n\nQScrollBar::handle:vertical {\n    background: #505050;\n    min-height: 20px;\n    border-radius: 5px;\n}\n\nQScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {\n    height: 0px;\n}\n\nQScrollBar:horizontal {\n    border: none;\n    background: #2b2b2b;\n    height: 10px;\n    margin: 0px 0px 0px 0px;\n}\n\nQScrollBar::handle:horizontal {\n    background: #505050;\n    min-width: 20px;\n    border-radius: 5px;\n}\n\nQScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {\n    width: 0px;\n}\n\"\"\"\n\nQSS_WIN_OVERRIDES = \"\"\"\n/* Windows Specific Overrides for High DPI / Readability */\nQMainWindow, QDialog, QWidget {\n    font-size: 24px;\n}\n\nQGroupBox {\n    font-size: 26px;\n    margin-top: 36px;\n}\n\nQGroupBox::title {\n    top: -24px;\n    left: 10px;\n}\n\nQLabel {\n    font-size: 24px;\n}\n\nQTextBrowser, QTextEdit, QLineEdit {\n    font-size: 24px;\n    padding: 10px;\n}\n\nQPushButton {\n    padding: 8px 20px;\n    min-height: 32px;\n}\n\nQScrollBar:vertical {\n    width: 20px;\n}\n\nQScrollBar:horizontal {\n    height: 20px;\n}\n\"\"\"\n\nQSS_MAC_OVERRIDES = \"\"\"\n/* macOS Specific Overrides */\nQLabel {\n    font-size: 12px;\n}\n/* Other defaults are usually fine on Mac */\n\"\"\"\n\nif platform.system() == \"Windows\":\n    QSS = QSS_COMMON + QSS_WIN_OVERRIDES\nelse:\n    # Default to Mac/Linux style\n    QSS = QSS_COMMON + QSS_MAC_OVERRIDES\n"
  },
  {
    "path": "GUI/__init__.py",
    "content": "__author__ = 'Andy'\n"
  },
  {
    "path": "GUI/apkdetecter_ui.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>APKDetecter</class>\n <widget class=\"QWidget\" name=\"APKDetecter\">\n  <property name=\"windowModality\">\n   <enum>Qt::WindowModal</enum>\n  </property>\n  <property name=\"enabled\">\n   <bool>true</bool>\n  </property>\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>432</width>\n    <height>237</height>\n   </rect>\n  </property>\n  <property name=\"minimumSize\">\n   <size>\n    <width>432</width>\n    <height>237</height>\n   </size>\n  </property>\n  <property name=\"maximumSize\">\n   <size>\n    <width>432</width>\n    <height>237</height>\n   </size>\n  </property>\n  <property name=\"windowTitle\">\n   <string>APKDetecter</string>\n  </property>\n  <property name=\"windowIcon\">\n   <iconset>\n    <normaloff>C:/Users/Andy/Desktop/20150117051304968_easyicon_net_512.png</normaloff>C:/Users/Andy/Desktop/20150117051304968_easyicon_net_512.png</iconset>\n  </property>\n  <widget class=\"QLabel\" name=\"lab_file\">\n   <property name=\"geometry\">\n    <rect>\n     <x>10</x>\n     <y>10</y>\n     <width>41</width>\n     <height>16</height>\n    </rect>\n   </property>\n   <property name=\"font\">\n    <font>\n     <family>Arial</family>\n     <pointsize>10</pointsize>\n     <weight>75</weight>\n     <bold>true</bold>\n    </font>\n   </property>\n   <property name=\"text\">\n    <string>文 件</string>\n   </property>\n  </widget>\n  <widget class=\"QTextBrowser\" name=\"te_path\">\n   <property name=\"geometry\">\n    <rect>\n     <x>50</x>\n     <y>5</y>\n     <width>291</width>\n     <height>24</height>\n    </rect>\n   </property>\n  </widget>\n  <widget class=\"QPushButton\" name=\"file_open\">\n   <property name=\"geometry\">\n    <rect>\n     <x>350</x>\n     <y>5</y>\n     <width>71</width>\n     <height>23</height>\n    </rect>\n   </property>\n   <property name=\"font\">\n    <font>\n     <family>Arial</family>\n     <pointsize>10</pointsize>\n     <weight>75</weight>\n     <bold>true</bold>\n    </font>\n   </property>\n   <property name=\"text\">\n    <string>打  开</string>\n   </property>\n  </widget>\n  <widget class=\"QGroupBox\" name=\"groupBox\">\n   <property name=\"geometry\">\n    <rect>\n     <x>10</x>\n     <y>30</y>\n     <width>411</width>\n     <height>181</height>\n    </rect>\n   </property>\n   <property name=\"font\">\n    <font>\n     <family>Arabic Typesetting</family>\n     <pointsize>8</pointsize>\n     <weight>50</weight>\n     <italic>true</italic>\n     <bold>false</bold>\n    </font>\n   </property>\n   <property name=\"title\">\n    <string>DEX信息</string>\n   </property>\n   <widget class=\"QLabel\" name=\"lab_linksize\">\n    <property name=\"geometry\">\n     <rect>\n      <x>210</x>\n      <y>70</y>\n      <width>71</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>连接段大小</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_dex_flag\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>30</y>\n      <width>61</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>DEX 标 识</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_dexheader_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>70</y>\n      <width>61</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>DEX头大小</string>\n    </property>\n   </widget>\n   <widget class=\"QTextBrowser\" name=\"te_endiantag\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>80</x>\n      <y>104</y>\n      <width>111</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_linkoff\">\n    <property name=\"geometry\">\n     <rect>\n      <x>210</x>\n      <y>111</y>\n      <width>71</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>连接段偏移</string>\n    </property>\n   </widget>\n   <widget class=\"QTextBrowser\" name=\"te_linkoff\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>292</x>\n      <y>103</y>\n      <width>111</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_file_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>212</x>\n      <y>32</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>文件大小</string>\n    </property>\n   </widget>\n   <widget class=\"QTextBrowser\" name=\"te_linksize\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>292</x>\n      <y>63</y>\n      <width>111</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextBrowser\" name=\"te_dexheader_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>80</x>\n      <y>63</y>\n      <width>111</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextBrowser\" name=\"te_file_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>292</x>\n      <y>22</y>\n      <width>111</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_endiantag\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>113</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>字节序列</string>\n    </property>\n   </widget>\n   <widget class=\"QTextBrowser\" name=\"te_protect\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>12</x>\n      <y>140</y>\n      <width>391</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"te_dex_flag\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>80</x>\n      <y>22</y>\n      <width>111</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <italic>false</italic>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n  </widget>\n  <widget class=\"QProgressBar\" name=\"progressBar\">\n   <property name=\"enabled\">\n    <bool>true</bool>\n   </property>\n   <property name=\"geometry\">\n    <rect>\n     <x>10</x>\n     <y>217</y>\n     <width>191</width>\n     <height>16</height>\n    </rect>\n   </property>\n   <property name=\"value\">\n    <number>0</number>\n   </property>\n  </widget>\n  <widget class=\"QPushButton\" name=\"extend_info\">\n   <property name=\"geometry\">\n    <rect>\n     <x>275</x>\n     <y>214</y>\n     <width>71</width>\n     <height>20</height>\n    </rect>\n   </property>\n   <property name=\"text\">\n    <string>扩展信息</string>\n   </property>\n  </widget>\n  <widget class=\"QPushButton\" name=\"about_info\">\n   <property name=\"geometry\">\n    <rect>\n     <x>350</x>\n     <y>214</y>\n     <width>71</width>\n     <height>20</height>\n    </rect>\n   </property>\n   <property name=\"text\">\n    <string>About</string>\n   </property>\n  </widget>\n  <widget class=\"QPushButton\" name=\"apk_info\">\n   <property name=\"geometry\">\n    <rect>\n     <x>200</x>\n     <y>214</y>\n     <width>71</width>\n     <height>20</height>\n    </rect>\n   </property>\n   <property name=\"text\">\n    <string>ApkInfo</string>\n   </property>\n  </widget>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "GUI/apkinfo_ui.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ApkInfo</class>\n <widget class=\"QWidget\" name=\"ApkInfo\">\n  <property name=\"windowModality\">\n   <enum>Qt::WindowModal</enum>\n  </property>\n  <property name=\"enabled\">\n   <bool>true</bool>\n  </property>\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>621</width>\n    <height>340</height>\n   </rect>\n  </property>\n  <property name=\"minimumSize\">\n   <size>\n    <width>621</width>\n    <height>340</height>\n   </size>\n  </property>\n  <property name=\"maximumSize\">\n   <size>\n    <width>621</width>\n    <height>340</height>\n   </size>\n  </property>\n  <property name=\"windowTitle\">\n   <string>ApkInformation</string>\n  </property>\n  <property name=\"windowIcon\">\n   <iconset>\n    <normaloff>C:/Users/Andy/Desktop/20150117051304968_easyicon_net_512.png</normaloff>C:/Users/Andy/Desktop/20150117051304968_easyicon_net_512.png</iconset>\n  </property>\n  <widget class=\"QGroupBox\" name=\"groupBox\">\n   <property name=\"geometry\">\n    <rect>\n     <x>10</x>\n     <y>10</y>\n     <width>601</width>\n     <height>321</height>\n    </rect>\n   </property>\n   <property name=\"font\">\n    <font>\n     <family>Aharoni</family>\n     <pointsize>9</pointsize>\n     <weight>75</weight>\n     <italic>false</italic>\n     <bold>true</bold>\n    </font>\n   </property>\n   <property name=\"title\">\n    <string>文件信息</string>\n   </property>\n   <widget class=\"QLabel\" name=\"file_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>27</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>文件大小</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"package_name\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>63</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>文件包名</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"version\">\n    <property name=\"geometry\">\n     <rect>\n      <x>312</x>\n      <y>28</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>版   本</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"version_num\">\n    <property name=\"geometry\">\n     <rect>\n      <x>311</x>\n      <y>64</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>版本号</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"version_need\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>101</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>系统要求</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"serial_num\">\n    <property name=\"geometry\">\n     <rect>\n      <x>312</x>\n      <y>100</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>序列号</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"publisher\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>228</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>发 行 者</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"issuer\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>280</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>10</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>签 发 人</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"apkmd5\">\n    <property name=\"geometry\">\n     <rect>\n      <x>11</x>\n      <y>143</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <pointsize>9</pointsize>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>APKMD5</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"dexmd5\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>181</y>\n      <width>54</width>\n      <height>12</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial</family>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>DEXMD5</string>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_file\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>70</x>\n      <y>18</y>\n      <width>231</width>\n      <height>28</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Box</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_package\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>70</x>\n      <y>54</y>\n      <width>231</width>\n      <height>28</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_version_need\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>70</x>\n      <y>91</y>\n      <width>231</width>\n      <height>28</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_version\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>360</x>\n      <y>19</y>\n      <width>231</width>\n      <height>28</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Box</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_version_num\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>360</x>\n      <y>55</y>\n      <width>231</width>\n      <height>28</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_serial_num\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>360</x>\n      <y>92</y>\n      <width>231</width>\n      <height>28</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_apkmd5\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>70</x>\n      <y>132</y>\n      <width>521</width>\n      <height>28</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_dexmd5\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>70</x>\n      <y>170</y>\n      <width>521</width>\n      <height>28</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_publisher\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>70</x>\n      <y>207</y>\n      <width>521</width>\n      <height>48</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"edt_issuer\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>70</x>\n      <y>263</y>\n      <width>521</width>\n      <height>48</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <family>Arial Narrow</family>\n      <pointsize>10</pointsize>\n     </font>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n  </widget>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "GUI/dexinfor_ui.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>DexInfo</class>\n <widget class=\"QWidget\" name=\"DexInfo\">\n  <property name=\"windowModality\">\n   <enum>Qt::WindowModal</enum>\n  </property>\n  <property name=\"enabled\">\n   <bool>true</bool>\n  </property>\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>581</width>\n    <height>422</height>\n   </rect>\n  </property>\n  <property name=\"minimumSize\">\n   <size>\n    <width>581</width>\n    <height>422</height>\n   </size>\n  </property>\n  <property name=\"maximumSize\">\n   <size>\n    <width>581</width>\n    <height>422</height>\n   </size>\n  </property>\n  <property name=\"windowTitle\">\n   <string>DexInformation</string>\n  </property>\n  <property name=\"windowIcon\">\n   <iconset>\n    <normaloff>C:/Users/Andy/Desktop/201.png</normaloff>C:/Users/Andy/Desktop/201.png</iconset>\n  </property>\n  <widget class=\"QGroupBox\" name=\"groupBox\">\n   <property name=\"geometry\">\n    <rect>\n     <x>10</x>\n     <y>10</y>\n     <width>561</width>\n     <height>401</height>\n    </rect>\n   </property>\n   <property name=\"font\">\n    <font>\n     <pointsize>9</pointsize>\n     <weight>50</weight>\n     <italic>false</italic>\n     <bold>false</bold>\n    </font>\n   </property>\n   <property name=\"title\">\n    <string>DexInfo</string>\n   </property>\n   <widget class=\"QLabel\" name=\"lab_magic\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>20</y>\n      <width>81</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>Magic标识</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_checksum\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>50</y>\n      <width>81</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>校验码</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_dex_file_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>82</y>\n      <width>81</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>DEX文件大小</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_header_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>112</y>\n      <width>91</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>文件头长度</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"lab_endian_tag\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>144</y>\n      <width>71</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>字节序标记</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_link_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>176</y>\n      <width>71</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>链接段大小</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_link_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>208</y>\n      <width>81</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>链接段基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_map_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>238</y>\n      <width>91</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>Map数据基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_string_ids_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>269</y>\n      <width>131</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>字符串列表的字符串数</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_string_ids_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>301</y>\n      <width>121</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>字符串列表表基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_field_ids_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>114</y>\n      <width>111</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>字段列表里字段数</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_proto_ids_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>51</y>\n      <width>111</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>原型列表里原型数</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_method_ids_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>177</y>\n      <width>111</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>方法列表里方法数</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_field_ids_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>145</y>\n      <width>101</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>字段列表基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_method_ids_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>207</y>\n      <width>91</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>方法列表基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_data_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>302</y>\n      <width>81</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>数据段的大小</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_proto_ids_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>83</y>\n      <width>101</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>原型列表基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_type_ids_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>20</y>\n      <width>91</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>类型列表基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_class_defs_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>238</y>\n      <width>121</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>类定义类表中类的数</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_class_defs_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>271</y>\n      <width>91</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>类定义列表基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_type_ids_size\">\n    <property name=\"geometry\">\n     <rect>\n      <x>6</x>\n      <y>333</y>\n      <width>111</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>类型列表中类型数</string>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_data_off\">\n    <property name=\"geometry\">\n     <rect>\n      <x>287</x>\n      <y>334</y>\n      <width>81</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>数据段基地址</string>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_magic\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>14</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_checksum\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>45</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_file_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>76</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_header_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>107</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_endian_tag\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>138</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_link_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>170</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_link_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>201</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_map_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>232</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_string_ids_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>264</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_string_ids_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>296</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_type_ids_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>138</x>\n      <y>327</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_class_defs_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>265</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_proto_ids_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>77</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_method_ids_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>202</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_field_ids_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>139</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_proto_ids_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>46</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_field_ids_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>108</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_type_ids_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>15</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_data_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>297</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_class_defs_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>233</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_method_ids_size\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>171</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_data_off\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>408</x>\n      <y>328</y>\n      <width>141</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n   <widget class=\"QLabel\" name=\"label_sha\">\n    <property name=\"geometry\">\n     <rect>\n      <x>10</x>\n      <y>366</y>\n      <width>71</width>\n      <height>16</height>\n     </rect>\n    </property>\n    <property name=\"font\">\n     <font>\n      <weight>75</weight>\n      <bold>true</bold>\n     </font>\n    </property>\n    <property name=\"text\">\n     <string>SHA-1签名</string>\n    </property>\n   </widget>\n   <widget class=\"QTextEdit\" name=\"text_sha\">\n    <property name=\"enabled\">\n     <bool>false</bool>\n    </property>\n    <property name=\"geometry\">\n     <rect>\n      <x>80</x>\n      <y>360</y>\n      <width>471</width>\n      <height>27</height>\n     </rect>\n    </property>\n    <property name=\"frameShape\">\n     <enum>QFrame::Panel</enum>\n    </property>\n   </widget>\n  </widget>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n(This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.)\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    aswan\n    Copyright (C) 2019 sec\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301\n    USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random\n  Hacker.\n\n  {signature of Ty Coon}, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!"
  },
  {
    "path": "README.md",
    "content": "# ApkDetecter - APK/IPA 查壳分析工具\n\nApkDetecter 是一款功能强大的跨平台工具，用于分析 Android (APK) 和 iOS (IPA) 应用程序。它提供了一个图形界面，用于查看应用信息、检查是否加壳，并对敏感数据进行深度扫描。\n\n## ✨ 主要功能\n\n### 📱 Android (APK) 分析\n- **基本信息**：应用名称、包名、版本号/版本名、最小/目标 SDK 版本、是否加固。\n- **组件列表**：列出 Activity、Service、Receiver 和 Provider。\n- **权限分析**：详细列出应用申请的所有权限。\n- **安全检查**：检测应用签名状态、是否可调试 (Debuggable) 等。\n\n<img src=\"Resources/images/basic_info.png\" width=\"820\" alt=\"APK界面\" />\n\n### 🍎 iOS (IPA) 分析\n- **基本信息**：应用名称、Bundle ID、版本号、最低系统要求、支持的平台。\n- **安全检查**：\n  - **壳检测 (Cryptid)**：检测二进制文件是否经过加密（AppStore 正版）或已脱壳（破解版/调试版）。\n  - **描述文件 (Provisioning Profile)**：解析嵌入的 mobileprovision 文件（Team ID、UUID、过期时间、权限 entitlement 等）。\n- **URL Schemes**：提取已注册的 URL Schemes。\n\n<img src=\"Resources/images/basic_info2.png\" width=\"820\" alt=\"IPA界面\" />\n\n### 🔍 深度扫描 (Deep Scan)\n对应用程序的二进制代码（Android 的 DEX，iOS 的 Mach-O）进行全面扫描，挖掘潜在风险：\n- **URL & IP**：提取硬编码的 URL 链接和 IP 地址。\n- **敏感字符串**：检测密钥（AWS, Google 等）、密码以及可疑关键词（如 root, su, vpn 等）。\n- **反调试检测**：识别反调试技术（例如 `ptrace`, `sysctl`, `isDebuggerConnected`）。\n- **加密库使用**：检测加密库和 API 的调用情况（例如 `AES`, `RSA`, `CommonCrypto`）。\n\n<img src=\"Resources/images/deepscan.png\" width=\"820\" alt=\"深度分析界面\" />\n\n### 🛠 其他特性\n- **现代化 GUI**：基于 PyQt5 构建的暗色主题界面，简洁美观。\n- **拖拽支持**：只需将 APK 或 IPA 文件拖入窗口即可开始分析。\n- **报告导出**：支持将基本分析数据导出为 JSON 格式。\n- **深度扫描导出**：支持将深度扫描结果导出为包含分类文本报告的 ZIP 压缩包。\n\n## 🚀 安装指南\n\n### 环境要求\n- Python 3.8 或更高版本\n- pip (Python 包管理器)\n\n### 安装步骤\n1. 克隆项目仓库：\n   ```bash\n   git clone https://github.com/yourusername/ApkDetecter.git\n   cd ApkDetecter\n   ```\n\n2. 安装依赖库：\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n   *注意：核心功能依赖于 `androguard` 和 `asn1crypto` 等库。*\n\n## 💻 使用说明\n\n1. **启动程序**：\n   ```bash\n   python ApkDetecter.py\n   ```\n\n2. **加载应用**：\n   - **拖拽**：直接将 `.apk` 或 `.ipa` 文件拖放到主窗口中。\n   - **菜单**：点击菜单栏的 `File -> Open` 选择文件。\n\n3. **查看基本信息**：\n   - 加载完成后，主界面会立即显示应用图标、版本信息和安全状态概览。\n\n4. **执行深度扫描**：\n   - 点击工具栏上的 **Deep Scan** 按钮（芯片图标）。\n   - 等待扫描完成（界面会有进度条覆盖层提示）。\n   - 扫描结束后，会在弹出的对话框中分类展示结果（URLs, IPs, Strings, Anti-Debug, Crypto）。\n\n5. **导出结果**：\n   - **基本报告**：点击工具栏的 **Export** 按钮，将应用元数据保存为 JSON 文件。\n   - **深度扫描报告**：在 Deep Scan 结果对话框中，点击左下角的 **Export Results** 按钮，将所有扫描结果打包导出为 ZIP 文件。\n\n## 📦 构建指南\n\n### 前置要求\n- 安装 Python 3.8+\n- 安装 `pip`\n\n### macOS 构建\n1. 在项目目录中打开终端。\n2. 安装依赖：\n   ```bash\n   pip install -r requirements.txt\n   pip install pyinstaller\n   ```\n3. 运行构建命令：\n   ```bash\n    build_mac.sh\n   ```\n4. 应用程序 `ApkDetecter.app` 将位于 `dist` 文件夹中。\n\n### Windows 构建\n1. 在项目目录中打开命令提示符 (Command Prompt) 或 PowerShell。\n2. 安装依赖：\n   ```bash\n   pip install -r requirements.txt\n   pip install pyinstaller\n   ```\n3. 运行构建脚本：\n   ```cmd\n   build_windows.bat\n   ```\n\n4. 可执行文件 `ApkDetecter.exe` 将位于 `dist\\ApkDetecter` 文件夹中。\n\n## 📂 项目结构\n\n- `Core/`: 核心分析逻辑 (`ApkAnalyzer.py`, `IpaAnalyzer.py`, `DeepScanner.py`)。\n- `GUI/`: 用户界面组件 (`MainForm.py`, `AppInfoWidget.py`)。\n- `Resources/`: 图标和资源文件。\n- `libs/`: 包含的第三方依赖库（androguard）。\n\n"
  },
  {
    "path": "Resources/signatures.json",
    "content": "{\n  \"signatures\": [\n    {\n      \"name\": \"360加固 (Qihoo 360)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libjiagu.so\" },\n        { \"type\": \"file\", \"pattern\": \"libprotectClass.so\" },\n        { \"type\": \"file\", \"pattern\": \".appkey\", \"match\": \"endswith\" }\n      ]\n    },\n    {\n      \"name\": \"腾讯御安全 (Tencent Legu)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libshell.so\" },\n        { \"type\": \"file\", \"pattern\": \"libtup.so\" },\n        { \"type\": \"file\", \"pattern\": \"mix.dex\" },\n        { \"type\": \"file\", \"pattern\": \"libshella-\", \"match\": \"startswith\" }\n      ]\n    },\n    {\n      \"name\": \"梆梆加固 (Bangcle)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libsecexe.so\" },\n        { \"type\": \"file\", \"pattern\": \"libsecmain.so\" },\n        { \"type\": \"file\", \"pattern\": \"libSecShell.so\" },\n        { \"type\": \"file\", \"pattern\": \"libDexHelper.so\" },\n        { \"type\": \"file\", \"pattern\": \"libbangcle.so\" }\n      ]\n    },\n    {\n      \"name\": \"爱加密 (Ijiami)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libexec.so\" },\n        { \"type\": \"file\", \"pattern\": \"ijiami.dat\" },\n        { \"type\": \"file\", \"pattern\": \"libexecmain.so\" },\n        { \"type\": \"file\", \"pattern\": \"ijiami.ajm\" }\n      ]\n    },\n    {\n      \"name\": \"阿里加固 (Alibaba)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libmobisec.so\" },\n        { \"type\": \"file\", \"pattern\": \"libaliupdates.so\" },\n        { \"type\": \"file\", \"pattern\": \"aliprotect.dat\" },\n        { \"type\": \"file\", \"pattern\": \"libsgmain.so\" },\n        { \"type\": \"file\", \"pattern\": \"libsgsecuritybody.so\" }\n      ]\n    },\n    {\n      \"name\": \"百度加固 (Baidu)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libbaiduprotect.so\" },\n        { \"type\": \"file\", \"pattern\": \"baiduprotect.jar\" }\n      ]\n    },\n    {\n      \"name\": \"娜迦加固 (Naga)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libddog.so\" },\n        { \"type\": \"file\", \"pattern\": \"libchaosvmp.so\" },\n        { \"type\": \"file\", \"pattern\": \"libfdog.so\" }\n      ]\n    },\n    {\n      \"name\": \"网秦加固 (NetQin)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libnqshield.so\" }\n      ]\n    },\n    {\n      \"name\": \"通付盾加固 (PayEgis)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libNSaferOnly.so\" },\n        { \"type\": \"file\", \"pattern\": \"libegis.so\" }\n      ]\n    },\n    {\n      \"name\": \"几维安全 (Kiwi)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libkcodemon.so\" },\n        { \"type\": \"file\", \"pattern\": \"libkwscmm.so\" },\n        { \"type\": \"file\", \"pattern\": \"libkwscr.so\" }\n      ]\n    },\n    {\n      \"name\": \"顶象加固 (DingXiang)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libdx-risk.so\" },\n        { \"type\": \"file\", \"pattern\": \"libx3g.so\" }\n      ]\n    },\n    {\n      \"name\": \"网易易盾 (NetEase)\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libnesec.so\" }\n      ]\n    },\n    {\n      \"name\": \"APKProtect\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libAPKProtect.so\" },\n        { \"type\": \"combined\", \"conditions\": [\n            { \"type\": \"file\", \"pattern\": \"key.dat\" },\n            { \"type\": \"path\", \"pattern\": \"apkprotect.com\", \"match\": \"contains\" }\n          ]\n        }\n      ]\n    },\n    {\n      \"name\": \"U8SDK\",\n      \"rules\": [\n        { \"type\": \"file\", \"pattern\": \"libu8.so\" }\n      ]\n    },\n    {\n        \"name\": \"Medusah (Pangu)\",\n        \"rules\": [\n            { \"type\": \"file\", \"pattern\": \"libmd.so\" }\n        ]\n    }\n  ]\n}"
  },
  {
    "path": "__init__.py",
    "content": "__author__ = 'Andy'\n"
  },
  {
    "path": "build_mac.sh",
    "content": "#!/bin/bash\n\necho \"Detected macOS system build request.\"\nSPEC_FILE=\"ApkDetecter.spec\"\n\nif [ ! -f \"$SPEC_FILE\" ]; then\n    echo \"Error: $SPEC_FILE not found.\"\n    exit 1\nfi\n\necho \"Starting build with $SPEC_FILE...\"\n\n# Clean previous build/dist\nif [ -d \"build\" ]; then\n    echo \"Cleaning build directory...\"\n    rm -rf build\nfi\n\nif [ -d \"dist\" ]; then\n    echo \"Cleaning dist directory...\"\n    rm -rf dist\nfi\n\n# Run PyInstaller\necho \"Running PyInstaller...\"\npyinstaller \"$SPEC_FILE\" --clean --noconfirm\n\nif [ $? -eq 0 ]; then\n    echo \"\"\n    echo \"Build successful!\"\n    echo \"App bundle is in dist/ApkDetecter.app\"\nelse\n    echo \"\"\n    echo \"Build failed.\"\n    exit 1\nfi\n"
  },
  {
    "path": "build_windows.bat",
    "content": "@echo off\necho Building ApkDetecter for Windows...\npip install -r requirements.txt\npip install pyinstaller Pillow\n\necho Cleaning up previous builds...\nif exist build rmdir /s /q build\nif exist dist rmdir /s /q dist\n\necho Running PyInstaller...\npyinstaller --noconsole --onefile --clean --name \"ApkDetecter\" --icon \"Resources/logo.png\" --add-data \"Resources;Resources\" --add-data \"libs/androguard/core/resources/public.xml;androguard/core/resources\" --add-data \"libs/androguard/core/api_specific_resources;androguard/core/api_specific_resources\" --paths \".\" --paths \"libs\" --hidden-import GUI --hidden-import GUI.MainForm --hidden-import GUI.AppInfoWidget --hidden-import Core --hidden-import Core.ApkAnalyzer --hidden-import Core.DeepScanner --hidden-import Core.IpaAnalyzer ApkDetecter.py\n\necho Build complete!\necho The executable is located in dist\\ApkDetecter.exe\npause\n"
  },
  {
    "path": "core/ApkAnalyzer.py",
    "content": "\nimport os\nimport hashlib\nimport sys\nimport zipfile\nimport re\nimport logging\nfrom datetime import datetime\n\n# Import existing helpers\ntry:\n    from CheckProtect import CheckProtect\nexcept ImportError:\n    current_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n    if current_dir not in sys.path:\n        sys.path.insert(0, current_dir)\n    from CheckProtect import CheckProtect\n\nfrom androguard.core.apk import APK\n\n# Try to import loguru to check if it's available in the environment\ntry:\n    from loguru import logger as loguru_logger\n    HAS_LOGURU = True\nexcept ImportError:\n    HAS_LOGURU = False\n\nclass ApkAnalyzer:\n    def __init__(self, file_path):\n        self.file_path = file_path\n        self.apk = None\n        self.info = {}\n        self.cert_info = {}\n        self.protect_info = \"\"\n        self.icon_data = None\n        self.error = None\n        self.progress_callback = None\n        self.loguru_sink_id = None\n        \n        # Capture Androguard logs\n        self.log_buffer = []\n        self._setup_logging()\n\n    def _setup_logging(self):\n        # 1. Setup Standard Logging Hook\n        class CallbackHandler(logging.Handler):\n            def __init__(self, callback):\n                super().__init__()\n                self.callback = callback\n                self.setFormatter(logging.Formatter('%(asctime)s | %(levelname)-8s | %(name)s:%(funcName)s:%(lineno)s - %(message)s'))\n\n            def emit(self, record):\n                msg = self.format(record)\n                if self.callback:\n                    self.callback(msg)\n\n        self.log_handler = CallbackHandler(self._log_callback)\n        \n        # Hook into multiple potential loggers\n        loggers_to_hook = ['androguard', 'androguard.core.axml', 'androguard.core.apk']\n        for name in loggers_to_hook:\n            logger = logging.getLogger(name)\n            logger.setLevel(logging.DEBUG)\n            logger.addHandler(self.log_handler)\n\n        # 2. Setup Loguru Hook (if available)\n        # Many newer Androguard versions use loguru exclusively\n        if HAS_LOGURU:\n            # We add a sink that calls our callback\n            # format matches the user's example style\n            self.loguru_sink_id = loguru_logger.add(\n                self._loguru_callback, \n                level=\"DEBUG\", \n                format=\"{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} - {message}\"\n            )\n\n    def _log_callback(self, msg):\n        # Heuristic: Increment progress for every log message during parsing phase\n        if hasattr(self, '_parsing_progress_min') and hasattr(self, '_parsing_progress_max'):\n            self._parsing_log_count += 1\n            # Logarithmic-ish scale to prevent hitting max too early\n            # Assume ~50 log messages for a typical APK parse\n            increment = min(self._parsing_log_count * 0.5, (self._parsing_progress_max - self._parsing_progress_min))\n            current = int(self._parsing_progress_min + increment)\n            if current > self._parsing_progress_max:\n                current = self._parsing_progress_max\n            \n            if self.progress_callback:\n                self.progress_callback(current, msg)\n        else:\n            if self.progress_callback:\n                self.progress_callback(-1, msg)\n\n    def _loguru_callback(self, msg):\n        # loguru 'msg' is a string already formatted\n        if self.progress_callback:\n            # Reuse logic\n            self._log_callback(msg.strip())\n\n    def set_progress_callback(self, callback):\n        self.progress_callback = callback\n\n    def _update_progress(self, value, message=\"\"):\n        if self.progress_callback:\n            self.progress_callback(value, message)\n\n    def _calculate_md5_chunked(self, path):\n        hash_md5 = hashlib.md5()\n        file_size = os.path.getsize(path)\n        read_size = 0\n        chunk_size = 8192  # 8KB chunks\n        \n        with open(path, \"rb\") as f:\n            while True:\n                chunk = f.read(chunk_size)\n                if not chunk:\n                    break\n                hash_md5.update(chunk)\n                read_size += len(chunk)\n                \n                # Progress 0-10%\n                percent = int((read_size / file_size) * 10)\n                self._update_progress(percent, f\"Calculating MD5... ({int((read_size/file_size)*100)}%)\")\n        \n        return hash_md5.hexdigest().upper()\n\n    def analyze(self):\n        if not os.path.exists(self.file_path):\n            self.error = \"File not found\"\n            return False\n\n        try:\n            self._update_progress(0, \"Calculating MD5...\")\n            # File Stats\n            stat = os.stat(self.file_path)\n            self.info['file_size'] = stat.st_size\n            \n            # Chunked MD5\n            self.info['md5'] = self._calculate_md5_chunked(self.file_path)\n\n            self._update_progress(15, \"Parsing APK Manifest (This may take a while)...\")\n            \n            # Define a helper to simulate progress during the blocking APK() call via log hooks\n            # We map log events to progress range 15% -> 40%\n            self._parsing_progress_min = 15\n            self._parsing_progress_max = 40\n            self._parsing_log_count = 0\n            \n            # Androguard Analysis (APK only, no DEX)\n            self.apk = APK(self.file_path)\n            \n            # Basic Info\n            self.info['package_name'] = self.apk.get_package()\n            self.info['app_name'] = self.apk.get_app_name()\n            self.info['version_name'] = self.apk.get_androidversion_name()\n            self.info['version_code'] = self.apk.get_androidversion_code()\n            self.info['min_sdk'] = self.apk.get_min_sdk_version()\n            self.info['target_sdk'] = self.apk.get_target_sdk_version()\n            \n            self._update_progress(45, \"Extracting Icon...\")\n            # Icon Extraction Strategy\n            # 1. Try get_app_icon()\n            # 2. If it returns None or XML, try to search for high-res PNGs in standard locations\n            \n            try:\n                icon_path = self.apk.get_app_icon()\n                logging.getLogger('androguard').info(f\"Original icon path: {icon_path}\")\n                if HAS_LOGURU: loguru_logger.info(f\"Original icon path: {icon_path}\")\n                \n                # Check if icon is XML (Adaptive Icon) or None\n                is_valid_icon = False\n                if icon_path and not icon_path.endswith('.xml'):\n                    try:\n                        self.icon_data = self.apk.get_file(icon_path)\n                        is_valid_icon = True\n                    except:\n                        pass\n                \n                if not is_valid_icon:\n                    msg = \"Attempting fallback icon search...\"\n                    logging.getLogger('androguard').info(msg)\n                    if HAS_LOGURU: loguru_logger.info(msg)\n                    \n                    # Fallback Strategy: Search for PNG icons\n                    files = self.apk.get_files()\n                    \n                    # Priority list for densities\n                    densities = ['xxxhdpi', 'xxhdpi', 'xhdpi', 'hdpi', 'mdpi']\n                    \n                    # Keywords to look for\n                    icon_keywords = ['ic_launcher', 'icon', 'ic_app', 'launcher']\n                    if icon_path:\n                        # Try to use the basename of the reported icon path (even if xml)\n                        # e.g. res/mipmap-anydpi-v26/ic_launcher.xml -> ic_launcher\n                        basename = os.path.splitext(os.path.basename(icon_path))[0]\n                        icon_keywords.insert(0, basename)\n                        # Sometimes xml is ic_launcher_round, but png is ic_launcher\n                        if '_round' in basename:\n                            icon_keywords.insert(1, basename.replace('_round', ''))\n                    \n                    best_icon = None\n                    \n                    # Strategy A: Strict density + keyword match\n                    for density in densities:\n                        for keyword in icon_keywords:\n                            pattern = re.compile(f\".*res/.*{density}.*/.*{keyword}.*\\.png$\", re.IGNORECASE)\n                            for f in files:\n                                if pattern.match(f):\n                                    best_icon = f\n                                    break\n                            if best_icon: break\n                        if best_icon: break\n                    \n                    # Strategy B: Loose match in res/ (any density, strict keyword)\n                    if not best_icon:\n                        for keyword in icon_keywords:\n                            for f in files:\n                                if f.endswith(f\"/{keyword}.png\"):\n                                    best_icon = f\n                                    break\n                            if best_icon: break\n\n                    # Strategy C: Desperation - ANY png with 'launcher' or 'icon' in name\n                    if not best_icon:\n                        for f in files:\n                            if f.endswith('.png') and ('launcher' in f or 'icon' in f) and 'notification' not in f:\n                                best_icon = f\n                                break\n\n                    # Strategy D: The \"Big Gun\" - Find the largest PNGs in the APK (heuristic)\n                    if not best_icon:\n                        msg = \"Strategy D: Searching by file size...\"\n                        logging.getLogger('androguard').info(msg)\n                        if HAS_LOGURU: loguru_logger.info(msg)\n                        \n                        png_files = []\n                        with zipfile.ZipFile(self.file_path, 'r') as z:\n                            for info in z.infolist():\n                                if info.filename.endswith('.png') and not info.filename.endswith('.9.png'):\n                                    if 'assets/' not in info.filename:\n                                        png_files.append(info)\n                        \n                        # Sort by size descending\n                        png_files.sort(key=lambda x: x.file_size, reverse=True)\n                        \n                        if png_files:\n                            best_icon = png_files[0].filename\n                            msg = f\"Strategy D picked largest PNG: {best_icon} ({png_files[0].file_size} bytes)\"\n                            logging.getLogger('androguard').info(msg)\n                            if HAS_LOGURU: loguru_logger.info(msg)\n\n                    if best_icon:\n                        msg = f\"Fallback icon found: {best_icon}\"\n                        logging.getLogger('androguard').info(msg)\n                        if HAS_LOGURU: loguru_logger.info(msg)\n                        self.icon_data = self.apk.get_file(best_icon)\n                    else:\n                        msg = \"No fallback icon found.\"\n                        logging.getLogger('androguard').warning(msg)\n                        if HAS_LOGURU: loguru_logger.warning(msg)\n                    \n            except Exception as e:\n                msg = f\"Error getting icon: {e}\"\n                logging.getLogger('androguard').error(msg)\n                if HAS_LOGURU: loguru_logger.error(msg)\n\n            self._update_progress(60, \"Analyzing Certificate...\")\n            # Cert Info (Fast Way)\n            try:\n                certs = self.apk.get_certificates()\n                if certs:\n                    cert = certs[0]\n                    self.cert_info = {\n                        'serial': hex(cert.serial_number)[2:].upper(),\n                        'issuer': cert.issuer.human_friendly,\n                        'subject': cert.subject.human_friendly,\n                        'sha1': cert.sha1_fingerprint.replace(\" \", \":\"),\n                        'sha256': cert.sha256_fingerprint.replace(\" \", \":\")\n                    }\n            except Exception as e:\n                msg = f\"Error getting cert info: {e}\"\n                logging.getLogger('androguard').error(msg)\n                if HAS_LOGURU: loguru_logger.error(msg)\n\n            self._update_progress(80, \"Checking Protection...\")\n            # Protection\n            try:\n                cp = CheckProtect(self.apk)\n                self.protect_info = cp.check_protectflag()\n            except Exception as e:\n                self.protect_info = f\"Check failed: {e}\"\n\n            # Components\n            self.info['activities'] = self.apk.get_activities()\n            self.info['services'] = self.apk.get_services()\n            self.info['receivers'] = self.apk.get_receivers()\n            self.info['providers'] = self.apk.get_providers()\n            self.info['permissions'] = self.apk.get_permissions()\n\n            self._update_progress(100, \"Done\")\n\n        except Exception as e:\n            self.error = f\"Analysis failed: {str(e)}\"\n            import traceback\n            traceback.print_exc()\n            return False\n        finally:\n             # Clean up standard logger\n             loggers_to_hook = ['androguard', 'androguard.core.axml', 'androguard.core.apk']\n             for name in loggers_to_hook:\n                 if hasattr(self, 'log_handler'):\n                     logging.getLogger(name).removeHandler(self.log_handler)\n             \n             # Clean up loguru\n             if HAS_LOGURU and self.loguru_sink_id is not None:\n                 try:\n                     loguru_logger.remove(self.loguru_sink_id)\n                 except: pass\n        \n        return True\n\n    def get_basic_info(self):\n        return {\n            'name': self.info.get('app_name'),\n            'package': self.info.get('package_name'),\n            'version': f\"{self.info.get('version_name')} ({self.info.get('version_code')})\",\n            'min_sdk': self.info.get('min_sdk'),\n            'target_sdk': self.info.get('target_sdk'),\n            'size': self._format_size(self.info.get('file_size', 0)),\n            'md5': self.info.get('md5'),\n            'protect': self.protect_info\n        }\n\n    def _format_size(self, size):\n        for unit in ['B', 'KB', 'MB', 'GB']:\n            if size < 1024:\n                return f\"{size:.2f} {unit}\"\n            size /= 1024\n        return f\"{size:.2f} TB\"\n"
  },
  {
    "path": "core/DeepScanner.py",
    "content": "# -*- coding: utf-8 -*-\nimport re\nimport logging\nimport zipfile\nimport string\n\ntry:\n    from androguard.core.dex import DEX\nexcept ImportError:\n    DEX = None\n\nclass DeepScanner:\n    def __init__(self, apk_obj=None, ipa_path=None, binary_path_in_zip=None):\n        self.apk = apk_obj\n        self.ipa_path = ipa_path\n        self.binary_path_in_zip = binary_path_in_zip\n        self.is_ipa = (ipa_path is not None)\n        \n        self.results = {\n            \"urls\": [],\n            \"ips\": [],\n            \"sensitive_strings\": [],\n            \"anti_debug\": [],\n            \"crypto\": []\n        }\n        \n        # Regex Patterns\n        self.patterns = {\n            \"url\": re.compile(r'https?://(?:[-\\w.]|(?:%[\\da-fA-F]{2}))+'),\n            \"ip\": re.compile(r'\\b(?:\\d{1,3}\\.){3}\\d{1,3}\\b'),\n            \"ak_sk\": re.compile(r'(?i)(access_key|secret_key|api_key|app_secret|app_id).*?[\"\\']([a-zA-Z0-9]{16,})[\"\\']'),\n        }\n\n        # Keywords for string search\n        self.suspicious_keywords = [\n            \"root\", \"su\", \"superuser\", \"magisk\", \"xposed\", \"frida\", \n            \"substrate\", \"hook\", \"proxy\", \"vpn\", \"emulator\", \"jailbreak\", \"cydia\"\n        ]\n        \n        # Android Patterns\n        self.android_anti_debug = [\n            \"android/os/Debug;->isDebuggerConnected\",\n            \"android/os/Debug;->waitForDebugger\",\n            \"java/lang/System;->exit\",\n            \"ptrace\"\n        ]\n        \n        self.android_crypto = [\n            \"javax/crypto/Cipher\",\n            \"javax/crypto/spec/SecretKeySpec\",\n            \"java/security/MessageDigest\"\n        ]\n\n        # iOS Patterns\n        self.ios_anti_debug = [\n            \"ptrace\",\n            \"sysctl\",\n            \"getppid\", \n            \"isatty\",\n            \"ioctl\",\n            \"svc 0x80\", # SVC call\n            \"task_for_pid\"\n        ]\n\n        self.ios_crypto = [\n            \"CCCrypt\", \n            \"CCSha256\", \n            \"CCSha1\",\n            \"CCMd5\",\n            \"SecItemAdd\",\n            \"SecItemCopyMatching\", \n            \"SecKeyEncrypt\",\n            \"SecKeyDecrypt\"\n        ]\n\n    def scan(self, progress_callback=None):\n        if self.is_ipa:\n            return self._scan_ipa(progress_callback)\n        else:\n            return self._scan_apk(progress_callback)\n\n    def _scan_apk(self, progress_callback):\n        if not self.apk:\n            return self.results\n            \n        dex_files = []\n        try:\n            # Get all DEX files\n            for f in self.apk.get_files():\n                if f.endswith('.dex'):\n                    dex_files.append(f)\n        except:\n            pass\n\n        total_dex = len(dex_files)\n        if total_dex == 0:\n            return self.results\n\n        for idx, dex_path in enumerate(dex_files):\n            if progress_callback:\n                progress_callback(int((idx / total_dex) * 100), f\"Scanning {dex_path}...\")\n\n            try:\n                dex_data = self.apk.get_file(dex_path)\n                if DEX:\n                    d = DEX(dex_data)\n                    # 1. String Analysis\n                    for s in d.get_strings():\n                         self._analyze_string(s)\n                            \n                    # 2. Method/API Analysis\n                    all_strings = set(d.get_strings())\n                    self._analyze_apis(all_strings)\n                else:\n                    # Fallback if androguard dex not available\n                    strings = self._extract_strings(dex_data)\n                    for s in strings:\n                        self._analyze_string(s)\n\n            except Exception as e:\n                logging.error(f\"Error scanning {dex_path}: {e}\")\n\n        self._deduplicate()\n        return self.results\n\n    def _scan_ipa(self, progress_callback):\n        if not self.ipa_path:\n            return self.results\n\n        try:\n            with zipfile.ZipFile(self.ipa_path, 'r') as z:\n                # Use passed binary path if available\n                # However, the binary_path might be in a different encoding than what zipfile expects\n                # if the zip file has encoding issues (CP437 vs UTF-8).\n                # We need to robustly find the file in the zip.\n                \n                target_binary_info = None\n                \n                # Helper to normalize names for comparison\n                def normalize(name):\n                    return name.replace('\\\\', '/').rstrip('/')\n\n                # 1. Try to find the passed binary path directly\n                if self.binary_path_in_zip:\n                    try:\n                        target_binary_info = z.getinfo(self.binary_path_in_zip)\n                    except KeyError:\n                        # Failed direct lookup, might be encoding issue or slight path mismatch\n                        pass\n                \n                # 2. If not found, try to search for it using robust encoding check\n                if not target_binary_info:\n                    logging.info(f\"Direct lookup for {self.binary_path_in_zip} failed. Scanning all files in zip...\")\n                    \n                    # Candidate files list for debugging/fallback\n                    candidates = []\n                    \n                    # We look for Payload/*.app/BinaryName\n                    for info in z.infolist():\n                        # Fix encoding for the name in the zip\n                        try:\n                            real_name = info.filename.encode('cp437').decode('utf-8')\n                        except:\n                            try:\n                                real_name = info.filename.encode('cp437').decode('gbk')\n                            except:\n                                real_name = info.filename\n                        \n                        # Store normalized name for logic\n                        norm_real = normalize(real_name)\n                        \n                        # Debug log for potentially matching files\n                        if '.app/' in norm_real and not norm_real.endswith('/'):\n                             candidates.append((norm_real, info))\n\n                        # Check if this looks like our binary\n                        if self.binary_path_in_zip:\n                            # Compare normalized paths\n                            # Also try simple filename match if full path fails (sometimes parent dirs differ slightly)\n                            target_norm = normalize(self.binary_path_in_zip)\n                            target_basename = target_norm.split('/')[-1]\n                            real_basename = norm_real.split('/')[-1]\n\n                            if norm_real == target_norm:\n                                target_binary_info = info\n                                logging.info(f\"Found binary via normalized path match: {real_name}\")\n                                break\n                            elif real_basename == target_basename and '.app/' in norm_real:\n                                # Strong candidate if basename matches and it's inside an app bundle\n                                # But we should be careful not to pick a resource file with same name (unlikely for binary)\n                                # Let's store it as a fallback if exact match fails\n                                if not target_binary_info:\n                                     target_binary_info = info\n                                     logging.info(f\"Found binary via basename match: {real_name}\")\n                        else:\n                            # Fallback guessing logic\n                            # Look for file with same name as .app folder\n                            parts = norm_real.split('/')\n                            for i, part in enumerate(parts):\n                                if part.endswith('.app'):\n                                    app_name = part.replace('.app', '')\n                                    if i + 1 < len(parts) and parts[i+1] == app_name:\n                                         target_binary_info = info\n                                         break\n\n                    # If still not found, try the largest file in the .app folder\n                    if not target_binary_info and candidates:\n                        logging.info(\"Binary not found via name match. Trying largest file in .app bundle...\")\n                        largest_file = None\n                        max_size = 0\n                        for name, info in candidates:\n                            # Ignore obvious non-binary files\n                            if name.lower().endswith(('.png', '.plist', '.nib', '.storyboardc', '.car', '.mobileprovision', '.cer')):\n                                continue\n                            if info.file_size > max_size:\n                                max_size = info.file_size\n                                largest_file = info\n                        \n                        if largest_file:\n                            target_binary_info = largest_file\n                            logging.info(f\"Selected largest file as binary candidate: {largest_file.filename}\")\n\n                if target_binary_info:\n                    if progress_callback:\n                        progress_callback(10, f\"Scanning binary {target_binary_info.filename}...\")\n                    \n                    with z.open(target_binary_info) as f:\n                        data = f.read()\n                        # Extract strings from binary\n                        strings_gen = self._extract_strings(data)\n                        \n                        # Convert generator to list to get length\n                        string_list = list(strings_gen)\n                        total = len(string_list)\n                        \n                        for i, s in enumerate(string_list):\n                            if i % 5000 == 0 and progress_callback and total > 0:\n                                progress_callback(int((i / total) * 90), \"Analyzing strings...\")\n                            self._analyze_string(s)\n                        \n                        # Simple API check via strings presence\n                        self._analyze_apis(set(string_list))\n                            \n                else:\n                    logging.error(f\"Binary {self.binary_path_in_zip} not found in zip (Encoding issue?)\")\n\n        except Exception as e:\n            logging.error(f\"Error scanning IPA: {e}\")\n\n        self._deduplicate()\n        return self.results\n\n    def _extract_strings(self, data, min_length=4):\n        \"\"\"\n        Extract printable strings from binary data\n        \"\"\"\n        result = \"\"\n        for b in data:\n            c = chr(b)\n            if c in string.printable:\n                result += c\n            else:\n                if len(result) >= min_length:\n                    yield result\n                result = \"\"\n        if len(result) >= min_length:\n            yield result\n\n    def _analyze_string(self, s):\n        # Check URL\n        if self.patterns['url'].match(s):\n            self.results['urls'].append(s)\n        # Check IP\n        elif self.patterns['ip'].match(s) and not s.startswith(\"0.\"):\n            self.results['ips'].append(s)\n        \n        # Check Keywords\n        s_lower = s.lower()\n        for kw in self.suspicious_keywords:\n            if kw in s_lower:\n                # Store only the string content, not the keyword prefix\n                # We can append the keyword as metadata if needed, but user requested clean string\n                self.results['sensitive_strings'].append(s)\n                break # Avoid adding same string multiple times if it matches multiple keywords\n\n    def _analyze_apis(self, all_strings):\n        if self.is_ipa:\n            target_anti_debug = self.ios_anti_debug\n            target_crypto = self.ios_crypto\n        else:\n            target_anti_debug = self.android_anti_debug\n            target_crypto = self.android_crypto\n\n        for api in target_anti_debug:\n            # Loose check\n            parts = api.split('->')\n            term = parts[-1] if len(parts) > 1 else api\n            if term in all_strings:\n                 self.results['anti_debug'].append(api)\n        \n        for api in target_crypto:\n             parts = api.split('/')\n             term = parts[-1]\n             if term in all_strings:\n                 self.results['crypto'].append(api)\n\n    def _deduplicate(self):\n        for k in self.results:\n            self.results[k] = list(set(self.results[k]))\n\n"
  },
  {
    "path": "core/IpaAnalyzer.py",
    "content": "\nimport zipfile\nimport plistlib\nimport os\nimport hashlib\nimport sys\nimport struct\nfrom datetime import datetime\n\n# Ensure libs are in path\ncurrent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\nlibs_dir = os.path.join(current_dir, 'libs')\nif libs_dir not in sys.path:\n    sys.path.insert(0, libs_dir)\n\nfrom asn1crypto import cms\n\nclass IpaAnalyzer:\n    def __init__(self, file_path):\n        self.file_path = file_path\n        self.info = {}\n        self.provision = {}\n        self.icon_data = None\n        self.error = None\n        self.progress_callback = None\n        self.is_encrypted = False\n        self.binary_path = None # Store binary path for deep scan\n\n    def set_progress_callback(self, callback):\n        self.progress_callback = callback\n\n    def _update_progress(self, value, message=\"\"):\n        if self.progress_callback:\n            self.progress_callback(value, message)\n\n    def _find_zip_entry(self, z, folder, name):\n        \"\"\"\n        Robustly find a file in the zip, handling encoding mismatches.\n        folder: The folder path in the zip (likely mojibake/cp437)\n        name: The target filename (could be UTF-8 from Info.plist)\n        \"\"\"\n        # 1. Try direct join (Success if name was also derived from zip listing)\n        path = os.path.join(folder, name).replace('\\\\', '/')\n        try:\n            return z.getinfo(path)\n        except KeyError:\n            pass\n\n        # 2. Iterative search in the specific folder\n        # We know 'folder' exists in the zip (it was found via namelist)\n        # We need to find 'name' inside 'folder', but 'name' might need encoding conversion\n        \n        # Normalize folder to ensure it ends with /\n        if not folder.endswith('/'):\n            folder += '/'\n            \n        # List all files in this folder\n        candidates = []\n        for n in z.namelist():\n            if n.startswith(folder):\n                # Get the filename part\n                fname = n[len(folder):]\n                # Skip subdirectories\n                if '/' in fname.rstrip('/'): \n                    continue\n                if not fname: \n                    continue\n                    \n                candidates.append(n)\n        \n        # Try to match 'name' against candidates\n        # Convert 'name' (UTF-8) to potential CP437 mojibake representation?\n        # Or convert candidates (CP437) to UTF-8/GBK and compare with 'name'?\n        \n        for candidate in candidates:\n            fname = candidate[len(folder):]\n            \n            # Try 1: Is it a direct match? (Already checked by getinfo, but logic here covers scanning)\n            if fname == name:\n                return z.getinfo(candidate)\n                \n            # Try 2: Decode candidate from cp437 -> gbk/utf-8 and compare with name\n            try:\n                decoded = fname.encode('cp437').decode('gbk')\n                if decoded == name:\n                    return z.getinfo(candidate)\n            except:\n                pass\n                \n            try:\n                decoded = fname.encode('cp437').decode('utf-8')\n                if decoded == name:\n                    return z.getinfo(candidate)\n            except:\n                pass\n\n        # 3. Last resort: Return the largest file in the folder (heuristics for main binary)\n        best_candidate = None\n        max_size = 0\n        for cand_path in candidates:\n             # Skip known non-binary extensions\n             lower_name = cand_path.lower()\n             if lower_name.endswith(('.png', '.plist', '.nib', '.car', '.mobileprovision', '.xml', '.json', '.wav', '.mp3')):\n                 continue\n             \n             info = z.getinfo(cand_path)\n             if info.file_size > max_size:\n                 max_size = info.file_size\n                 best_candidate = info\n                 \n        return best_candidate\n\n    def _calculate_md5_chunked(self, path):\n        hash_md5 = hashlib.md5()\n        file_size = os.path.getsize(path)\n        read_size = 0\n        chunk_size = 8192  # 8KB chunks\n        \n        with open(path, \"rb\") as f:\n            while True:\n                chunk = f.read(chunk_size)\n                if not chunk:\n                    break\n                hash_md5.update(chunk)\n                read_size += len(chunk)\n                \n                # Progress 0-10%\n                percent = int((read_size / file_size) * 10)\n                self._update_progress(percent, f\"Calculating MD5... ({int((read_size/file_size)*100)}%)\")\n        \n        return hash_md5.hexdigest().upper()\n\n    def analyze(self):\n        if not os.path.exists(self.file_path):\n            self.error = \"File not found\"\n            return False\n\n        try:\n            self._update_progress(0, \"Calculating MD5...\")\n            # File Stats\n            stat = os.stat(self.file_path)\n            self.info['file_size'] = stat.st_size\n            \n            # Chunked MD5\n            self.info['md5'] = self._calculate_md5_chunked(self.file_path)\n\n            self._update_progress(10, \"Reading IPA Structure...\")\n            with zipfile.ZipFile(self.file_path, 'r') as z:\n                # Find Payload/*.app\n                app_folder = None\n                app_binary_name = None\n                app_binary_path = None\n                \n                namelist = z.namelist()\n                total_files = len(namelist)\n                \n                # Progress 10-30% for scanning files\n                for i, name in enumerate(namelist):\n                    if i % 100 == 0:\n                        percent = 10 + int((i / total_files) * 20)\n                        self._update_progress(percent, \"Scanning IPA structure...\")\n                        \n                    if name.startswith('Payload/') and name.endswith('.app/'):\n                        app_folder = name\n                        # Usually binary name matches .app folder name\n                        # Payload/Name.app/ -> Name\n                        app_binary_name = os.path.splitext(os.path.basename(name.rstrip('/')))[0]\n                        # Don't break immediately, scan all to ensure correct progress? \n                        # Actually breaking is fine for performance, just jump progress.\n                        break\n                \n                if not app_folder:\n                    self.error = \"Invalid IPA: No .app folder found\"\n                    return False\n                \n                self._update_progress(30, \"Found App Bundle: \" + app_folder)\n                \n                if app_binary_name:\n                    # app_binary_name is derived from app_folder basename (mojibake)\n                    # So this simple join usually works if binary name matches folder name\n                    # But we use the robust finder anyway to be safe\n                    # app_binary_path = os.path.join(app_folder, app_binary_name).replace('\\\\', '/')\n                    # self.binary_path = app_binary_path\n                    entry = self._find_zip_entry(z, app_folder, app_binary_name)\n                    if entry:\n                        self.binary_path = entry.filename\n\n                self._update_progress(35, \"Parsing Info.plist...\")\n                # Parse Info.plist\n                info_plist_path = os.path.join(app_folder, 'Info.plist').replace('\\\\', '/')\n                try:\n                    with z.open(info_plist_path) as f:\n                        plist_content = f.read()\n                        try:\n                            plist_data = plistlib.loads(plist_content)\n                        except:\n                            pass\n                        else:\n                            self._parse_info_plist(plist_data)\n                except KeyError:\n                    self.error = \"Info.plist not found\"\n\n                # If binary name wasn't guessed correctly, try to use CFBundleExecutable from plist\n                if self.info.get('raw_plist') and 'CFBundleExecutable' in self.info['raw_plist']:\n                    app_binary_name = self.info['raw_plist']['CFBundleExecutable']\n                    # app_binary_name here is UTF-8 (e.g. \"网校企业版\")\n                    # app_folder is Mojibake (e.g. \"Payload/τ╜æ...\")\n                    # Direct join will fail. Use robust finder.\n                    entry = self._find_zip_entry(z, app_folder, app_binary_name)\n                    if entry:\n                        self.binary_path = entry.filename\n\n                self._update_progress(50, \"Checking Cryptid (Encryption)...\")\n                # Check Encryption (Mach-O cryptid)\n                if self.binary_path:\n                    try:\n                        # Use self.binary_path which is the correct internal zip path\n                        with z.open(self.binary_path) as f:\n                            # Read header to determine if fat binary or thin\n                            header = f.read(4)\n                            f.seek(0)\n                            if len(header) == 4:\n                                self.is_encrypted = self._check_cryptid(f)\n                    except KeyError:\n                        print(f\"Binary file not found in IPA: {self.binary_path}\")\n                    except Exception as e:\n                        print(f\"Error checking cryptid: {e}\")\n\n                self._update_progress(70, \"Parsing Provisioning Profile...\")\n                # Parse embedded.mobileprovision\n                prov_path = os.path.join(app_folder, 'embedded.mobileprovision').replace('\\\\', '/')\n                try:\n                    with z.open(prov_path) as f:\n                        prov_bytes = f.read()\n                        self._parse_provision(prov_bytes)\n                except KeyError:\n                    pass\n\n                self._update_progress(90, \"Extracting Icon...\")\n                # Extract Icon logic...\n                icon_name = None\n                if 'CFBundleIcons' in self.info.get('raw_plist', {}):\n                    try:\n                        icons = self.info['raw_plist']['CFBundleIcons'].get('CFBundlePrimaryIcon', {}).get('CFBundleIconFiles', [])\n                        if icons:\n                            icon_name = icons[-1] \n                    except: pass\n                \n                if not icon_name and 'CFBundleIconFiles' in self.info.get('raw_plist', {}):\n                     try:\n                        icons = self.info['raw_plist']['CFBundleIconFiles']\n                        if icons:\n                            icon_name = icons[-1]\n                     except: pass\n\n                if icon_name:\n                    candidates = [\n                        os.path.join(app_folder, icon_name).replace('\\\\', '/'),\n                        os.path.join(app_folder, icon_name + '.png').replace('\\\\', '/'),\n                        os.path.join(app_folder, icon_name + '@2x.png').replace('\\\\', '/'),\n                        os.path.join(app_folder, icon_name + '@3x.png').replace('\\\\', '/')\n                    ]\n                    for name in z.namelist():\n                        if name.startswith(app_folder) and icon_name in name and name.endswith('.png'):\n                            candidates.append(name)\n\n                    for path in candidates:\n                        try:\n                            with z.open(path) as f:\n                                self.icon_data = f.read()\n                                break\n                        except KeyError:\n                            continue\n            \n            self._update_progress(100, \"Done\")\n\n        except Exception as e:\n            self.error = f\"Analysis failed: {str(e)}\"\n            import traceback\n            traceback.print_exc()\n            return False\n        \n        return True\n\n    def _check_cryptid(self, f):\n        \"\"\"\n        Check LC_ENCRYPTION_INFO or LC_ENCRYPTION_INFO_64 load commands in Mach-O binary.\n        Returns True if cryptid != 0 (Encrypted/AppStore), False otherwise.\n        Handles Fat Binaries (Universal) by checking all architectures.\n        \"\"\"\n        MH_MAGIC = 0xfeedface\n        MH_CIGAM = 0xcefaedfe\n        MH_MAGIC_64 = 0xfeedfacf\n        MH_CIGAM_64 = 0xcffaedfe\n        FAT_MAGIC = 0xcafebabe\n        FAT_CIGAM = 0xbebafeca\n        \n        LC_ENCRYPTION_INFO = 0x21\n        LC_ENCRYPTION_INFO_64 = 0x2C\n\n        def read_uint32(fh, endian='>'): \n            d = fh.read(4)\n            if len(d) < 4: return None\n            return struct.unpack(endian + 'I', d)[0]\n\n        magic_bytes = f.read(4)\n        f.seek(0)\n        \n        if len(magic_bytes) < 4: return False\n        \n        magic = struct.unpack('>I', magic_bytes)[0]\n        \n        # Determine architectures to check\n        archs = [] # (offset, size)\n        \n        if magic == FAT_MAGIC or magic == FAT_CIGAM:\n            # Fat Binary\n            endian = '>' # Fat header is always big-endian\n            f.seek(4)\n            nfat_arch = read_uint32(f, endian)\n            \n            for i in range(nfat_arch):\n                # fat_arch struct: cpu_type, cpu_subtype, offset, size, align\n                f.seek(8 + i * 20) # 4+4 header + 20 bytes per arch\n                cpu_type = read_uint32(f, endian)\n                cpu_subtype = read_uint32(f, endian)\n                offset = read_uint32(f, endian)\n                size = read_uint32(f, endian)\n                archs.append(offset)\n        else:\n            # Thin Binary\n            archs.append(0)\n            \n        for offset in archs:\n            f.seek(offset)\n            magic_bytes = f.read(4)\n            if len(magic_bytes) < 4: continue\n            \n            magic = struct.unpack('>I', magic_bytes)[0]\n            \n            is_64 = False\n            endian = '<' # Default little endian for mach-o (ARM)\n            \n            if magic == MH_MAGIC: pass\n            elif magic == MH_CIGAM: endian = '>'\n            elif magic == MH_MAGIC_64: is_64 = True\n            elif magic == MH_CIGAM_64: \n                is_64 = True\n                endian = '>'\n            else:\n                continue # Unknown magic\n                \n            # Read mach_header\n            # magic(4) + cputype(4) + cpusubtype(4) + filetype(4) + ncmds(4) + sizeofcmds(4) + flags(4) [+ reserved(4) if 64]\n            header_size = 28 if not is_64 else 32\n            \n            f.seek(offset + 16) # Skip to ncmds\n            ncmds = read_uint32(f, endian)\n            \n            # Start of Load Commands\n            f.seek(offset + header_size)\n            \n            for _ in range(ncmds):\n                # load_command struct: cmd(4), cmdsize(4)\n                cmd_start = f.tell()\n                cmd = read_uint32(f, endian)\n                cmd_size = read_uint32(f, endian)\n                \n                if cmd == LC_ENCRYPTION_INFO or cmd == LC_ENCRYPTION_INFO_64:\n                    # encryption_info_command: cmd, cmdsize, cryptoff, cryptsize, cryptid\n                    # We need cryptid (offset 16 from start of cmd)\n                    f.seek(cmd_start + 16)\n                    cryptid = read_uint32(f, endian)\n                    if cryptid and cryptid > 0:\n                        return True # Found encryption!\n                \n                f.seek(cmd_start + cmd_size)\n                \n        return False\n\n    def _parse_info_plist(self, plist):\n        self.info['raw_plist'] = plist\n        self.info['package_name'] = plist.get('CFBundleIdentifier', 'Unknown')\n        self.info['app_name'] = plist.get('CFBundleDisplayName', plist.get('CFBundleName', 'Unknown'))\n        self.info['version_name'] = plist.get('CFBundleShortVersionString', '')\n        self.info['version_code'] = plist.get('CFBundleVersion', '')\n        self.info['min_os'] = plist.get('MinimumOSVersion', '')\n        self.info['platform'] = plist.get('DTPlatformName', 'ios')\n        self.info['supported_platforms'] = plist.get('CFBundleSupportedPlatforms', [])\n        self.info['url_schemes'] = []\n        \n        if 'CFBundleURLTypes' in plist:\n            for url_type in plist['CFBundleURLTypes']:\n                schemes = url_type.get('CFBundleURLSchemes', [])\n                self.info['url_schemes'].extend(schemes)\n\n    def _parse_provision(self, content):\n        try:\n            content_info = cms.ContentInfo.load(content)\n            signed_data = content_info['content']\n            encap_content = signed_data['encap_content_info']\n            plist_bytes = encap_content['content'].native\n            data = plistlib.loads(plist_bytes)\n            \n            self.provision = {\n                'app_id_name': data.get('AppIDName'),\n                'team_name': data.get('TeamName'),\n                'team_id': data.get('TeamIdentifier', [''])[0],\n                'uuid': data.get('UUID'),\n                'creation_date': data.get('CreationDate'),\n                'expiration_date': data.get('ExpirationDate'),\n                'entitlements': data.get('Entitlements', {}),\n                'provisioned_devices': data.get('ProvisionedDevices', [])\n            }\n        except Exception as e:\n            print(f\"Error parsing mobileprovision: {e}\")\n\n    def get_basic_info(self):\n        # Determine protection status text\n        # If cryptid == 1, it's Encrypted (AppStore build, not cracked) -> \"未脱壳\"\n        # If cryptid == 0, it's Decrypted (Cracked/Debug build) -> \"已脱壳\"\n        protect_status = \"未脱壳 (Encrypted)\" if self.is_encrypted else \"已脱壳 (Decrypted)\"\n        \n        return {\n            'name': self.info.get('app_name'),\n            'package': self.info.get('package_name'),\n            'version': f\"{self.info.get('version_name')} ({self.info.get('version_code')})\",\n            'min_sdk': f\"iOS {self.info.get('min_os')}\",\n            'target_sdk': 'N/A', \n            'size': self._format_size(self.info.get('file_size', 0)),\n            'md5': self.info.get('md5'),\n            'protect': protect_status\n        }\n    \n    def get_details(self):\n        return {\n            'url_schemes': self.info.get('url_schemes', []),\n            'platform': self.info.get('platform'),\n            'supported_platforms': self.info.get('supported_platforms'),\n            'provision': self.provision\n        }\n\n    def _format_size(self, size):\n        for unit in ['B', 'KB', 'MB', 'GB']:\n            if size < 1024:\n                return f\"{size:.2f} {unit}\"\n            size /= 1024\n        return f\"{size:.2f} TB\"\n"
  },
  {
    "path": "core/__init__.py",
    "content": ""
  },
  {
    "path": "libs/androguard/__init__.py",
    "content": "# The current version of Androguard\n# Please use only this variable in any scripts,\n# to keep the version number the same everywhere.\n__version__ = \"4.1.3\"\n"
  },
  {
    "path": "libs/androguard/cli/__init__.py",
    "content": ""
  },
  {
    "path": "libs/androguard/cli/cli.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"Androguard is a full Python tool to reverse Android Applications.\"\"\"\nimport json\nimport sys\n\nimport click\nimport networkx as nx\nfrom loguru import logger\n\nfrom androguard.session import Session\nimport androguard.core.apk\nfrom androguard import util\nfrom androguard.cli.main import (\n    androarsc_main,\n    androaxml_main,\n    androdis_main,\n    androdump_main,\n    androlyze_main,\n    androsign_main,\n    androtrace_main,\n    export_apps_to_format,\n)\n\n\n@click.group(help=__doc__)\n@click.version_option(version=androguard.__version__)\n@click.option(\n    \"--verbose\",\n    \"--debug\",\n    'verbosity',\n    flag_value='verbose',\n    help=\"Print more\",\n)\ndef entry_point(verbosity):\n    if verbosity is None:\n        util.set_log(\"ERROR\")\n    else:\n        util.set_log(\"INFO\")\n    logger.add(\"androguard.log\", retention=\"10 days\")\n\n\n@entry_point.command()\n@click.option(\n    '--input',\n    '-i',\n    'input_',\n    type=click.Path(exists=True, file_okay=True, dir_okay=False),\n    help='AndroidManifest.xml or APK to parse (legacy option)',\n)\n@click.option(\n    '--output',\n    '-o',\n    help='filename to save the decoded AndroidManifest.xml to, default stdout',\n)\n@click.option(\n    \"--resource\",\n    \"-r\",\n    help=\"Resource (any binary XML file) inside the APK to parse instead of AndroidManifest.xml\",\n)\n@click.argument(\n    'file_',\n    required=False,\n    type=click.Path(exists=True, file_okay=True, dir_okay=False),\n)\ndef axml(input_, output, file_, resource):\n    \"\"\"\n    Parse the AndroidManifest.xml.\n\n    Parsing is either direct or from a given APK and prints in XML format or\n    saves to file.\n\n    This tool can also be used to process any AXML encoded file, for example\n    from the layout directory.\n\n    Example:\n\n        >>> androguard axml AndroidManifest.xml\n    \"\"\"\n    if file_ is not None and input_ is not None:\n        print(\n            \"Can not give --input and positional argument! \"\n            \"Please use only one of them!\"\n        )\n        sys.exit(1)\n\n    if file_ is None and input_ is None:\n        print(\"Give one file to decode!\")\n        sys.exit(1)\n\n    if file_ is not None:\n        androaxml_main(file_, output, resource)\n    elif input_ is not None:\n        androaxml_main(input_, output, resource)\n\n\n@entry_point.command()\n@click.option(\n    '--input',\n    '-i',\n    'input_',\n    type=click.Path(exists=True),\n    help='resources.arsc or APK to parse (legacy option)',\n)\n@click.argument(\n    'file_',\n    required=False,\n)\n@click.option(\n    '--output',\n    '-o',\n    # required=True,  #  not required due to --list-types\n    help='filename to save the decoded resources to',\n)\n@click.option(\n    '--package',\n    '-p',\n    help='Show only resources for the given package name '\n    '(default: the first package name found)',\n)\n@click.option(\n    '--locale',\n    '-l',\n    help='Show only resources for the given locale (default: \\'\\\\x00\\\\x00\\')',\n)\n@click.option(\n    '--type',\n    '-t',\n    'type_',\n    help='Show only resources of the given type (default: public)',\n)\n@click.option(\n    '--id',\n    'id_',\n    help=\"Resolve the given ID for the given locale and package. Provide the hex ID!\",\n)\n@click.option(\n    '--list-packages',\n    is_flag=True,\n    default=False,\n    help='List all package names and exit',\n)\n@click.option(\n    '--list-locales',\n    is_flag=True,\n    default=False,\n    help='List all package names and exit',\n)\n@click.option(\n    '--list-types',\n    is_flag=True,\n    default=False,\n    help='List all types and exit',\n)\ndef arsc(\n    input_,\n    file_,\n    output,\n    package,\n    locale,\n    type_,\n    id_,\n    list_packages,\n    list_locales,\n    list_types,\n):\n    \"\"\"\n    Decode resources.arsc either directly from a given file or from an APK.\n\n    Example:\n\n        >>> androguard arsc app.apk\n    \"\"\"\n\n    from androguard.core import androconf, apk, axml\n\n    if file_ and input_:\n        logger.info(\n            \"Can not give --input and positional argument! Please use only one of them!\"\n        )\n        sys.exit(1)\n\n    if not input_ and not file_:\n        logger.info(\"Give one file to decode!\")\n        sys.exit(1)\n\n    if input_:\n        fname = input_\n    else:\n        fname = file_\n\n    ret_type = androconf.is_android(fname)\n    if ret_type == \"APK\":\n        a = apk.APK(fname)\n        arscobj = a.get_android_resources()\n        if not arscobj:\n            logger.error(\"The APK does not contain a resources file!\")\n            sys.exit(0)\n    elif ret_type == \"ARSC\":\n        with open(fname, 'rb') as fp:\n            arscobj = axml.ARSCParser(fp.read())\n            if not arscobj:\n                logger.error(\"The resources file seems to be invalid!\")\n                sys.exit(1)\n    else:\n        logger.error(\"Unknown file type!\")\n        sys.exit(1)\n\n    if id_:\n        # Strip the @, if any\n        if id_[0] == \"@\":\n            id_ = id_[1:]\n        try:\n            i_id = int(id_, 16)\n        except ValueError:\n            print(\n                \"ID '{}' could not be parsed! have you supplied the correct hex ID?\".format(\n                    id_\n                )\n            )\n            sys.exit(1)\n\n        name = arscobj.get_resource_xml_name(i_id)\n        if not name:\n            print(\"Specified resource was not found!\")\n            sys.exit(1)\n\n        print(\"@{:08x} resolves to '{}'\".format(i_id, name))\n        print()\n\n        # All the information is in the config.\n        # we simply need to get the actual value of the entry\n        for config, entry in arscobj.get_resolved_res_configs(i_id):\n            print(\n                \"{} = '{}'\".format(\n                    (\n                        config.get_qualifier()\n                        if not config.is_default()\n                        else \"<default>\"\n                    ),\n                    entry,\n                )\n            )\n\n        sys.exit(0)\n\n    if list_packages:\n        print(\"\\n\".join(arscobj.get_packages_names()))\n        sys.exit(0)\n\n    if list_locales:\n        for p in arscobj.get_packages_names():\n            print(\"In Package:\", p)\n            print(\n                \"\\n\".join(\n                    map(\n                        lambda x: (\n                            \"  \\\\x00\\\\x00\"\n                            if x == \"\\x00\\x00\"\n                            else \"  {}\".format(x)\n                        ),\n                        sorted(arscobj.get_locales(p)),\n                    )\n                )\n            )\n        sys.exit(0)\n\n    if list_types:\n        for p in arscobj.get_packages_names():\n            print(\"In Package:\", p)\n            for locale in sorted(arscobj.get_locales(p)):\n                print(\n                    \"  In Locale: {}\".format(\n                        \"\\\\x00\\\\x00\" if locale == \"\\x00\\x00\" else locale\n                    )\n                )\n                print(\n                    \"\\n\".join(\n                        map(\n                            \"    {}\".format,\n                            sorted(arscobj.get_types(p, locale)),\n                        )\n                    )\n                )\n        sys.exit(0)\n\n    androarsc_main(\n        arscobj, outp=output, package=package, typ=type_, locale=locale\n    )\n\n\n@entry_point.command()\n@click.option(\n    '--input',\n    '-i',\n    'input_',\n    type=click.Path(exists=True, dir_okay=False, file_okay=True),\n    help='APK to parse (legacy option)',\n)\n@click.argument(\n    'file_',\n    type=click.Path(exists=True, dir_okay=False, file_okay=True),\n    required=False,\n)\n@click.option(\n    '--output',\n    '-o',\n    required=True,\n    help='output directory. If the output folder already exsist, '\n    'it will be overwritten!',\n)\n@click.option(\n    '--format',\n    '-f',\n    'format_',\n    help='Additionally write control flow graphs for each method, specify '\n    'the format for example png, jpg, raw (write dot file), ...',\n    type=click.Choice(['png', 'jpg', 'raw']),\n)\n@click.option(\n    '--jar',\n    '-j',\n    is_flag=True,\n    default=False,\n    help='Use DEX2JAR to create a JAR file',\n)\n@click.option(\n    '--limit',\n    '-l',\n    help='Limit to certain methods only by regex (default: \\'.*\\')',\n)\n@click.option(\n    '--decompiler',\n    '-d',\n    help='Use a different decompiler (default: DAD)',\n)\ndef decompile(input_, file_, output, format_, jar, limit, decompiler):\n    \"\"\"\n    Decompile an APK and create Control Flow Graphs.\n\n    Example:\n\n        >>> androguard resources.arsc\n    \"\"\"\n    from androguard import session\n\n    if file_ and input_:\n        print(\n            \"Can not give --input and positional argument! \"\n            \"Please use only one of them!\",\n            file=sys.stderr,\n        )\n        sys.exit(1)\n\n    if not input_ and not file_:\n        print(\"Give one file to decode!\", file=sys.stderr)\n        sys.exit(1)\n\n    if input_:\n        fname = input_\n    else:\n        fname = file_\n\n    s = session.Session()\n    with open(fname, \"rb\") as fd:\n        s.add(fname, fd.read())\n    export_apps_to_format(fname, s, output, limit, jar, decompiler, format_)\n\n\n@entry_point.command()\n@click.option(\n    '--hash',\n    'hash_',\n    type=click.Choice(['md5', 'sha1', 'sha256', 'sha512']),\n    default='sha1',\n    show_default=True,\n    help='Fingerprint Hash algorithm',\n)\n@click.option(\n    '--all',\n    '-a',\n    'print_all_hashes',\n    is_flag=True,\n    default=False,\n    show_default=True,\n    help='Print all supported hashes',\n)\n@click.option(\n    '--show',\n    '-s',\n    is_flag=True,\n    default=False,\n    show_default=True,\n    help='Additionally of printing the fingerprints, show more '\n    'certificate information',\n)\n@click.argument(\n    'apk',\n    nargs=-1,\n    type=click.Path(exists=True, dir_okay=False, file_okay=True),\n)\ndef sign(hash_, print_all_hashes, show, apk):\n    \"\"\"Return the fingerprint(s) of all certificates inside an APK.\"\"\"\n    androsign_main(apk, hash_, print_all_hashes, show)\n\n\n@entry_point.command()\n@click.argument(\n    'apks',\n    nargs=-1,\n    type=click.Path(exists=True, file_okay=True, dir_okay=False),\n)\ndef apkid(apks: list[str]):\n    \"\"\"Prints the packageName/versionCode/versionName per APK as JSON.\n    \n    :param apks: list of apk filepaths\n    \"\"\"\n    from androguard.core.apk import get_apkid\n\n    logger.debug(\"APKID\")\n\n    results = dict()\n    for apk in apks:\n        results[apk] = get_apkid(apk)\n    print(json.dumps(results, indent=2))\n\n\n@entry_point.command()\n@click.option(\n    '--session',\n    help='Previously saved session to load instead of a file',\n    type=click.Path(exists=True),\n)\n@click.argument(\n    'apk',\n    default=None,\n    required=False,\n    type=click.Path(exists=True, dir_okay=False, file_okay=True),\n)\ndef analyze(session: str, apk: str):\n    \"\"\"Open a IPython Shell and start reverse engineering.\n    \n    :param session: session file to restore\n    :param apk: apk filename to analyze, if session not set\n    \"\"\"\n    androlyze_main(session, apk)\n\n\n@entry_point.command()\n@click.option(\n    \"-o\",\n    \"--offset\",\n    default=0,\n    type=int,\n    help=\"Offset to start dissassembly inside the file\",\n)\n@click.option(\n    \"-s\",\n    \"--size\",\n    default=0,\n    type=int,\n    help=\"Number of bytes from offset to disassemble, 0 for whole file\",\n)\n@click.argument(\n    \"DEX\",\n    type=click.Path(exists=True, dir_okay=False, file_okay=True),\n)\ndef disassemble(offset, size, dex):\n    \"\"\"\n    Disassemble Dalvik Code with size SIZE starting from an offset\n    \"\"\"\n    androdis_main(offset, size, dex)\n\n\n@entry_point.command()\n@click.argument(\n    'apk',\n    default=None,\n    required=False,\n    type=click.Path(exists=True, dir_okay=False, file_okay=True),\n)\n@click.option(\n    \"-m\",\n    \"--modules\",\n    multiple=True,\n    default=[],\n    help=\"A list of modules to load in frida\",\n)\n@click.option(\n    '--enable-ui',\n    is_flag=True,\n    default=False,\n    help='Enable UI',\n)\ndef trace(apk, modules, enable_ui):\n    \"\"\"\n    Push an APK on the phone and start to trace all interesting methods from the modules list\n\n    Example:\n\n        >>> androguard trace test.APK -m \"ipc/*\"  -m \"webviews/*\" -m \"modules/**\"\n        >>> androguard trace test.APK -m \"ipc/*\"  -m \"webviews/*\" -m \"modules/**\" --enable-ui\n    \"\"\"\n    androtrace_main(apk, modules, False, enable_ui)\n\n\n@entry_point.command()\n@click.argument(\n    'package_name',\n    default=None,\n    required=False,\n)\n@click.option(\n    \"-m\",\n    \"--modules\",\n    multiple=True,\n    default=[],\n    help=\"A list of modules to load in frida\",\n)\ndef dtrace(package_name, modules):\n    \"\"\"\n    Start dynamically an installed APK on the phone and start to trace all interesting methods from the modules list\n\n    Example:\n\n        >>> androguard dtrace package_name -m \"ipc/*\"  -m \"webviews/*\" -m \"modules/**\"\n    \"\"\"\n    androtrace_main(package_name, modules, True)\n\n\n@entry_point.command()\n@click.argument(\n    'package_name',\n    default=None,\n    required=False,\n)\n@click.option(\n    \"-m\",\n    \"--modules\",\n    multiple=True,\n    default=[\"androguard/pentest/modules/helpers/dump/dexdump.js\"],\n    help=\"A list of modules to load in frida\",\n)\ndef dump(package_name, modules):\n    \"\"\"\n    Start and dump dynamically an installed APK on the phone\n\n    Example:\n\n        >>> androguard dump package_name\n    \"\"\"\n    androdump_main(package_name, modules)\n\n\n# callgraph exporting utility functions\ndef _write_gml(G, path):\n    \"\"\"Wrapper around nx.write_gml\"\"\"\n    return nx.write_gml(G, path, stringizer=str)\n\n\ndef _write_gpickle(G, path):\n    \"\"\"Wrapper around pickle dump\"\"\"\n    import pickle\n\n    with open(path, 'wb') as f:\n        pickle.dump(G, f, pickle.HIGHEST_PROTOCOL)\n\n\ndef _write_yaml(G, path):\n    \"\"\"Wrapper around yaml dump\"\"\"\n    import yaml\n\n    with open(path, 'w') as f:\n        yaml.dump(G, f)\n\n\n# mapping of types to their respective exporting functions\nwrite_methods = dict(\n    gml=_write_gml,\n    gexf=nx.write_gexf,\n    # gpickle=_write_gpickle,   # Pickling can't be done due to BufferedReader attributes (e.g. EncodedMethod.buff) not being serializable\n    graphml=nx.write_graphml,\n    # yaml=_write_yaml,         # Same limitation as gpickle\n    net=nx.write_pajek,\n)\n\n\n@entry_point.command()\n@click.argument(\n    'file_',\n    type=click.Path(exists=True, dir_okay=False, file_okay=True),\n    required=True,\n)\n@click.option(\n    '--output',\n    '-o',\n    default='callgraph.gml',\n    help='Filename of the output graph file',\n)\n@click.option(\n    '--output-type',\n    type=click.Choice(list(write_methods.keys()), case_sensitive=False),\n    default='gml',\n    help='Type of the graph to output ',\n)\n@click.option(\n    '--show',\n    '-s',\n    default=False,\n    is_flag=True,\n    help='instead of saving the graph file, render it with matplotlib',\n)\n@click.option(\n    '--classname',\n    default='.*',\n    help='Regex to filter by classname',\n)\n@click.option(\n    '--methodname',\n    default='.*',\n    help='Regex to filter by methodname',\n)\n@click.option(\n    '--descriptor',\n    default='.*',\n    help='Regex to filter by descriptor',\n)\n@click.option(\n    '--accessflag',\n    default='.*',\n    help='Regex to filter by accessflag',\n)\n@click.option(\n    '--no-isolated',\n    default=False,\n    is_flag=True,\n    help='Do not store methods which has no xrefs',\n)\ndef cg(\n    file_,\n    output,\n    output_type,\n    show,\n    classname,\n    methodname,\n    descriptor,\n    accessflag,\n    no_isolated,\n):\n    \"\"\"\n    Create a call graph based on the data of Analysis and export it into a graph format.\n    \"\"\"\n    import matplotlib.pyplot as plt\n\n    from androguard.core.analysis.analysis import ExternalMethod\n    from androguard.core.bytecode import FormatClassToJava\n    from androguard.misc import AnalyzeAPK\n\n    a, d, dx = AnalyzeAPK(file_)\n\n    entry_points = map(\n        FormatClassToJava,\n        a.get_activities()\n        + a.get_providers()\n        + a.get_services()\n        + a.get_receivers(),\n    )\n    entry_points = list(entry_points)\n\n    callgraph = dx.get_call_graph(\n        classname,\n        methodname,\n        descriptor,\n        accessflag,\n        no_isolated,\n        entry_points,\n    )\n\n    if show:\n        try:\n            import PyQt5\n        except ImportError:\n            print(\n                \"PyQt5 is not installed. In most OS you can install it by running 'pip install PyQt5'.\\n\"\n            )\n            exit()\n        pos = nx.spring_layout(callgraph)\n        internal = []\n        external = []\n\n        for n in callgraph:\n            if isinstance(n, ExternalMethod):\n                external.append(n)\n            else:\n                internal.append(n)\n\n        nx.draw_networkx_nodes(\n            callgraph, pos=pos, node_color='r', nodelist=internal\n        )\n\n        nx.draw_networkx_nodes(\n            callgraph, pos=pos, node_color='b', nodelist=external\n        )\n\n        nx.draw_networkx_edges(callgraph, pos, width=0.5, arrows=True)\n\n        nx.draw_networkx_labels(\n            callgraph,\n            pos=pos,\n            font_size=6,\n            labels={\n                n: f\"{n.get_class_name()} {n.name} {n.descriptor}\"\n                for n in callgraph.nodes\n            },\n        )\n\n        plt.draw()\n        plt.show()\n\n    else:\n        output_type_lower = output_type.lower()\n        if output_type_lower not in write_methods:\n            print(\n                f\"Could not find a method to export files to {output_type_lower}!\"\n            )\n            sys.exit(1)\n\n        write_methods[output_type_lower](callgraph, output)\n\n\nif __name__ == '__main__':\n    entry_point()\n"
  },
  {
    "path": "libs/androguard/cli/main.py",
    "content": "# core modules\nimport os\nimport re\nimport shutil\nimport sys\nfrom typing import Union\n\nfrom loguru import logger\n\n# 3rd party modules\nfrom lxml import etree\nfrom pygments import highlight\nfrom pygments.formatters.terminal import TerminalFormatter\nfrom pygments.lexers import get_lexer_by_name\n\nfrom androguard.core import androconf, apk\n\n# internal modules\nfrom androguard.core.axml import ARSCParser, AXMLPrinter\nfrom androguard.core.dex import get_bytecodes_method\nfrom androguard.session import Session\nfrom androguard.ui import DynamicUI\nfrom androguard.util import calculate_fingerprint, parse_public, readFile\n\n\ndef androaxml_main(\n    inp: str, outp: Union[str, None] = None, resource: Union[str, None] = None\n) -> None:\n\n    ret_type = androconf.is_android(inp)\n    if ret_type == \"APK\":\n        a = apk.APK(inp)\n        if resource:\n            if resource not in a.files:\n                logger.error(\n                    \"The APK does not contain a file called '{}'\".format(\n                        resource\n                    ),\n                    file=sys.stderr,\n                )\n                sys.exit(1)\n\n            axml = AXMLPrinter(a.get_file(resource)).get_xml_obj()\n        else:\n            axml = a.get_android_manifest_xml()\n    elif \".xml\" in inp:\n        axml = AXMLPrinter(readFile(inp)).get_xml_obj()\n    else:\n        logger.error(\"Unknown file type\")\n        sys.exit(1)\n\n    buff = etree.tostring(axml, pretty_print=True, encoding=\"utf-8\")\n    if outp:\n        with open(outp, \"wb\") as fd:\n            fd.write(buff)\n    else:\n        sys.stdout.write(\n            highlight(\n                buff.decode(\"UTF-8\"),\n                get_lexer_by_name(\"xml\"),\n                TerminalFormatter(),\n            )\n        )\n\n\ndef androarsc_main(\n    arscobj: ARSCParser,\n    outp: Union[str, None] = None,\n    package: Union[str, None] = None,\n    typ: Union[str, None] = None,\n    locale: Union[str, None] = None,\n) -> None:\n\n    package = package or arscobj.get_packages_names()[0]\n    ttype = typ or \"public\"\n    locale = locale or '\\x00\\x00'\n\n    # TODO: be able to dump all locales of a specific type\n    # TODO: be able to recreate the structure of files when developing, eg a\n    # res folder with all the XML files\n\n    if not hasattr(arscobj, \"get_{}_resources\".format(ttype)):\n        print(\n            \"No decoder found for type: '{}'! Please open a bug report.\".format(\n                ttype\n            ),\n            file=sys.stderr,\n        )\n        sys.exit(1)\n\n    x = getattr(arscobj, \"get_\" + ttype + \"_resources\")(package, locale)\n\n    buff = etree.tostring(\n        etree.fromstring(x), pretty_print=True, encoding=\"UTF-8\"\n    )\n\n    if outp:\n        with open(outp, \"wb\") as fd:\n            fd.write(buff)\n    else:\n        sys.stdout.write(\n            highlight(\n                buff.decode(\"UTF-8\"),\n                get_lexer_by_name(\"xml\"),\n                TerminalFormatter(),\n            )\n        )\n\n\ndef export_apps_to_format(\n    filename: str,\n    s: Session,\n    output: str,\n    methods_filter: Union[str, None] = None,\n    jar: bool = False,\n    decompiler_type: Union[str, None] = None,\n    form: Union[str, None] = None,\n) -> None:\n\n    from androguard.core.bytecode import method2dot, method2format\n    from androguard.decompiler import decompiler\n    from androguard.misc import clean_file_name\n\n    print(\"Dump information {} in {}\".format(filename, output))\n\n    if not os.path.exists(output):\n        print(\"Create directory %s\" % output)\n        os.makedirs(output)\n    else:\n        while True:\n            user_input = (\n                input(f\"Do you want to clean the directory {output}? (Y/N): \")\n                .strip()\n                .lower()\n            )\n\n            if user_input == 'y':\n                print(\"Deleting...\")\n                androconf.rrmdir(output)\n                os.makedirs(output)\n                break\n            elif user_input == 'n':\n                print(\"Not deleting.\")\n                break\n            else:\n                print(\"Invalid input. Please enter Y or N.\")\n\n    methods_filter_expr = None\n    if methods_filter:\n        methods_filter_expr = re.compile(methods_filter)\n\n    dump_classes = []\n    for _, vm, vmx in s.get_objects_dex():\n        print(\"Decompilation ...\", end=' ')\n        sys.stdout.flush()\n\n        if decompiler_type == \"dex2jad\":\n            vm.set_decompiler(\n                decompiler.DecompilerDex2Jad(\n                    vm,\n                    androconf.CONF[\"BIN_DEX2JAR\"],\n                    androconf.CONF[\"BIN_JAD\"],\n                    androconf.CONF[\"TMP_DIRECTORY\"],\n                )\n            )\n        elif decompiler_type == \"dex2winejad\":\n            vm.set_decompiler(\n                decompiler.DecompilerDex2WineJad(\n                    vm,\n                    androconf.CONF[\"BIN_DEX2JAR\"],\n                    androconf.CONF[\"BIN_WINEJAD\"],\n                    androconf.CONF[\"TMP_DIRECTORY\"],\n                )\n            )\n        elif decompiler_type == \"ded\":\n            vm.set_decompiler(\n                decompiler.DecompilerDed(\n                    vm,\n                    androconf.CONF[\"BIN_DED\"],\n                    androconf.CONF[\"TMP_DIRECTORY\"],\n                )\n            )\n        elif decompiler_type == \"dex2fernflower\":\n            vm.set_decompiler(\n                decompiler.DecompilerDex2Fernflower(\n                    vm,\n                    androconf.CONF[\"BIN_DEX2JAR\"],\n                    androconf.CONF[\"BIN_FERNFLOWER\"],\n                    androconf.CONF[\"OPTIONS_FERNFLOWER\"],\n                    androconf.CONF[\"TMP_DIRECTORY\"],\n                )\n            )\n\n        print(\"End\")\n\n        if jar:\n            print(\"jar ...\", end=' ')\n            filenamejar = decompiler.Dex2Jar(\n                vm,\n                androconf.CONF[\"BIN_DEX2JAR\"],\n                androconf.CONF[\"TMP_DIRECTORY\"],\n            ).get_jar()\n            shutil.move(filenamejar, os.path.join(output, \"classes.jar\"))\n            print(\"End\")\n\n        for method in vm.get_encoded_methods():\n            if methods_filter_expr:\n                msig = \"{}{}{}\".format(\n                    method.get_class_name(),\n                    method.get_name(),\n                    method.get_descriptor(),\n                )\n                if not methods_filter_expr.search(msig):\n                    continue\n\n            # Current Folder to write to\n            filename_class = valid_class_name(str(method.get_class_name()))\n            filename_class = os.path.join(output, filename_class)\n            create_directory(filename_class)\n\n            print(\n                \"Dump {} {} {} ...\".format(\n                    method.get_class_name(),\n                    method.get_name(),\n                    method.get_descriptor(),\n                ),\n                end=' ',\n            )\n\n            filename = clean_file_name(\n                os.path.join(filename_class, method.get_short_string())\n            )\n\n            buff = method2dot(vmx.get_method(method))\n            # Write Graph of method\n            if form:\n                print(\"%s ...\" % form, end=' ')\n                method2format(filename + \".\" + form, form, None, buff)\n\n            # Write the Java file for the whole class\n            if str(method.get_class_name()) not in dump_classes:\n                print(\"source codes ...\", end=' ')\n                current_class = vm.get_class(method.get_class_name())\n                current_filename_class = valid_class_name(\n                    str(current_class.get_name())\n                )\n\n                current_filename_class = os.path.join(\n                    output, current_filename_class + \".java\"\n                )\n                with open(current_filename_class, \"w\") as fd:\n                    fd.write(current_class.get_source())\n                dump_classes.append(method.get_class_name())\n\n            # Write SMALI like code\n            print(\"bytecodes ...\", end=' ')\n            bytecode_buff = get_bytecodes_method(vm, vmx, method)\n            with open(filename + \".ag\", \"w\") as fd:\n                fd.write(bytecode_buff)\n            print()\n\n\ndef valid_class_name(class_name: str) -> str:\n    if class_name[-1] == \";\":\n        class_name = class_name[1:-1]\n    return os.path.join(*class_name.split(\"/\"))\n\n\ndef create_directory(pathdir: str) -> None:\n    if not os.path.exists(pathdir):\n        os.makedirs(pathdir)\n\n\ndef androlyze_main(session: Session, filename: str) -> None:\n    \"\"\"\n    Start an interactive shell\n\n    :param session: Session file to load\n    :param filename: File to analyze, can be APK or DEX (or ODEX)\n    \"\"\"\n    import atexit\n\n    import colorama\n    from colorama import Fore\n    from IPython.terminal.embed import embed\n    from traitlets.config import Config\n\n    from androguard.core.androconf import ANDROGUARD_VERSION, CONF\n    from androguard.session import Session\n\n    colorama.init()\n\n    if session:\n        logger.info(\"TODO: Restoring session '{}'...\".format(session))\n        # s = CONF['SESSION'] = Load(session)\n        # logger.info(\"Successfully restored {}\".format(s))\n        # TODO actually restore the session a, d, dx etc...\n    else:\n        s = CONF[\"SESSION\"] = Session(export_ipython=True)\n\n    if filename:\n        (\"Loading apk {}...\".format(os.path.basename(filename)))\n        logger.info(\"Please be patient, this might take a while.\")\n\n        filetype = androconf.is_android(filename)\n\n        logger.info(\"Found the provided file is of type '{}'\".format(filetype))\n\n        if filetype not in ['DEX', 'DEY', 'APK']:\n            logger.error(\n                Fore.RED\n                + \"This file type is not supported by androlyze for auto loading right now!\"\n                + Fore.RESET,\n                file=sys.stderr,\n            )\n            logger.error(\"But your file is still available:\")\n            logger.error(\">>> filename\")\n            logger.error(repr(filename))\n            print()\n\n        else:\n            with open(filename, \"rb\") as fp:\n                raw = fp.read()\n\n            h = s.add(filename, raw)\n            logger.info(\"Added file to session: SHA256::{}\".format(h))\n\n            if filetype == 'APK':\n                logger.info(\"Loaded APK file...\")\n                a, d, dx = s.get_objects_apk(digest=h)\n\n                print(\">>> filename\")\n                print(filename)\n                print(\">>> a\")\n                print(a)\n                print(\">>> d\")\n                print(d)\n                print(\">>> dx\")\n                print(dx)\n                print()\n            elif filetype in ['DEX', 'DEY']:\n                logger.info(\"Loaded DEX file...\")\n                for h_, d, dx in s.get_objects_dex():\n                    if h == h_:\n                        break\n                print(\">>> d\")\n                print(d)\n                print(\">>> dx\")\n                print(dx)\n                print()\n\n    def shutdown_hook() -> None:\n        \"\"\"Save the session on exit, if wanted\"\"\"\n        if not s.isOpen():\n            return\n\n        try:\n            res = input(\"Do you want to save the session? (y/[n])?\").lower()\n        except (EOFError, KeyboardInterrupt):\n            pass\n        else:\n            if res == \"y\":\n                # TODO: if we already started from a session, probably we want to save it under the same name...\n                # TODO: be able to take any filename you want\n                fname = s.save()\n                print(\"Saved Session to file: '{}'\".format(fname))\n\n    cfg = Config()\n    _version_string = \"Androguard version {}\".format(ANDROGUARD_VERSION)\n    ipshell = embed(config=cfg, banner1=\"{} started\".format(_version_string))\n    atexit.register(shutdown_hook)\n    ipshell()\n\n\ndef androsign_main(\n    args_apk: list[str], args_hash: str, args_all: bool, show: bool\n) -> None:\n    import binascii\n    import hashlib\n    import traceback\n\n    from asn1crypto import keys, x509\n    from colorama import Fore, Style\n\n    from androguard.core.apk import APK\n    from androguard.util import get_certificate_name_string\n\n    # Keep the list of hash functions in sync with cli/entry_points.py:sign\n    hashfunctions = dict(\n        md5=hashlib.md5,\n        sha1=hashlib.sha1,\n        sha256=hashlib.sha256,\n        sha512=hashlib.sha512,\n    )\n\n    if args_hash.lower() not in hashfunctions:\n        print(\n            \"Hash function {} not supported!\".format(args_hash.lower()),\n            file=sys.stderr,\n        )\n        print(\n            \"Use one of {}\".format(\", \".join(hashfunctions.keys())),\n            file=sys.stderr,\n        )\n        sys.exit(1)\n\n    for path in args_apk:\n        try:\n            a = APK(path)\n\n            print(\n                \"{}, package: '{}'\".format(\n                    os.path.basename(path), a.get_package()\n                )\n            )\n            print(\"Is signed v1: {}\".format(a.is_signed_v1()))\n            print(\"Is signed v2: {}\".format(a.is_signed_v2()))\n            print(\"Is signed v3: {}\".format(a.is_signed_v3()))\n\n            certs = set(\n                a.get_certificates_der_v3()\n                + a.get_certificates_der_v2()\n                + [a.get_certificate_der(x) for x in a.get_signature_names()]\n            )\n            pkeys = set(\n                a.get_public_keys_der_v3() + a.get_public_keys_der_v2()\n            )\n\n            if len(certs) > 0:\n                print(\"Found {} unique certificates\".format(len(certs)))\n\n            for cert in certs:\n                if show:\n                    x509_cert = x509.Certificate.load(cert)\n                    print(\n                        \"Issuer:\",\n                        get_certificate_name_string(\n                            x509_cert.issuer, short=True\n                        ),\n                    )\n                    print(\n                        \"Subject:\",\n                        get_certificate_name_string(\n                            x509_cert.subject, short=True\n                        ),\n                    )\n                    print(\"Serial Number:\", hex(x509_cert.serial_number))\n                    print(\"Hash Algorithm:\", x509_cert.hash_algo)\n                    print(\"Signature Algorithm:\", x509_cert.signature_algo)\n                    print(\n                        \"Valid not before:\",\n                        x509_cert['tbs_certificate']['validity'][\n                            'not_before'\n                        ].native,\n                    )\n                    print(\n                        \"Valid not after:\",\n                        x509_cert['tbs_certificate']['validity'][\n                            'not_after'\n                        ].native,\n                    )\n\n                if not args_all:\n                    print(\n                        \"{} {}\".format(\n                            args_hash.lower(),\n                            hashfunctions[args_hash.lower()](cert).hexdigest(),\n                        )\n                    )\n                else:\n                    for k, v in hashfunctions.items():\n                        print(\"{} {}\".format(k, v(cert).hexdigest()))\n                print()\n\n            if len(certs) > 0:\n                print(\n                    \"Found {} unique public keys associated with the certs\".format(\n                        len(pkeys)\n                    )\n                )\n\n            for public_key in pkeys:\n                if show:\n                    parsed_key = parse_public(public_key)\n                    print(f\"Algorithm: {parsed_key.algorithm}\")\n                    print(f\"Bit size: {parsed_key.bit_size}\")\n                    print(\n                        f\"Fingerprint: {calculate_fingerprint(parsed_key).hex()}\"\n                    )\n                    try:\n                        print(f\"Hash Algorithm: {parsed_key.hash_algo}\")\n                    except ValueError as ve:\n                        # RSA pkey does not have a hash algorithm\n                        pass\n                print()\n\n        except:\n            print(\n                Fore.RED\n                + \"Error in {}\".format(os.path.basename(path))\n                + Style.RESET_ALL,\n                file=sys.stderr,\n            )\n            traceback.print_exc(file=sys.stderr)\n\n        if len(args_apk) > 1:\n            print()\n\n\ndef androdis_main(offset: int, size: int, dex_file: str) -> None:\n    from androguard.core.dex import DEX\n\n    with open(dex_file, \"rb\") as fp:\n        buf = fp.read()\n\n    d = DEX(buf)\n\n    if size == 0 and offset == 0:\n        # Assume you want to just get a disassembly of all classes and methods\n        for cls in d.get_classes():\n            print(\"# CLASS: {}\".format(cls.get_name()))\n            for m in cls.get_methods():\n                print(\n                    \"## METHOD: {} {} {}\".format(\n                        m.get_access_flags_string(),\n                        m.get_name(),\n                        m.get_descriptor(),\n                    )\n                )\n                for idx, ins in m.get_instructions_idx():\n                    print('{:08x}  {}'.format(idx, ins.disasm()))\n\n                print()\n            print()\n    else:\n        if size == 0:\n            size = len(buf)\n\n        if d:\n            idx = offset\n            for nb, i in enumerate(d.disassemble(offset, size)):\n                print(\"%-8d(%08x)\" % (nb, idx), end=' ')\n                i.show(idx)\n                print()\n\n                idx += i.get_length()\n\n\ndef androtrace_main(\n    apk_file: str,\n    list_modules: list[str],\n    live: bool = False,\n    enable_ui: bool = False,\n) -> None:\n    from androguard.pentest import Pentest\n    from androguard.session import Session\n\n    s = Session()\n\n    if not live:\n        with open(apk_file, \"rb\") as fp:\n            raw = fp.read()\n\n        h = s.add(apk_file, raw)\n        logger.info(\"Added file to session: SHA256::{}\".format(h))\n\n    p = Pentest()\n    p.print_devices()\n    p.connect_default_usb()\n    p.start_trace(apk_file, s, list_modules, live=live)\n\n    if enable_ui:\n        logger.remove(1)\n        import time\n\n        from prompt_toolkit.application import get_app\n        from prompt_toolkit.eventloop.inputhook import (\n            InputHookContext,\n            set_eventloop_with_inputhook,\n        )\n\n        time.sleep(1)\n\n        ui = DynamicUI(p.message_queue)\n\n        def inputhook(inputhook_context: InputHookContext):\n            while not inputhook_context.input_is_ready():\n                if ui.process_data():\n                    get_app().invalidate()\n                else:\n                    time.sleep(0.1)\n\n        set_eventloop_with_inputhook(inputhook=inputhook)\n\n        ui.run()\n    else:\n        logger.warning(\"Type 'e' to exit the strace \")\n        s = \"\"\n        while (s != 'e') and (not p.is_detached()):\n            s = input(\"Type 'e' to exit:\")\n\n\ndef androdump_main(package_name: str, list_modules: list[str]) -> None:\n    from androguard.pentest import Pentest\n    from androguard.session import Session\n\n    s = Session()\n\n    p = Pentest()\n    p.print_devices()\n    p.connect_default_usb()\n    p.start_trace(package_name, s, list_modules, live=True, dump=True)\n"
  },
  {
    "path": "libs/androguard/core/__init__.py",
    "content": ""
  },
  {
    "path": "libs/androguard/core/analysis/__init__.py",
    "content": "\n"
  },
  {
    "path": "libs/androguard/core/analysis/analysis.py",
    "content": "# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nimport collections\nimport re\nimport time\nfrom enum import IntEnum\nfrom operator import itemgetter\nfrom typing import Iterator, Union\n\nimport networkx as nx\nfrom loguru import logger\n\nfrom androguard.core import bytecode, dex\nfrom androguard.core.androconf import (\n    is_ascii_problem,\n    load_api_specific_resource_module,\n)\n\nBasicOPCODES = set()\nfor i in dex.BRANCH_DEX_OPCODES:\n    p = re.compile(i)\n    for op, items in dex.DALVIK_OPCODES_FORMAT.items():\n        if p.match(items[1][0]):\n            BasicOPCODES.add(op)\n\n\nclass REF_TYPE(IntEnum):\n    \"\"\"\n    Stores the opcodes for the type of usage in an XREF.\n\n    Used in [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] to store the type of reference to the class.\n    \"\"\"\n\n    REF_NEW_INSTANCE = 0x22\n    REF_CLASS_USAGE = 0x1C\n    INVOKE_VIRTUAL = 0x6E\n    INVOKE_SUPER = 0x6F\n    INVOKE_DIRECT = 0x70\n    INVOKE_STATIC = 0x71\n    INVOKE_INTERFACE = 0x72\n    INVOKE_VIRTUAL_RANGE = 0x74\n    INVOKE_SUPER_RANGE = 0x75\n    INVOKE_DIRECT_RANGE = 0x76\n    INVOKE_STATIC_RANGE = 0x77\n    INVOKE_INTERFACE_RANGE = 0x78\n\n\nclass ExceptionAnalysis:\n    def __init__(self, exception: list, basic_blocks: BasicBlocks):\n        self.start = exception[0]\n        self.end = exception[1]\n\n        self.exceptions = exception[2:]\n\n        for i in self.exceptions:\n            i.append(basic_blocks.get_basic_block(i[1]))\n\n    def show_buff(self) -> str:\n        buff = \"{:x}:{:x}\\n\".format(self.start, self.end)\n\n        for i in self.exceptions:\n            if i[2] is None:\n                buff += \"\\t({} -> {:x} {})\\n\".format(i[0], i[1], i[2])\n            else:\n                buff += \"\\t({} -> {:x} {})\\n\".format(\n                    i[0], i[1], i[2].get_name()\n                )\n\n        return buff[:-1]\n\n    def get(self) -> dict[str, Union[int, list[dict[str, Union[str, int]]]]]:\n        d = {\"start\": self.start, \"end\": self.end, \"list\": []}\n\n        for i in self.exceptions:\n            d[\"list\"].append(\n                {\"name\": i[0], \"idx\": i[1], \"basic_block\": i[2].get_name()}\n            )\n\n        return d\n\n\nclass Exceptions:\n    def __init__(self) -> None:\n        self.exceptions = []\n\n    def add(self, exceptions: list[list], basic_blocks: BasicBlocks) -> None:\n        for i in exceptions:\n            self.exceptions.append(ExceptionAnalysis(i, basic_blocks))\n\n    def get_exception(\n        self, addr_start: int, addr_end: int\n    ) -> Union[ExceptionAnalysis, None]:\n        for i in self.exceptions:\n            if i.start >= addr_start and i.end <= addr_end:\n                return i\n\n            elif addr_end <= i.end and addr_start >= i.start:\n                return i\n\n        return None\n\n    def gets(self) -> list[ExceptionAnalysis]:\n        return self.exceptions\n\n    def get(self) -> Iterator[ExceptionAnalysis]:\n        for i in self.exceptions:\n            yield i\n\n\nclass BasicBlocks:\n    \"\"\"\n    This class represents all basic blocks of a method.\n\n    It is a collection of many [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock].\n    \"\"\"\n\n    def __init__(self) -> None:\n        self.bb = []\n\n    def push(self, bb: DEXBasicBlock) -> None:\n        \"\"\"\n        Adds another basic block to the collection\n\n        :param bb: the `DEXBasicBlock` to add\n        \"\"\"\n        self.bb.append(bb)\n\n    def pop(self, idx: int) -> DEXBasicBlock:\n        \"\"\"remove and return [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock] at `idx`\n\n        :param idx: the index of the `DEXBasicBlock` to pop and return\n        :return: the popped `DEXBasicBlock`\n        \"\"\"\n        return self.bb.pop(idx)\n\n    def get_basic_block(self, idx: int) -> Union[DEXBasicBlock,None]:\n        \"\"\"return the [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock] at `idx` \n\n        :param idx: the index of the `DEXBasicBlock` to return\n        :return: the `DEXBasicBlock` or `None` if not found\n        \"\"\"\n        for i in self.bb:\n            if i.get_start() <= idx < i.get_end():\n                return i\n        return None\n\n    def __len__(self) -> int:\n        return len(self.bb)\n\n    def __iter__(self) -> Iterator[DEXBasicBlock]:\n        \"\"\"\n        :returns: yields each basic block (`DEXBasicBlock` object)\n        \"\"\"\n        yield from self.bb\n\n    def __getitem__(self, item: int) -> DEXBasicBlock:\n        \"\"\"\n        Get the basic block at the index\n\n        :param item: index\n        :returns: The basic block\n        \"\"\"\n        return self.bb[item]\n\n    def gets(self) -> list[DEXBasicBlock]:\n        \"\"\"\n        :returns: a list of [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock]\n        \"\"\"\n        return self.bb\n\n    # Alias for legacy programs\n    get = __iter__\n    get_basic_block_pos = __getitem__\n\n\nclass DEXBasicBlock:\n    \"\"\"\n    A simple basic block of a DEX method.\n\n    A basic block consists of a series of [Instruction][androguard.core.dex.Instruction]\n    which are not interrupted by branch or jump instructions such as `goto`, `if`, `throw`, `return`, `switch` etc.\n    \"\"\"\n\n    def __init__(\n        self,\n        start: int,\n        vm: dex.DEX,\n        method: dex.EncodedMethod,\n        context: BasicBlocks,\n    ) -> None:\n        \"\"\"Initialize a new [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock]\n\n        :param start: start address of the basic block\n        :param vm: `DEX` containing the basic block\n        :param method: `EncodedMethod` containing the basic block\n        :param context: `BasicBlocks` containing this basic block\n        \"\"\"\n        self.__vm = vm\n        self.method = method\n        self.context = context\n\n        self.last_length = 0\n        self.nb_instructions = 0\n\n        self.fathers = []\n        self.childs = []\n\n        self.start = start\n        self.end = self.start\n\n        self.special_ins = {}\n\n        self.name = ''.join([self.method.get_name(), '-BB@', hex(self.start)])\n        self.exception_analysis = None\n\n        self.notes = []\n\n        self.__cached_instructions = None\n\n    def get_notes(self) -> list[str]:\n        return self.notes\n\n    def set_notes(self, value: str) -> None:\n        self.notes = [value]\n\n    def add_note(self, note: str) -> None:\n        self.notes.append(note)\n\n    def clear_notes(self) -> None:\n        self.notes = []\n\n    def get_instructions(self) -> Iterator[dex.Instruction]:\n        \"\"\"\n        Get all instructions from a basic block.\n\n        :returns: Return all instructions in the current basic block\n        \"\"\"\n        idx = 0\n        for i in self.method.get_instructions():\n            if self.start <= idx < self.end:\n                yield i\n            idx += i.get_length()\n\n    def get_nb_instructions(self) -> int:\n        return self.nb_instructions\n\n    def get_method(self) -> dex.EncodedMethod:\n        \"\"\"\n        Returns the originating method\n\n        :returns: the originating `dex.EncodedMethod` object\n        \"\"\"\n        return self.method\n\n    def get_name(self) -> str:\n        return self.name\n\n    def get_start(self) -> int:\n        \"\"\"\n        Get the starting offset of this basic block\n\n        :returns: starting offset\n        \"\"\"\n        return self.start\n\n    def get_end(self) -> int:\n        \"\"\"\n        Get the end offset of this basic block\n\n        :returns: end offset\n        \"\"\"\n        return self.end\n\n    def get_last(self) -> dex.Instruction:\n        \"\"\"\n        Get the last instruction in the basic block\n\n        :returns: the last `androguard.core.dex.Instruction` in the basic block\n        \"\"\"\n        return list(self.get_instructions())[-1]\n\n    def get_next(self) -> DEXBasicBlock:\n        \"\"\"\n        Get next basic blocks\n\n        :returns: a list of the next `DEXBasicBlock` objects\n        \"\"\"\n        return self.childs\n\n    def get_prev(self) -> DEXBasicBlock:\n        \"\"\"\n        Get previous basic blocks\n\n        :returns: a list of the previous `DEXBasicBlock` objects\n        \"\"\"\n        return self.fathers\n\n    def set_fathers(self, f: DEXBasicBlock) -> None:\n        self.fathers.append(f)\n\n    def get_last_length(self) -> int:\n        return self.last_length\n\n    def set_childs(self, values: list[int]) -> None:\n        # print self, self.start, self.end, values\n        if not values:\n            next_block = self.context.get_basic_block(self.end + 1)\n            if next_block is not None:\n                self.childs.append(\n                    (self.end - self.get_last_length(), self.end, next_block)\n                )\n        else:\n            for i in values:\n                if i != -1:\n                    next_block = self.context.get_basic_block(i)\n                    if next_block is not None:\n                        self.childs.append(\n                            (self.end - self.get_last_length(), i, next_block)\n                        )\n\n        for c in self.childs:\n            if c[2] is not None:\n                c[2].set_fathers((c[1], c[0], self))\n\n    def push(self, i: DEXBasicBlock) -> None:\n        self.nb_instructions += 1\n        idx = self.end\n        self.last_length = i.get_length()\n        self.end += self.last_length\n\n        op_value = i.get_op_value()\n\n        if op_value == 0x26 or (0x2B <= op_value <= 0x2C):\n            code = self.method.get_code().get_bc()\n            self.special_ins[idx] = code.get_ins_off(idx + i.get_ref_off() * 2)\n\n    def get_special_ins(self, idx: int) -> Union[dex.Instruction, None]:\n        \"\"\"\n        Return the associated instruction to a specific instruction (for example a packed/sparse switch)\n\n        :param idx: the index of the instruction\n\n        :returns: the associated `dex.Instruction`\n        \"\"\"\n        if idx in self.special_ins:\n            return self.special_ins[idx]\n        else:\n            return None\n\n    def get_exception_analysis(self) -> ExceptionAnalysis:\n        return self.exception_analysis\n\n    def set_exception_analysis(self, exception_analysis: ExceptionAnalysis):\n        self.exception_analysis = exception_analysis\n\n    def show(self) -> None:\n        print(\n            \"{}: {:04x} - {:04x}\".format(\n                self.get_name(), self.get_start(), self.get_end()\n            )\n        )\n        for note in self.get_notes():\n            print(note)\n        print('=' * 20)\n\n\nclass MethodAnalysis:\n    \"\"\"\n    This class analyzes in details a method of a class/dex file\n    It is a wrapper around a [androguard.core.dex.EncodedMethod][] and enhances it\n    by using multiple [DEXBasicBlock][androguard.core.analysis.analysis.DEXBasicBlock] encapsulated in a [BasicBlocks][androguard.core.analysis.analysis.BasicBlocks] object.\n    \"\"\"\n    def __init__(self, vm: dex.DEX, method: dex.EncodedMethod) -> None:\n        \"\"\"Initialize new [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis]\n\n        :param vm: the `dex.DEX` containing the method\n        :param method: the `dex.EncodedMethod` to wrap\n        \"\"\"\n        logger.debug(\n            \"Adding new method {} {}\".format(\n                method.get_class_name(), method.get_name()\n            )\n        )\n\n        self.__vm = vm\n        self.method = method\n\n        self.basic_blocks = BasicBlocks()\n        self.exceptions = Exceptions()\n\n        self.xrefto = set()\n        self.xreffrom = set()\n\n        self.xrefread = set()\n        self.xrefwrite = set()\n\n        self.xrefnewinstance = set()\n        self.xrefconstclass = set()\n\n        # For Android 10+\n        self.restriction_flag = None\n        self.domain_flag = None\n\n        # Reserved for further use\n        self.apilist = None\n\n        if vm is None or isinstance(method, ExternalMethod):\n            # Support external methods here\n            # external methods usually dont have a VM associated\n            self.code = None\n        else:\n            self.code = self.method.get_code()\n\n        if self.code:\n            self._create_basic_block()\n\n    @property\n    def name(self) -> str:\n        \"\"\"Returns the name of this method\n        \n        :returns: the name\n        \"\"\"\n        return self.method.get_name()\n\n    @property\n    def descriptor(self) -> str:\n        \"\"\"Returns the type descriptor for this method\n        \n        :returns: the type descriptor\n        \"\"\"\n        return self.method.get_descriptor()\n\n    @property\n    def access(self) -> str:\n        \"\"\"Returns the access flags to the method as a string\n        \n        :returns: the access flags\n        \"\"\"\n        return self.method.get_access_flags_string()\n\n    @property\n    def class_name(self) -> str:\n        \"\"\"Returns the name of the class of this method\n        \n        :returns: the name of the class\n        \"\"\"\n        return self.method.class_name\n\n    @property\n    def full_name(self) -> str:\n        \"\"\"Returns classname + name + descriptor, separated by spaces (no access flags)\n        \n        :returns: the method full name\n        \"\"\"\n        return self.method.full_name\n\n    def get_class_name(self) -> str:\n        \"\"\"Return the class name of the method\n        \n        :returns: the name of the class\n        \"\"\"\n        return self.class_name\n\n    def get_access_flags_string(self) -> str:\n        \"\"\"Returns the concatenated access flags string\n        \n        :returns: the access flags\n        \"\"\"\n        return self.access\n\n    def get_descriptor(self) -> str:\n        return self.descriptor\n\n    def _create_basic_block(self) -> None:\n        \"\"\"\n        Internal Method to create the basic block structure\n        Parses all instructions and exceptions.\n        \"\"\"\n        current_basic = DEXBasicBlock(\n            0, self.__vm, self.method, self.basic_blocks\n        )\n        self.basic_blocks.push(current_basic)\n\n        l = []\n        h = dict()\n\n        logger.debug(\n            \"Parsing instructions for method at @0x{:08x}\".format(\n                self.method.get_code_off()\n            )\n        )\n        for idx, ins in self.method.get_instructions_idx():\n            if ins.get_op_value() in BasicOPCODES:\n                v = dex.determineNext(ins, idx, self.method)\n                h[idx] = v\n                l.extend(v)\n\n        logger.debug(\"Parsing exceptions\")\n        excepts = dex.determineException(self.__vm, self.method)\n        for i in excepts:\n            l.extend([i[0]])\n            for handler in i[2:]:\n                l.append(handler[1])\n\n        logger.debug(\"Creating basic blocks\")\n        for idx, ins in self.method.get_instructions_idx():\n            # index is a destination\n            if idx in l:\n                if current_basic.get_nb_instructions() != 0:\n                    current_basic = DEXBasicBlock(\n                        current_basic.get_end(),\n                        self.__vm,\n                        self.method,\n                        self.basic_blocks,\n                    )\n                    self.basic_blocks.push(current_basic)\n\n            current_basic.push(ins)\n\n            # index is a branch instruction\n            if idx in h:\n                current_basic = DEXBasicBlock(\n                    current_basic.get_end(),\n                    self.__vm,\n                    self.method,\n                    self.basic_blocks,\n                )\n                self.basic_blocks.push(current_basic)\n\n        if current_basic.get_nb_instructions() == 0:\n            self.basic_blocks.pop(-1)\n\n        logger.debug(\"Settings basic blocks childs\")\n        for i in self.basic_blocks.get():\n            try:\n                i.set_childs(h[i.end - i.get_last_length()])\n            except KeyError:\n                i.set_childs([])\n\n        logger.debug(\"Creating exceptions\")\n        self.exceptions.add(excepts, self.basic_blocks)\n\n        for i in self.basic_blocks.get():\n            # setup exception by basic block\n            i.set_exception_analysis(\n                self.exceptions.get_exception(i.start, i.end - 1)\n            )\n\n    def add_xref_read(\n        self, classobj: ClassAnalysis, fieldobj: FieldAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        :param ClassAnalysis classobj:\n        :param FieldAnalysis fieldobj:\n        :param int offset: offset in the bytecode\n        \"\"\"\n        self.xrefread.add((classobj, fieldobj, offset))\n\n    def add_xref_write(\n        self, classobj: ClassAnalysis, fieldobj: FieldAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        :param ClassAnalysis classobj:\n        :param FieldAnalysis fieldobj:\n        :param int offset: offset in the bytecode\n        \"\"\"\n        self.xrefwrite.add((classobj, fieldobj, offset))\n\n    def get_xref_read(self) -> list[tuple[ClassAnalysis, FieldAnalysis]]:\n        \"\"\"\n        Returns a list of xrefs where a field is read by this method.\n\n        The list contains tuples of the originating class and methods,\n        where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        while the Field is a [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis].\n\n        :returns: the `xrefread` list\n        \"\"\"\n        return self.xrefread\n\n    def get_xref_write(self) -> list[tuple[ClassAnalysis, FieldAnalysis]]:\n        \"\"\"\n        Returns a list of xrefs where a field is written to by this method.\n\n        The list contains tuples of the originating class and methods,\n        where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        while the Field is a [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis].\n\n        :returns: the `xrefwrite` list\n        \"\"\"\n        return self.xrefwrite\n\n    def add_xref_to(\n        self, classobj: ClassAnalysis, methodobj: MethodAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        Add a crossreference to another method\n        (this method calls another method)\n        \"\"\"\n        self.xrefto.add((classobj, methodobj, offset))\n\n    def add_xref_from(\n        self, classobj: ClassAnalysis, methodobj: MethodAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        Add a crossrefernece from another method\n        (this method is called by another method)\n        \"\"\"\n        self.xreffrom.add((classobj, methodobj, offset))\n\n    def get_xref_from(self) -> list[tuple[ClassAnalysis, MethodAnalysis, int]]:\n        \"\"\"\n        Returns a list of tuples containing the class, method and offset of\n        the call, from where this object was called.\n\n        The list of tuples has the form:\n        ([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis],\n        `int`)\n\n        :returns: the `xreffrom` list\n        \"\"\"\n        return self.xreffrom\n\n    def get_xref_to(self) -> list[tuple[ClassAnalysis, MethodAnalysis, int]]:\n        \"\"\"\n        Returns a list of tuples containing the class, method and offset of\n        the call, which are called by this method.\n\n        The list of tuples has the form:\n        ([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis],\n        `int`)\n\n        :returns: the `xrefto` list\n        \"\"\"\n        return self.xrefto\n\n    def add_xref_new_instance(\n        self, classobj: ClassAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        Add a crossreference to another class that is\n        instanced within this method.\n        \"\"\"\n        self.xrefnewinstance.add((classobj, offset))\n\n    def get_xref_new_instance(self) -> list[tuple[ClassAnalysis, int]]:\n        \"\"\"\n        Returns a list of tuples containing the class and offset of\n        the creation of a new instance of a class by this method.\n\n        The list of tuples has the form:\n        ([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        `int`)\n\n        :returns: the `xrefnewinstance` list\n        \"\"\"\n        return self.xrefnewinstance\n\n    def add_xref_const_class(\n        self, classobj: ClassAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        Add a crossreference to another classtype.\n        \"\"\"\n        self.xrefconstclass.add((classobj, offset))\n\n    def get_xref_const_class(self) -> list[tuple[ClassAnalysis, int]]:\n        \"\"\"\n        Returns a list of tuples containing the class and offset of\n        the references to another classtype by this method.\n\n        The list of tuples has the form:\n        ([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        `int`)\n\n        :returns: the `xrefconstclass` list\n        \"\"\"\n        return self.xrefconstclass\n\n    def is_external(self) -> bool:\n        \"\"\"\n        Returns `True` if the underlying method is external\n\n        :returns: `True` if the underlying method is external, else `False`\n        \"\"\"\n        return isinstance(self.method, ExternalMethod)\n\n    def is_android_api(self) -> bool:\n        \"\"\"\n        Returns `True` if the method seems to be an Android API method.\n\n        This method might be not very precise unless an list of known API methods\n        is given.\n\n        :returns: `True` if the method seems to be an Android API method, else `False`\n        \"\"\"\n        if not self.is_external():\n            # Method must be external to be an API\n            return False\n\n        # Packages found at https://developer.android.com/reference/packages.html\n        api_candidates = [\n            \"Landroid/\",\n            \"Lcom/android/internal/util\",\n            \"Ldalvik/\",\n            \"Ljava/\",\n            \"Ljavax/\",\n            \"Lorg/apache/\",\n            \"Lorg/json/\",\n            \"Lorg/w3c/dom/\",\n            \"Lorg/xml/sax\",\n            \"Lorg/xmlpull/v1/\",\n            \"Ljunit/\",\n        ]\n\n        if self.apilist:\n            # FIXME: This will not work... need to introduce a name for lookup (like EncodedMethod.__str__ but without\n            # the offset! Such a name is also needed for the lookup in permissions\n            return self.method.get_name() in self.apilist\n        else:\n            for candidate in api_candidates:\n                if self.method.get_class_name().startswith(candidate):\n                    return True\n\n        return False\n\n    def get_basic_blocks(self) -> BasicBlocks:\n        \"\"\"\n        Returns the [BasicBlocks][androguard.core.analysis.analysis.BasicBlocks] generated for this method.\n        The [BasicBlocks][androguard.core.analysis.analysis.BasicBlocks] can be used to get a control flow graph (CFG) of the method.\n\n        :returns: a `BasicBlocks` object\n        \"\"\"\n        return self.basic_blocks\n\n    def get_length(self) -> int:\n        \"\"\"\n        :returns: an integer which is the length of the code\n        \"\"\"\n        return self.code.get_length() if self.code else 0\n\n    def get_vm(self) -> dex.DEX:\n        \"\"\"\n        :returns: the `dex.DEX` object\n        \"\"\"\n        return self.__vm\n\n    def get_method(self) -> dex.EncodedMethod:\n        \"\"\"\n        :returns: the `dex.EncodedMethod` object\n        \"\"\"\n        return self.method\n\n    def show(self) -> None:\n        \"\"\"\n        Prints the content of this method to stdout.\n\n        This will print the method signature and the decompiled code.\n        \"\"\"\n        args, ret = self.method.get_descriptor()[1:].split(\")\")\n        if self.code:\n            # We patch the descriptor here and add the registers, if code is available\n            args = args.split(\" \")\n\n            reg_len = self.code.get_registers_size()\n            nb_args = len(args)\n\n            start_reg = reg_len - nb_args\n            args = [\n                \"{} v{}\".format(a, start_reg + i) for i, a in enumerate(args)\n            ]\n\n        print(\n            \"METHOD {} {} {} ({}){}\".format(\n                self.method.get_class_name(),\n                self.method.get_access_flags_string(),\n                self.method.get_name(),\n                \", \".join(args),\n                ret,\n            )\n        )\n\n        if not self.is_external():\n            bytecode.PrettyShow(self.basic_blocks.gets(), self.method.notes)\n\n    def show_xrefs(self) -> None:\n        data = \"XREFto for %s\\n\" % self.method\n        for ref_class, ref_method, offset in self.xrefto:\n            data += \"in\\n\"\n            data += \"{}:{} @0x{:x}\\n\".format(\n                ref_class.get_vm_class().get_name(), ref_method, offset\n            )\n\n        data += \"XREFFrom for %s\\n\" % self.method\n        for ref_class, ref_method, offset in self.xreffrom:\n            data += \"in\\n\"\n            data += \"{}:{} @0x{:x}\\n\".format(\n                ref_class.get_vm_class().get_name(), ref_method, offset\n            )\n\n        return data\n\n    def __repr__(self):\n        return \"<analysis.MethodAnalysis {}>\".format(self.method)\n\n\nclass StringAnalysis:\n    \"\"\"\n    StringAnalysis contains the XREFs of a string.\n\n    As Strings are only used as a source, they only contain\n    the XREF_FROM set, i.e. where the string is used.\n\n    This Array stores the information in which method the String is used.\n    \"\"\"\n\n    def __init__(self, value: str) -> None:\n        \"\"\"Instantiate a new [StringAnalysis][androguard.core.analysis.analysis.StringAnalysis]\n\n        :param value: the original string value\n        \"\"\"\n        self.value = value\n        self.orig_value = value\n        self.xreffrom = set()\n\n    def add_xref_from(\n        self, classobj: ClassAnalysis, methodobj: MethodAnalysis, off: int\n    ) -> None:\n        \"\"\"\n        Adds a xref from the given method to this string\n\n        :param classobj:\n        :param methodobj:\n        :param off: offset in the bytecode of the call\n        \"\"\"\n        self.xreffrom.add((classobj, methodobj, off))\n\n    def get_xref_from(\n        self, with_offset: bool = False\n    ) -> list[tuple[ClassAnalysis, MethodAnalysis]]:\n        \"\"\"\n        Returns a list of xrefs accessing the String.\n\n        The list contains tuples of the originating class and methods,\n        where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        while the method is a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis].\n        \"\"\"\n        if with_offset:\n            return self.xreffrom\n        return set(map(itemgetter(slice(0, 2)), self.xreffrom))\n\n    def set_value(self, value: str) -> None:\n        \"\"\"\n        Overwrite the current value of the String with a new value.\n        The original value is not lost and can still be retrieved using [get_orig_value][androguard.core.analysis.analysis.StringAnalysis.get_orig_value].\n\n        :param value: new string value\n        \"\"\"\n        self.value = value\n\n    def get_value(self) -> str:\n        \"\"\"\n        Return the (possible overwritten) value of the string\n\n        :returns: the value of the string\n        \"\"\"\n        return self.value\n\n    def get_orig_value(self) -> str:\n        \"\"\"\n        Return the original, read only, value of the string\n\n        :returns: the original value\n        \"\"\"\n        return self.orig_value\n\n    def is_overwritten(self) -> bool:\n        \"\"\"\n        Returns `True` if the string was overwritten\n        :returns: `True` if the string was overwritten, else `False`\n        \"\"\"\n        return self.orig_value != self.value\n\n    def __str__(self):\n        data = \"XREFto for string %s in\\n\" % repr(self.get_value())\n        for ref_class, ref_method, _ in self.xreffrom:\n            data += \"{}:{}\\n\".format(\n                ref_class.get_vm_class().get_name(), ref_method\n            )\n        return data\n\n    def __repr__(self):\n        # TODO should remove all chars that are not pleasent. e.g. newlines\n        if len(self.get_value()) > 20:\n            s = \"'{}'...\".format(self.get_value()[:20])\n        else:\n            s = \"'{}'\".format(self.get_value())\n        return \"<analysis.StringAnalysis {}>\".format(s)\n\n\nclass FieldAnalysis:\n    \"\"\"\n    FieldAnalysis contains the XREFs for a class field.\n\n    Instead of using XREF_FROM/XREF_TO, this object has methods for READ and\n    WRITE access to the field.\n\n    That means, that it will show you, where the field is read or written.\n    \"\"\"\n\n    def __init__(self, field: dex.EncodedField) -> None:\n        \"\"\"Initialize a new [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] object\n        :param field:\n        \"\"\"\n        self.field = field\n        self.xrefread = set()\n        self.xrefwrite = set()\n\n    @property\n    def name(self) -> str:\n        return self.field.get_name()\n\n    def add_xref_read(\n        self, classobj: ClassAnalysis, methodobj: MethodAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        :param classobj:\n        :param methodobj:\n        :param offset: offset in the bytecode\n        \"\"\"\n        self.xrefread.add((classobj, methodobj, offset))\n\n    def add_xref_write(\n        self, classobj: ClassAnalysis, methodobj: MethodAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        :param classobj:\n        :param methodobj:\n        :param offset: offset in the bytecode\n        \"\"\"\n        self.xrefwrite.add((classobj, methodobj, offset))\n\n    def get_xref_read(\n        self, with_offset: bool = False\n    ) -> list[tuple[ClassAnalysis, MethodAnalysis]]:\n        \"\"\"\n        Returns a list of xrefs where the field is read.\n\n        The list contains tuples of the originating class and methods,\n        where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        while the method is a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis].\n\n        :param with_offset: return the xrefs including the offset\n\n        :returns: the `xrefread` list\n        \"\"\"\n        if with_offset:\n            return self.xrefread\n        # Legacy option, might be removed in the future\n        return set(map(itemgetter(slice(0, 2)), self.xrefread))\n\n    def get_xref_write(\n        self, with_offset: bool = False\n    ) -> list[tuple[ClassAnalysis, MethodAnalysis]]:\n        \"\"\"\n        Returns a list of xrefs where the field is written to.\n\n        The list contains tuples of the originating class and methods,\n        where the class is represented as a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis],\n        while the method is a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis]`.\n\n        :param with_offset: return the xrefs including the offset\n\n        :returns: the `xrefwrite` list\n        \"\"\"\n        if with_offset:\n            return self.xrefwrite\n        # Legacy option, might be removed in the future\n        return set(map(itemgetter(slice(0, 2)), self.xrefwrite))\n\n    def get_field(self) -> dex.EncodedField:\n        \"\"\"\n        Returns the actual [EncodedField][androguard.core.dex.EncodedField] object\n\n        :returns: the `dex.EncodedField` object\n        \"\"\"\n        return self.field\n\n    def __str__(self):\n        data = \"XREFRead for %s\\n\" % self.field\n        for ref_class, ref_method, off in self.xrefread:\n            data += \"in\\n\"\n            data += \"{}:{} @{}\\n\".format(\n                ref_class.get_vm_class().get_name(), ref_method, off\n            )\n\n        data += \"XREFWrite for %s\\n\" % self.field\n        for ref_class, ref_method, off in self.xrefwrite:\n            data += \"in\\n\"\n            data += \"{}:{} @{}\\n\".format(\n                ref_class.get_vm_class().get_name(), ref_method, off\n            )\n\n        return data\n\n    def __repr__(self):\n        return \"<analysis.FieldAnalysis {}->{}>\".format(\n            self.field.class_name, self.field.name\n        )\n\n\nclass ExternalClass:\n    \"\"\"\n    The ExternalClass is used for all classes that are not defined in the\n    DEX file, thus are external classes.\n\n    \"\"\"\n\n    def __init__(self, name: str) -> None:\n        \"\"\"Instantiate a new [ExternalClass][androguard.core.analysis.analysis.ExternalClass] object\n        :param name: Name of the external class\n        \"\"\"\n        self.name = name\n        self.methods = []\n\n    def get_methods(self) -> list[MethodAnalysis]:\n        \"\"\"\n        Return the list of stored [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] for this external class\n        :returns: the list of `MethodAnalysis` objects\n        \"\"\"\n        return self.methods\n\n    def add_method(self, method: MethodAnalysis) -> None:\n        self.methods.append(method)\n\n    def get_name(self) -> str:\n        \"\"\"\n        Returns the name of the [ExternalClass][androguard.core.analysis.analysis.ExternalClass] object\n\n        :returns: the name of the external class\n        \"\"\"\n        return self.name\n\n    def __repr__(self):\n        return \"<analysis.ExternalClass {}>\".format(self.name)\n\n\nclass ExternalMethod:\n    \"\"\"\n    ExternalMethod is a stub class for methods that are not part of the current Analysis.\n    There are two possibilities for this:\n\n    1) The method is defined inside another DEX file which was not loaded into the Analysis\n    2) The method is an API method, hence it is defined in the Android system\n\n    External methods should have a similar API to [EncodedMethod][androguard.core.dex.EncodedMethod]\n    but obviously they have no code attached.\n    The only known information about such methods are the class name, the method name and its descriptor.\n    \"\"\"\n\n    def __init__(self, class_name: str, name: str, descriptor: str) -> None:\n        \"\"\"Initialize a new [ExternalMethod][androguard.core.analysis.analysis.ExternalMethod] object\n\n        :param class_name: name of the class\n        :param name: name of the method\n        :param descriptor: descriptor string\n        \"\"\"\n        self.class_name = class_name\n        self.name = name\n        self.descriptor = descriptor\n\n    def get_name(self) -> str:\n        \"\"\"return the name of the external method\n\n        :return: the name of the external method\n        \"\"\"\n        return self.name\n\n    def get_class_name(self) -> str:\n        \"\"\"return the name of the class of this external method\n\n        :return: the name of the class\n        \"\"\"\n        return self.class_name\n\n    def get_descriptor(self) -> str:\n        \"\"\"return the descriptor of this external method\n        :return: the descriptor of the external method\n        \"\"\"\n        return self.descriptor\n\n    @property\n    def full_name(self) -> str:\n        \"\"\"Returns classname + name + descriptor, separated by spaces (no access flags)'\n        \n        :returns: the formatted name\n        \"\"\"\n        return (\n            self.class_name\n            + \" \"\n            + self.name\n            + \" \"\n            + str(self.get_descriptor())\n        )\n\n    @property\n    def permission_api_name(self) -> str:\n        \"\"\"Returns a name which can be used to look up in the permission maps\n        \n        :returns: the formatted name\n        \"\"\"\n        return (\n            self.class_name\n            + \"-\"\n            + self.name\n            + \"-\"\n            + str(self.get_descriptor())\n        )\n\n    def get_access_flags_string(self) -> str:\n        \"\"\"\n        Returns the access flags string.\n\n        Right now, this is always an empty strings, as we can not say what\n        kind of access flags an external method might have.\n        \"\"\"\n        # TODO can we assume that external methods are always public?\n        # they can also be static...\n        # or constructor...\n        # or they might be inherited and have all kinds of access flags...\n        return \"\"\n\n    def __str__(self):\n        return \"{}->{}{}\".format(\n            self.class_name.__str__(),\n            self.name.__str__(),\n            str(self.get_descriptor()),\n        )\n\n    def __repr__(self):\n        return \"<analysis.ExternalMethod {}>\".format(self.__str__())\n\n\nclass ClassAnalysis:\n    \"\"\"\n    ClassAnalysis contains the XREFs from a given Class.\n    It is also used to wrap [ClassDefItem[androguard.core.dex.ClassDefItem], which\n    contain the actual class content like bytecode.\n\n    Also external classes will generate xrefs, obviously only XREF_FROM are\n    shown for external classes.\n    \"\"\"\n\n    def __init__(\n        self, classobj: Union[dex.ClassDefItem, ExternalClass]\n    ) -> None:\n        \"\"\"Initialize a new [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] object\n\n        :param classobj: the original class\n        \"\"\"\n\n        logger.info(f\"Adding new ClassAnalysis: {classobj}\")\n        # Automatically decide if the class is external or not\n        self.external = isinstance(classobj, ExternalClass)\n\n        self.orig_class = classobj\n\n        # Contains EncodedMethod/ExternalMethod -> MethodAnalysis\n        self._methods = dict()\n\n        # Contains EncodedField -> FieldAnalysis\n        self._fields = dict()\n\n        self.xrefto = collections.defaultdict(set)\n        self.xreffrom = collections.defaultdict(set)\n\n        self.xrefnewinstance = set()\n        self.xrefconstclass = set()\n\n        # Reserved for further use\n        self.apilist = None\n\n    def add_method(self, method_analysis: MethodAnalysis) -> None:\n        \"\"\"\n        Add the given method to this analyis.\n        usually only called during [Analysis.add][androguard.core.analysis.analysis.Analysis.add] and `Analysis._resolve_method`\n\n        :param method_analysis: the method to add\n        \"\"\"\n        self._methods[method_analysis.get_method()] = method_analysis\n        if self.external:\n            # Propagate ExternalMethod to ExternalClass\n            self.orig_class.add_method(method_analysis.get_method())\n\n    @property\n    def implements(self) -> list[str]:\n        \"\"\"\n        Get a list of interfaces which are implemented by this class\n\n        :returns: a list of Interface names\n        \"\"\"\n        if self.is_external():\n            return []\n\n        return self.orig_class.get_interfaces()\n\n    @property\n    def extends(self) -> str:\n        \"\"\"\n        Return the parent class\n\n        For external classes, this is not sure, thus we return always Object (which is the parent of all classes)\n\n        :returns: a string of the parent class name\n        \"\"\"\n        if self.is_external():\n            return \"Ljava/lang/Object;\"\n\n        return self.orig_class.get_superclassname()\n\n    @property\n    def name(self) -> str:\n        \"\"\"\n        Return the class name\n\n        :returns:\n        \"\"\"\n        return self.orig_class.get_name()\n\n    def is_external(self) -> bool:\n        \"\"\"\n        Tests if this class is an external class\n\n        :returns: True if the Class is external, False otherwise\n        \"\"\"\n        return self.external\n\n    def is_android_api(self) -> bool:\n        \"\"\"\n        Tries to guess if the current class is an Android API class.\n\n        This might be not very precise unless an apilist is given, with classes that\n        are in fact known APIs.\n        Such a list might be generated by using the android.jar files.\n\n        :returns: True if the class is an Andorid API class, else False.\n        \"\"\"\n\n        # Packages found at https://developer.android.com/reference/packages.html\n        api_candidates = [\n            \"Landroid/\",\n            \"Lcom/android/internal/util\",\n            \"Ldalvik/\",\n            \"Ljava/\",\n            \"Ljavax/\",\n            \"Lorg/apache/\",\n            \"Lorg/json/\",\n            \"Lorg/w3c/dom/\",\n            \"Lorg/xml/sax\",\n            \"Lorg/xmlpull/v1/\",\n            \"Ljunit/\",\n        ]\n\n        if not self.is_external():\n            # API must be external\n            return False\n\n        if self.apilist:\n            return self.orig_class.get_name() in self.apilist\n        else:\n            for candidate in api_candidates:\n                if self.orig_class.get_name().startswith(candidate):\n                    return True\n\n        return False\n\n    def get_methods(self) -> list[MethodAnalysis]:\n        \"\"\"\n        Return all [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] objects of this class\n\n        :returns: the `MethodAnalysis` objects in this class\n        \"\"\"\n        return self._methods.values()\n        # return list(self._methods.values())\n\n    def get_fields(self) -> list[FieldAnalysis]:\n        \"\"\"\n        Return all [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] objects of this class\n\n        :returns: the `FieldAnalysis` objects in this class\n        \"\"\"\n        return self._fields.values()\n\n    def get_nb_methods(self) -> int:\n        \"\"\"\n        Get the number of methods in this class\n\n        :returns: the number of methods\n        \"\"\"\n        return len(self._methods)\n\n    def get_method_analysis(self, method: dex.EncodedMethod) -> MethodAnalysis:\n        \"\"\"\n        Return the [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] object for a given [EncodedMethod][androguard.core.dex.EncodedMethod]\n\n        :param method: the method to get a `MethodAnalysis` for\n        :returns: the related `MethodAnalysis`\n        \"\"\"\n        return self._methods.get(method)\n\n    def get_field_analysis(self, field: dex.EncodedMethod) -> FieldAnalysis:\n        \"\"\"Return the [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] object for a given [EncodedMethod][androguard.core.dex.EncodedMethod]\n\n        :param field: the method to get a `FieldAnalysis` for\n        :returns: the related `FieldAnalysis`\n        \"\"\"\n        return self._fields.get(field)\n\n    def add_field(self, field_analysis: FieldAnalysis) -> None:\n        \"\"\"\n        Add the given field to this analyis.\n        usually only called during [Analysis.add][androguard.core.analysis.analysis.Analysis.add]\n\n        :param field_analysis: the `FieldAnalysis` to add\n        \"\"\"\n        self._fields[field_analysis.get_field()] = field_analysis\n        # if self.external:\n        #     # Propagate ExternalField to ExternalClass\n        #     self.orig_class.add_method(field_analysis.get_field())\n\n    def add_field_xref_read(\n        self,\n        method: MethodAnalysis,\n        classobj: ClassAnalysis,\n        field: dex.EncodedField,\n        off: int,\n    ) -> None:\n        \"\"\"\n        Add a Field Read to this class\n\n        :param method:\n        :param classobj:\n        :param field:\n        :param int off:\n        \"\"\"\n        if field not in self._fields:\n            self._fields[field] = FieldAnalysis(field)\n        self._fields[field].add_xref_read(classobj, method, off)\n\n    def add_field_xref_write(\n        self,\n        method: MethodAnalysis,\n        classobj: ClassAnalysis,\n        field: dex.EncodedField,\n        off: int,\n    ) -> None:\n        \"\"\"\n        Add a Field Write to this class in a given method\n\n        :param method:\n        :param classobj:\n        :param field:\n        :param int off:\n        \"\"\"\n        if field not in self._fields:\n            self._fields[field] = FieldAnalysis(field)\n        self._fields[field].add_xref_write(classobj, method, off)\n\n    def add_method_xref_to(\n        self,\n        method1: MethodAnalysis,\n        classobj: ClassAnalysis,\n        method2: MethodAnalysis,\n        offset: int,\n    ) -> None:\n        \"\"\"\n\n        :param method1: the calling method\n        :param classobj: the calling class\n        :param method2: the called method\n        :param int offset: offset in the bytecode of calling method\n        \"\"\"\n\n        # FIXME: Not entirely sure why this can happen but usually a multidex issue:\n        # The given method was not added before...\n        if method1.get_method() not in self._methods:\n            self.add_method(method1)\n\n        self._methods[method1.get_method()].add_xref_to(\n            classobj, method2, offset\n        )\n\n    def add_method_xref_from(\n        self,\n        method1: MethodAnalysis,\n        classobj: ClassAnalysis,\n        method2: MethodAnalysis,\n        offset: int,\n    ) -> None:\n        \"\"\"\n        :param method1:\n        :param classobj:\n        :param method2:\n        :param int offset:\n        \"\"\"\n        # FIXME: Not entirely sure why this can happen but usually a multidex issue:\n        # The given method was not added before...\n        if method1.get_method() not in self._methods:\n            self.add_method(method1)\n\n        self._methods[method1.get_method()].add_xref_from(\n            classobj, method2, offset\n        )\n\n    def add_xref_to(\n        self,\n        ref_kind: REF_TYPE,\n        classobj: ClassAnalysis,\n        methodobj: MethodAnalysis,\n        offset: int,\n    ) -> None:\n        \"\"\"\n        Creates a crossreference to another class.\n        XrefTo means, that the current class calls another class.\n        The current class should also be contained in the another class' XrefFrom list.\n\n        WARNING: The implementation of this specific method might not be what you expect! the parameter `methodobj` is the source method and not the destination in the case that `ref_kind` is const-class or new-instance!\n\n        :param ref_kind: type of call\n        :param classobj: `ClassAnalysis` object to link\n        :param methodobj:\n        :param offset: Offset in the Methods Bytecode, where the call happens\n        \"\"\"\n        self.xrefto[classobj].add((ref_kind, methodobj, offset))\n\n    def add_xref_from(\n        self,\n        ref_kind: REF_TYPE,\n        classobj: ClassAnalysis,\n        methodobj: MethodAnalysis,\n        offset: int,\n    ) -> None:\n        \"\"\"\n        Creates a crossreference from this class.\n        XrefFrom means, that the current class is called by another class.\n\n        :param ref_kind: type of call\n        :param classobj: `ClassAnalysis` object to link\n        :param methodobj:\n        :param offset: Offset in the methods bytecode, where the call happens\n        \"\"\"\n        self.xreffrom[classobj].add((ref_kind, methodobj, offset))\n\n    def get_xref_from(\n        self,\n    ) -> dict[ClassAnalysis, tuple[REF_TYPE, MethodAnalysis, int]]:\n        \"\"\"\n        Returns a dictionary of all classes calling the current class.\n        This dictionary contains also information from which method the class is accessed.\n\n        Note: this method might contains wrong information about class usage!\n\n        The dictionary contains the classes as keys (stored as [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis])\n        and has a tuple as values, where the first item is the `ref_kind` (which is an Enum of type [REF_TYPE][androguard.core.analysis.analysis.REF_TYPE]),\n        the second one is the method in which the class is called ([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis])\n        and the third the offset in the method where the call is originating.\n\n        Examples: \n\n            >>> # dx is an Analysis object\n            for cls in dx.find_classes('.*some/name.*'):\n            >>>     print(\"Found class {} in Analysis\".format(cls.name)\n            >>>     for caller, refs in cls.get_xref_from().items():\n            >>>         print(\"  called from {}\".format(caller.name))\n            >>>         for ref_kind, ref_method, ref_offset in refs:\n            >>>             print(\"    in method {} {}\".format(ref_kind, ref_method))\n\n        :returns: `xreffrom`, a dictionary of all classes calling the current class\n        \"\"\"\n        return self.xreffrom\n\n    def get_xref_to(\n        self,\n    ) -> dict[ClassAnalysis, tuple[REF_TYPE, MethodAnalysis, int]]:\n        \"\"\"\n        Returns a dictionary of all classes which are called by the current class.\n        This dictionary contains also information about the method which is called.\n\n        Note: this method might contains wrong information about class usage!\n\n        The dictionary contains the classes as keys (stored as [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis])\n        and has a tuple as values, where the first item is the `ref_kind` (which is an Enum of type [REF_TYPE][androguard.core.analysis.analysis.REF_TYPE]),\n        the second one is the method called ([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis])\n        and the third the offset in the method where the call is originating.\n\n        Examples:\n\n            >>> # dx is an Analysis object\n            >>> for cls in dx.find_classes('.*some/name.*'):\n            >>>     print(\"Found class {} in Analysis\".format(cls.name)\n            >>>     for calling, refs in cls.get_xref_from().items():\n            >>>         print(\"  calling class {}\".format(calling.name))\n            >>>         for ref_kind, ref_method, ref_offset in refs:\n            >>>             print(\"    calling method {} {}\".format(ref_kind, ref_method))\n\n        :returns: `xrefto`, a dictionary of all classes which are called by the current class\n        \"\"\"\n        return self.xrefto\n\n    def add_xref_new_instance(\n        self, methobj: MethodAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        Add a crossreference to another method that is\n        instancing this class.\n\n        :param methobj: The `MethodAnalysis` that this class calls\n        :param offset: integer where in the method the instantiation happens\n        \"\"\"\n        self.xrefnewinstance.add((methobj, offset))\n\n    def get_xref_new_instance(self) -> list[tuple[MethodAnalysis, int]]:\n        \"\"\"\n        Returns a list of tuples containing the set of methods\n        with offsets that instance this class\n\n\n        The list of tuples has the form:\n        ([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis],\n        `int`)\n\n        :returns: the list of tuples\n        \"\"\"\n        return self.xrefnewinstance\n\n    def add_xref_const_class(\n        self, methobj: MethodAnalysis, offset: int\n    ) -> None:\n        \"\"\"\n        Add a crossreference to a method referencing this classtype.\n\n        :param methobj: The `MethodAnalysis` that this class calls\n        :param offset: integer where in the method the classtype is referenced\n        \"\"\"\n        self.xrefconstclass.add((methobj, offset))\n\n    def get_xref_const_class(self) -> list[tuple[MethodAnalysis, int]]:\n        \"\"\"\n        Returns a list of tuples containing the method and offset\n        referencing this classtype.\n\n        The list of tuples has the form:\n        ([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis],\n        `int`)\n\n        :returns: the list of tuples\n        \"\"\"\n        return self.xrefconstclass\n\n    def get_vm_class(self) -> Union[dex.ClassDefItem, ExternalClass]:\n        \"\"\"\n        Returns the original Dalvik VM class or the external class object.\n\n        :returns: the `dex.ClassDefItem` or `ExternalClass`\n        \"\"\"\n        return self.orig_class\n\n    def set_restriction_flag(\n        self, flag: dex.HiddenApiClassDataItem.RestrictionApiFlag\n    ) -> None:\n        \"\"\"\n        Set the level of restriction for this class (hidden level, from Android 10)\n        (only applicable to internal classes)\n\n        :param flag: The flag to set to\n        \"\"\"\n        if self.is_external():\n            raise RuntimeError(\n                \"Can\\'t set restriction flag for external class: %s\"\n                % (self.orig_class.name,)\n            )\n        self.restriction_flag = flag\n\n    def set_domain_flag(\n        self, flag: dex.HiddenApiClassDataItem.DomapiApiFlag\n    ) -> None:\n        \"\"\"\n        Set the api domain for this class (hidden level, from Android 10)\n        (only applicable to internal classes)\n\n        :param flag: The flag to set to\n        \"\"\"\n        if self.is_external():\n            raise RuntimeError(\n                \"Can\\'t set domain flag for external class: %s\"\n                % (self.orig_class.name,)\n            )\n        self.domain_flag = flag\n\n    # Alias\n    get_class = get_vm_class\n\n    def __repr__(self):\n        return \"<analysis.ClassAnalysis {}{}>\".format(\n            self.orig_class.get_name(),\n            \" EXTERNAL\" if isinstance(self.orig_class, ExternalClass) else \"\",\n        )\n\n    def __str__(self):\n        # Print only instantiation from other classes here\n        # TODO also method xref and field xref should be printed?\n        data = \"XREFto for %s\\n\" % self.orig_class\n        for ref_class in self.xrefto:\n            data += str(ref_class.get_vm_class().get_name()) + \" \"\n            data += \"in\\n\"\n            for ref_kind, ref_method, ref_offset in self.xrefto[ref_class]:\n                data += \"%d %s 0x%x\\n\" % (ref_kind, ref_method, ref_offset)\n\n            data += \"\\n\"\n\n        data += \"XREFFrom for %s\\n\" % self.orig_class\n        for ref_class in self.xreffrom:\n            data += str(ref_class.get_vm_class().get_name()) + \" \"\n            data += \"in\\n\"\n            for ref_kind, ref_method, ref_offset in self.xreffrom[ref_class]:\n                data += \"%d %s 0x%x\\n\" % (ref_kind, ref_method, ref_offset)\n\n            data += \"\\n\"\n\n        return data\n\n\nclass Analysis:\n    \"\"\"\n    Analysis Object\n\n    The Analysis contains a lot of information about (multiple) DEX objects\n    Features are for example XREFs between Classes, Methods, Fields and Strings.\n    Yet another part is the creation of BasicBlocks, which is important in the usage of\n    the Androguard Decompiler.\n\n    Multiple DEX Objects can be added using the function [add][androguard.core.analysis.analysis.Analysis.add].\n\n    XREFs are created for:\n\n    * classes ([ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis])\n    \n    * methods ([MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis])\n    \n    * strings ([StringAnalysis][androguard.core.analysis.analysis.StringAnalysis])\n    \n    * fields ([FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis])\n\n    The Analysis should be the only object you are using next to the [APK][androguard.core.apk.APK].\n    It encapsulates all the Dalvik related functions into a single place, while you have still the ability to use\n    the functions from [DEX][androguard.core.dex.DEX] and the related classes.\n\n    \"\"\"\n\n    def __init__(self, vm: Union[dex.DEX, None] = None) -> None:\n        \"\"\"Initialize a new [Analysis][androguard.core.analysis.analysis.Analysis] object\n        \n        :param vm: inital DEX object (default None)\n        \"\"\"\n        # Contains DEX objects\n        self.vms = []\n        # A dict of {classname: ClassAnalysis}, populated on add(vm)\n        self.classes = dict()\n        # A dict of {string: StringAnalysis}, populated on add(vm) and create_xref()\n        self.strings = dict()\n        # A dict of {EncodedMethod: MethodAnalysis}, populated on add(vm)\n        self.methods = dict()\n\n        # Used to quickly look up methods\n        self.__method_hashes = dict()\n\n        if vm:\n            self.add(vm)\n\n        self.__created_xrefs = False\n\n    @property\n    def fields(self) -> Iterator[FieldAnalysis]:\n        \"\"\"Returns [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] generator of this `Analysis`\n        \n        :returns: iterator of `FieldAnalysis` objects\n        \"\"\"\n        return self.get_fields()\n\n    def add(self, vm: dex.DEX) -> None:\n        \"\"\"\n        Add a DEX to this Analysis.\n\n        :param vm: `dex.DEX` to add to this Analysis\n        \"\"\"\n\n        self.vms.append(vm)\n\n        logger.info(\"Adding DEX file version {}\".format(vm.version))\n\n        # TODO: This step can easily be multithreaded, as there is no dependency between the objects at this stage\n        tic = time.time()\n        for i, current_class in enumerate(vm.get_classes()):\n            # seed ClassAnalysis objects into classes attribute and add as new class\n            self.classes[current_class.get_name()] = ClassAnalysis(\n                current_class\n            )\n            new_class = self.classes[current_class.get_name()]\n\n            # Fix up the hidden api annotations (Android 10)\n            hidden_api = vm.get_hidden_api()\n            if hidden_api:\n                rf, df = hidden_api.get_flags(i)\n                new_class.set_restriction_flag(rf)\n                new_class.set_domain_flag(df)\n\n            # seed MethodAnalysis objects into methods attribute and add to new class analysis\n            for method in current_class.get_methods():\n                self.methods[method] = MethodAnalysis(vm, method)\n                new_class.add_method(self.methods[method])\n\n                # Store for faster lookup during create_xrefs\n                m_hash = (\n                    current_class.get_name(),\n                    method.get_name(),\n                    str(method.get_descriptor()),\n                )\n                self.__method_hashes[m_hash] = self.methods[method]\n\n            # seed FieldAnalysis objects into to new class analysis\n            # since we access methods through a class property,\n            # which returns what's within a ClassAnalysis\n            # we don't have to track it internally in this class\n            for field in current_class.get_fields():\n                new_class.add_field(FieldAnalysis(field))\n\n        # seed StringAnalysis objects into strings attribute - connect alter using xrefs\n        for string_value in vm.get_strings():\n            self.strings[string_value] = StringAnalysis(string_value)\n\n        logger.info(\n            \"Added DEX in the analysis took : {:0d}min {:02d}s\".format(\n                *divmod(int(time.time() - tic), 60)\n            )\n        )\n\n    def create_xref(self) -> None:\n        \"\"\"\n        Create Class, Method, String and Field crossreferences\n        for all classes in the Analysis.\n\n        If you are using multiple DEX files, this function must\n        be called when all DEX files are added.\n        If you call the function after every DEX file, it will only work\n        for the first time.\n        \"\"\"\n        if self.__created_xrefs:\n            # TODO on concurrent runs, we probably need to clean up first,\n            # or check that we do not write garbage.\n            logger.error(\n                \"You have requested to run create_xref() twice! \"\n                \"This will not work and cause problems! This function will exit right now. \"\n                \"If you want to add multiple DEX files, use add() several times and then run create_xref() once.\"\n            )\n            return\n\n        self.__created_xrefs = True\n        logger.debug(\"Creating Crossreferences (XREF)\")\n        tic = time.time()\n\n        # TODO multiprocessing\n        # One reason why multiprocessing is hard to implement is the creation of\n        # the external classes and methods. This must be synchronized, which is now possible as we have a single method!\n        for vm in self.vms:\n            for current_class in vm.get_classes():\n                self._create_xref(current_class)\n\n        # TODO: After we collected all the information, we should add field and\n        # string xrefs to each MethodAnalysis\n\n        logger.info(\n            \"End of creating cross references (XREF) \"\n            \"run time: {:0d}min {:02d}s\".format(\n                *divmod(int(time.time() - tic), 60)\n            )\n        )\n\n    def _create_xref(self, current_class: dex.ClassDefItem) -> None:\n        \"\"\"\n        Create the xref for `current_class`\n\n        There are four steps involved in getting the xrefs:\n        * Xrefs for class instantiation and static class usage\n        *       for method calls\n        *       for string usage\n        *       for field manipulation\n\n        All these information are stored in the *Analysis Objects.\n\n        Note that this might be quite slow, as all instructions are parsed.\n\n        :param current_class: The class to create xrefs for\n        \"\"\"\n        cur_cls_name = current_class.get_name()\n\n        logger.debug(\n            \"Creating XREF/DREF for class at @0x{:08x}\".format(\n                current_class.get_class_data_off()\n            )\n        )\n        for current_method in current_class.get_methods():\n            logger.debug(\n                \"Creating XREF for method at @0x{:08x}\".format(\n                    current_method.get_code_off()\n                )\n            )\n\n            cur_meth = self.get_method(current_method)\n            cur_cls = self.classes[cur_cls_name]\n\n            for off, instruction in current_method.get_instructions_idx():\n                op_value = instruction.get_op_value()\n\n                # 1) check for class calls: const-class (0x1c), new-instance (0x22)\n                if op_value in [0x1C, 0x22]:\n                    idx_type = instruction.get_ref_kind()\n                    # type_info is the string like 'Ljava/lang/Object;'\n                    type_info = instruction.cm.vm.get_cm_type(idx_type).lstrip(\n                        '['\n                    )\n                    if type_info[0] != 'L':\n                        # Need to make sure, that we get class types and not other types\n                        continue\n\n                    if type_info == cur_cls_name:\n                        # FIXME: effectively ignoring calls to itself - do we want that?\n                        continue\n\n                    if type_info not in self.classes:\n                        # Create new external class\n                        self.classes[type_info] = ClassAnalysis(\n                            ExternalClass(type_info)\n                        )\n\n                    oth_cls = self.classes[type_info]\n\n                    # FIXME: xref_to does not work here! current_method is wrong, as it is not the target!\n                    # In this case that means, that current_method calls the class oth_class.\n                    # Hence, on xref_to the method info is the calling method not the called one,\n                    # as there is no called method!\n                    # With the _new_instance and _const_class can this be deprecated?\n                    # Removing these does not impact tests\n                    cur_cls.add_xref_to(\n                        REF_TYPE(op_value), oth_cls, cur_meth, off\n                    )\n                    oth_cls.add_xref_from(\n                        REF_TYPE(op_value), cur_cls, cur_meth, off\n                    )\n\n                    if op_value == 0x1C:\n                        cur_meth.add_xref_const_class(oth_cls, off)\n                        oth_cls.add_xref_const_class(cur_meth, off)\n                    if op_value == 0x22:\n                        cur_meth.add_xref_new_instance(oth_cls, off)\n                        oth_cls.add_xref_new_instance(cur_meth, off)\n\n                # 2) check for method calls: invoke-* (0x6e ... 0x72), invoke-xxx/range (0x74 ... 0x78)\n                elif (0x6E <= op_value <= 0x72) or (0x74 <= op_value <= 0x78):\n                    idx_meth = instruction.get_ref_kind()\n                    method_info = instruction.cm.vm.get_cm_method(idx_meth)\n                    if not method_info:\n                        logger.warning(\n                            \"Could not get method_info \"\n                            \"for instruction at {} in method at @{}. \"\n                            \"Requested IDX {}\".format(\n                                off, current_method.get_code_off(), idx_meth\n                            )\n                        )\n                        continue\n\n                    class_info = method_info[0].lstrip('[')\n                    if class_info[0] != 'L':\n                        # Need to make sure, that we get class types and not other types\n                        # If another type, like int is used, we simply skip it.\n                        continue\n\n                    # Resolve the second MethodAnalysis\n                    oth_meth = self._resolve_method(\n                        class_info, method_info[1], method_info[2]\n                    )\n\n                    oth_cls = self.classes[class_info]\n\n                    # FIXME: we could merge add_method_xref_* and add_xref_*\n                    cur_cls.add_method_xref_to(\n                        cur_meth, oth_cls, oth_meth, off\n                    )\n                    oth_cls.add_method_xref_from(\n                        oth_meth, cur_cls, cur_meth, off\n                    )\n                    # Internal xref related to class manipulation\n                    cur_cls.add_xref_to(\n                        REF_TYPE(op_value), oth_cls, oth_meth, off\n                    )\n                    oth_cls.add_xref_from(\n                        REF_TYPE(op_value), cur_cls, cur_meth, off\n                    )\n\n                # 3) check for string usage: const-string (0x1a), const-string/jumbo (0x1b)\n                elif 0x1A <= op_value <= 0x1B:\n                    string_value = instruction.cm.vm.get_cm_string(\n                        instruction.get_ref_kind()\n                    )\n                    if string_value not in self.strings:\n                        self.strings[string_value] = StringAnalysis(\n                            string_value\n                        )\n\n                    self.strings[string_value].add_xref_from(\n                        cur_cls, cur_meth, off\n                    )\n\n                # TODO maybe we should add a step 3a) here and check for all const fields. You can then xref for integers etc!\n                # But: This does not work, as const fields are usually optimized internally to const calls...\n\n                # 4) check for field usage: i*op (0x52 ... 0x5f), s*op (0x60 ... 0x6d)\n                elif 0x52 <= op_value <= 0x6D:\n                    idx_field = instruction.get_ref_kind()\n                    field_info = instruction.cm.vm.get_cm_field(idx_field)\n                    field_item = (\n                        instruction.cm.vm.get_encoded_field_descriptor(\n                            field_info[0], field_info[2], field_info[1]\n                        )\n                    )\n                    if not field_item:\n                        continue\n\n                    if (0x52 <= op_value <= 0x58) or (\n                        0x60 <= op_value <= 0x66\n                    ):\n                        # read access to a field\n                        self.classes[cur_cls_name].add_field_xref_read(\n                            cur_meth, cur_cls, field_item, off\n                        )\n                        cur_meth.add_xref_read(cur_cls, field_item, off)\n                    else:\n                        # write access to a field\n                        self.classes[cur_cls_name].add_field_xref_write(\n                            cur_meth, cur_cls, field_item, off\n                        )\n                        cur_meth.add_xref_write(cur_cls, field_item, off)\n\n    def get_method(\n        self, method: dex.EncodedMethod\n    ) -> Union[MethodAnalysis, None]:\n        \"\"\"\n        Get the [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] object for a given [EncodedMethod][androguard.core.dex.EncodedMethod].\n        This Analysis object is used to enhance `EncodedMethods`.\n\n        :param method: `EncodedMethod` to search for\n        :returns: `MethodAnalysis` object for the given method, or None if method was not found\n        \"\"\"\n        if method in self.methods:\n            return self.methods[method]\n        return None\n\n    # Alias\n    get_method_analysis = get_method\n\n    def _resolve_method(\n        self, class_name: str, method_name: str, method_descriptor: list[str]\n    ) -> MethodAnalysis:\n        \"\"\"\n        Resolves the Method and returns [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis].\n        Will automatically create [ExternalMethods][androguard.core.analysis.analysis.ExternalMethod] if can not resolve and add to the ClassAnalysis etc\n\n        :param class_name:\n        :param method_name:\n        :param method_descriptor: Tuple which has parameters and return type, i.e. `['(I Z)', 'V']`\n        :returns: the `MethodAnalysis`\n        \"\"\"\n        m_hash = (class_name, method_name, ''.join(method_descriptor))\n        if m_hash not in self.__method_hashes:\n            # Need to create a new method\n            if class_name not in self.classes:\n                # External class? no problem!\n                self.classes[class_name] = ClassAnalysis(\n                    ExternalClass(class_name)\n                )\n\n            # Create external method\n            meth = ExternalMethod(\n                class_name, method_name, ''.join(method_descriptor)\n            )\n            meth_analysis = MethodAnalysis(None, meth)\n\n            # add to all the collections we have\n            self.__method_hashes[m_hash] = meth_analysis\n            self.classes[class_name].add_method(meth_analysis)\n            self.methods[meth] = meth_analysis\n\n        return self.__method_hashes[m_hash]\n\n    def get_method_by_name(\n        self, class_name: str, method_name: str, method_descriptor: str\n    ) -> Union[dex.EncodedMethod, None]:\n        \"\"\"\n        Search for a [EncodedMethod][androguard.core.dex.EncodedMethod] in all classes in this analysis\n\n        :param class_name: name of the class, for example `'Ljava/lang/Object;'`\n        :param method_name: name of the method, for example `'onCreate'`\n        :param method_descriptor: descriptor, for example `'(I I Ljava/lang/String)V'`\n        :returns: `EncodedMethod` or None if method was not found\n        \"\"\"\n        m_a = self.get_method_analysis_by_name(\n            class_name, method_name, method_descriptor\n        )\n        if m_a and not m_a.is_external():\n            return m_a.get_method()\n        return None\n\n    def get_method_analysis_by_name(\n        self, class_name: str, method_name: str, method_descriptor: str\n    ) -> Union[MethodAnalysis, None]:\n        \"\"\"\n        Returns the crossreferencing object for a given method.\n\n        This function is similar to [get_method_analysis][androguard.core.analysis.analysis.ClassAnalysis.get_method_analysis], with the difference\n        that you can look up the Method by name\n\n        :param class_name: name of the class, for example `'Ljava/lang/Object;'`\n        :param method_name: name of the method, for example `'onCreate'`\n        :param method_descriptor: method descriptor, for example `'(I I)V'`\n        :returns: `MethodAnalysis`\n        \"\"\"\n        m_hash = (class_name, method_name, method_descriptor)\n        if m_hash not in self.__method_hashes:\n            return None\n        return self.__method_hashes[m_hash]\n\n    def get_field_analysis(\n        self, field: dex.EncodedField\n    ) -> Union[FieldAnalysis, None]:\n        \"\"\"\n        Get the [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis] for a given [EncodedField][androguard.core.dex.EncodedField]\n\n        :param field: the `EncodedField`\n        :returns: the `FieldAnalysis`\n        \"\"\"\n        class_analysis = self.get_class_analysis(field.get_class_name())\n        if class_analysis:\n            return class_analysis.get_field_analysis(field)\n        return None\n\n    def is_class_present(self, class_name: str) -> bool:\n        \"\"\"\n        Checks if a given class name is part of this Analysis.\n\n        :param class_name: classname like 'Ljava/lang/Object;' (including L and ;)\n        :returns: True if class was found, False otherwise\n        \"\"\"\n        return class_name in self.classes\n\n    def get_class_analysis(self, class_name: str) -> ClassAnalysis:\n        \"\"\"\n        Returns the [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] object for a given classname.\n\n        :param class_name: classname like `'Ljava/lang/Object;'` (including L and ;)\n        :returns: `ClassAnalysis`\n        \"\"\"\n        return self.classes.get(class_name)\n\n    def get_external_classes(self) -> Iterator[ClassAnalysis]:\n        \"\"\"\n        Returns all external classes, that means all classes that are not\n        defined in the given set of [DEX][androguard.core.dex.DEX].\n\n        :returns: the external classes\n        \"\"\"\n        for cls in self.classes.values():\n            if cls.is_external():\n                yield cls\n\n    def get_internal_classes(self) -> Iterator[ClassAnalysis]:\n        \"\"\"\n        Returns all internal classes, that means all classes that are\n        defined in the given set of [DEX][androguard.core.dex.DEX].\n\n        :returns: the internal classes\n        \"\"\"\n        for cls in self.classes.values():\n            if not cls.is_external():\n                yield cls\n\n    def get_internal_methods(self) -> Iterator[MethodAnalysis]:\n        \"\"\"\n        Returns all internal methods, that means all methods that are\n        defined in the given set of [DEX][androguard.core.dex.DEX].\n\n        :returns: the internal methods\n        \"\"\"\n        for m in self.methods.values():\n            if not m.is_external():\n                yield m\n\n    def get_external_methods(self) -> Iterator[MethodAnalysis]:\n        \"\"\"\n        Returns all external methods, that means all methods that are not\n        defined in the given set of [DEX][androguard.core.dex.DEX].\n\n        :returns: the external methods\n        \"\"\"\n        for m in self.methods.values():\n            if m.is_external():\n                yield m\n\n    def get_strings_analysis(self) -> dict[str, StringAnalysis]:\n        \"\"\"\n        Returns a dictionary of strings and their corresponding [StringAnalysis][androguard.core.analysis.analysis.StringAnalysis]\n\n        :returns: the dictionary of strings\n        \"\"\"\n        return self.strings\n\n    def get_strings(self) -> list[StringAnalysis]:\n        \"\"\"\n        Returns a list of [StringAnalysis][androguard.core.analysis.analysis.StringAnalysis] objects\n\n        :returns: list of `StringAnalysis objects\n        \"\"\"\n        return self.strings.values()\n\n    def get_classes(self) -> list[ClassAnalysis]:\n        \"\"\"\n        Returns a list of [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] objects\n\n        Returns both internal and external classes (if any)\n\n        :returns: list of `ClassAnalysis` objects\n        \"\"\"\n        return self.classes.values()\n\n    def get_methods(self) -> Iterator[MethodAnalysis]:\n        \"\"\"\n        Returns a generator of [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] objects\n\n        :returns: generator of `MethodAnalysis` objects\n\n        \"\"\"\n        yield from self.methods.values()\n\n    def get_fields(self) -> Iterator[FieldAnalysis]:\n        \"\"\"\n        Returns a generator of [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis]  objects\n\n        :returns: generator of `FieldAnalysis` objects\n        \"\"\"\n        for c in self.classes.values():\n            for f in c.get_fields():\n                yield f\n\n    def find_classes(\n        self, name: str = \".*\", no_external: bool = False\n    ) -> Iterator[ClassAnalysis]:\n        \"\"\"\n        Find classes by name, using regular expression\n        This method will return all [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis] Object that match the name of\n        the class.\n\n        :param name: regular expression for class name (default \".*\")\n        :param no_external: Remove external classes from the output (default False)\n        :returns: generator of `ClassAnalysis` objects\n        \"\"\"\n        for cname, c in self.classes.items():\n            if no_external and isinstance(c.get_vm_class(), ExternalClass):\n                continue\n            if re.match(name, cname):\n                yield c\n\n    def find_methods(\n        self,\n        classname: str = \".*\",\n        methodname: str = \".*\",\n        descriptor: str = \".*\",\n        accessflags: str = \".*\",\n        no_external: bool = False,\n    ) -> Iterator[MethodAnalysis]:\n        \"\"\"\n        Find a method by name using regular expression.\n        This method will return all [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis] objects, which match the\n        classname, methodname, descriptor and accessflags of the method.\n\n        :param classname: regular expression for the classname\n        :param methodname: regular expression for the method name\n        :param descriptor: regular expression for the descriptor\n        :param accessflags: regular expression for the accessflags\n        :param no_external: Remove external method from the output (default False)\n        :returns: generator of `MethodAnalysis` objects\n        \"\"\"\n        for cname, c in self.classes.items():\n            if re.match(classname, cname):\n                for m in c.get_methods():\n                    z = m.get_method()\n\n                    # TODO is it even possible that an internal class has\n                    # external methods? Maybe we should check for ExternalClass\n                    # instead...\n                    # Above: Yes, it is possible.  Internal classes that inherit from\n                    # an External class and call inherited methods will show as\n                    # external calls\n                    if no_external and isinstance(z, ExternalMethod):\n                        continue\n                    if (\n                        re.match(methodname, z.get_name())\n                        and re.match(descriptor, z.get_descriptor())\n                        and re.match(accessflags, z.get_access_flags_string())\n                    ):\n                        yield m\n\n    def find_strings(self, string: str = \".*\") -> Iterator[StringAnalysis]:\n        \"\"\"\n        Find strings by regex\n\n        :param string: regular expression for the string to search for\n        :returns: generator of `StringAnalysis` objects\n        \"\"\"\n        for s, sa in self.strings.items():\n            if re.match(string, s):\n                yield sa\n\n    def find_fields(\n        self,\n        classname: str = \".*\",\n        fieldname: str = \".*\",\n        fieldtype: str = \".*\",\n        accessflags: str = \".*\",\n    ) -> Iterator[FieldAnalysis]:\n        \"\"\"\n        find fields by regex\n\n        :param classname: regular expression of the classname\n        :param fieldname: regular expression of the fieldname\n        :param fieldtype: regular expression of the fieldtype\n        :param accessflags: regular expression of the access flags\n        :returns: generator of `FieldAnalysis`\n        \"\"\"\n        for cname, c in self.classes.items():\n            if re.match(classname, cname):\n                for f in c.get_fields():\n                    z = f.get_field()\n                    if (\n                        re.match(fieldname, z.get_name())\n                        and re.match(fieldtype, z.get_descriptor())\n                        and re.match(accessflags, z.get_access_flags_string())\n                    ):\n                        yield f\n\n    def __repr__(self):\n        return \"<analysis.Analysis VMs: {}, Classes: {}, Methods: {}, Strings: {}>\".format(\n            len(self.vms),\n            len(self.classes),\n            len(self.methods),\n            len(self.strings),\n        )\n\n    def get_call_graph(\n        self,\n        classname: str = \".*\",\n        methodname: str = \".*\",\n        descriptor: str = \".*\",\n        accessflags: str = \".*\",\n        no_isolated: bool = False,\n        entry_points: list = [],\n    ) -> nx.DiGraph:\n        \"\"\"\n        Generate a directed graph based on the methods found by the filters applied.\n        The filters are the same as in [find_methods][androguard.core.analysis.analysis.Analysis.find_methods]\n\n        A `networkx.DiGraph` is returned, containing all edges only once!\n        that means, if a method calls some method twice or more often, there will\n        only be a single connection.\n\n        :param classname: regular expression of the classname (default: \".*\")\n        :param methodname: regular expression of the methodname (default: \".*\")\n        :param descriptor: regular expression of the descriptor (default: \".*\")\n        :param accessflags: regular expression of the access flags (default: \".*\")\n        :param no_isolated: remove isolated nodes from the graph, e.g. methods which do not call anything (default: `False`)\n        :param entry_points: A list of classes that are marked as entry point\n\n        :returns: the `DiGraph` object\n        \"\"\"\n\n        def _add_node(G, method, _entry_points):\n            \"\"\"\n            Wrapper to add methods to a graph\n            \"\"\"\n            if method not in G:\n                if isinstance(method, ExternalMethod):\n                    is_external = True\n                else:\n                    is_external = False\n\n                if method.get_class_name() in _entry_points:\n                    is_entry_point = True\n                else:\n                    is_entry_point = False\n\n                G.add_node(\n                    method,\n                    external=is_external,\n                    entrypoint=is_entry_point,\n                    methodname=method.get_name(),\n                    descriptor=method.get_descriptor(),\n                    accessflags=method.get_access_flags_string(),\n                    classname=method.get_class_name(),\n                )\n\n        CG = nx.DiGraph()\n\n        # Note: If you create the CG from many classes at the same time, the drawing\n        # will be a total mess...\n        for m in self.find_methods(\n            classname=classname,\n            methodname=methodname,\n            descriptor=descriptor,\n            accessflags=accessflags,\n        ):\n\n            orig_method = m.get_method()\n            logger.info(\"Found Method --> {}\".format(orig_method))\n\n            if no_isolated and len(m.get_xref_to()) == 0:\n                logger.info(\n                    \"Skipped {}, because if has no xrefs\".format(orig_method)\n                )\n                continue\n\n            _add_node(CG, orig_method, entry_points)\n\n            for callee_class, callee_method, offset in m.get_xref_to():\n                _add_node(CG, callee_method.method, entry_points)\n\n                # As this is a DiGraph and we are not interested in duplicate edges,\n                # check if the edge is already in the edge set.\n                # If you need all calls, you probably want to check out MultiDiGraph\n                if not CG.has_edge(orig_method, callee_method.method):\n                    CG.add_edge(orig_method, callee_method.method)\n\n        return CG\n\n    def create_ipython_exports(self) -> None:\n        \"\"\"\n        WARNING: this feature is experimental and is currently not enabled by default! Use with caution!\n\n        Creates attributes for all classes, methods and fields on the `Analysis` object itself.\n        This makes it easier to work with `Analysis` module in an iPython shell.\n\n        Classes can be search by typing `dx.CLASS_<tab>`, as each class is added via this attribute name.\n        Each class will have all methods attached to it via `dx.CLASS_Foobar.METHOD_<tab>`.\n        Fields have a similar syntax: `dx.CLASS_Foobar.FIELD_<tab>`.\n\n        As Strings can contain nearly anything, use [find_strings][androguard.core.analysis.analysis.Analysis.find_strings] instead.\n\n        * Each `CLASS_` item will return a [ClassAnalysis][androguard.core.analysis.analysis.ClassAnalysis]\n        * Each `METHOD_` item will return a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis]\n        * Each `FIELD_` item will return a [FieldAnalysis][androguard.core.analysis.analysis.FieldAnalysis]\n        \"\"\"\n        # TODO: it would be fun to have the classes organized like the packages. I.e. you could do dx.CLASS_xx.yyy.zzz\n        for cls in self.get_classes():\n            name = \"CLASS_\" + bytecode.FormatClassToPython(cls.name)\n            if hasattr(self, name):\n                logger.warning(\"Already existing class {}!\".format(name))\n            setattr(self, name, cls)\n\n            for meth in cls.get_methods():\n                method_name = meth.name\n                if method_name in [\"<init>\", \"<clinit>\"]:\n                    _, method_name = bytecode.get_package_class_name(cls.name)\n\n                # FIXME this naming schema is not very good... but to describe a method uniquely, we need all of it\n                mname = (\n                    \"METH_\"\n                    + method_name\n                    + \"_\"\n                    + bytecode.FormatDescriptorToPython(meth.access)\n                    + \"_\"\n                    + bytecode.FormatDescriptorToPython(meth.descriptor)\n                )\n                if hasattr(cls, mname):\n                    logger.warning(\n                        \"already existing method: {} at class {}\".format(\n                            mname, name\n                        )\n                    )\n                setattr(cls, mname, meth)\n\n            # FIXME: syntetic classes produce problems here.\n            # If the field name is the same in the parent as in the syntetic one, we can only add one!\n            for field in cls.get_fields():\n                mname = \"FIELD_\" + bytecode.FormatNameToPython(field.name)\n                if hasattr(cls, mname):\n                    logger.warning(\n                        \"already existing field: {} at class {}\".format(\n                            mname, name\n                        )\n                    )\n                setattr(cls, mname, field)\n\n    def get_permissions(\n        self, apilevel: Union[str, int, None] = None\n    ) -> Iterator[MethodAnalysis, list[str]]:\n        \"\"\"\n        Returns the permissions and the API method based on the API level specified.\n        This can be used to find usage of API methods which require a permission.\n        Should be used in combination with an [APK][androguard.core.apk.APK]\n\n        The returned permissions are a list, as some API methods require multiple permissions at once.\n\n        The following example shows the usage and how to get the calling methods using XREF:\n\n        Examples: \n\n            >>> from androguard.misc import AnalyzeAPK\n            >>> a, d, dx = AnalyzeAPK(\"somefile.apk\")\n\n            >>> for meth, perm in dx.get_permissions(a.get_effective_target_sdk_version()):\n            >>>     print(\"Using API method {} for permission {}\".format(meth, perm))\n            >>>     print(\"used in:\")\n            >>>     for _, m, _ in meth.get_xref_from():\n            >>>         print(m.full_name)\n\n        .Note:\n            This method might be unreliable and might not extract all used permissions.\n            The permission mapping is based on [Axplorer](https://github.com/reddr/axplorer)\n            and might be incomplete due to the nature of the extraction process.\n            Unfortunately, there is no official API<->Permission mapping.\n\n            The output of this method relies also on the set API level.\n            If the wrong API level is used, the results might be wrong.\n\n        :param apilevel: API level to load, or None for default\n        :returns: yields tuples of `MethodAnalysis` (of the API method) and list of permission string\n        \"\"\"\n\n        # TODO maybe have the API level loading in the __init__ method and pass the APK as well?\n        permmap = load_api_specific_resource_module(\n            'api_permission_mappings', apilevel\n        )\n        if not permmap:\n            raise ValueError(\n                \"No permission mapping found! Is one available? \"\n                \"The requested API level was '{}'\".format(apilevel)\n            )\n\n        for cls in self.get_external_classes():\n            for meth_analysis in cls.get_methods():\n                meth = meth_analysis.get_method()\n                if meth.permission_api_name in permmap:\n                    yield meth_analysis, permmap[meth.permission_api_name]\n\n    def get_permission_usage(\n        self, permission: str, apilevel: Union[str, int, None] = None\n    ) -> Iterator[MethodAnalysis]:\n        \"\"\"\n        Find the usage of a permission inside the Analysis.\n\n        Examples:\n\n            >>> from androguard.misc import AnalyzeAPK\n            >>> a, d, dx = AnalyzeAPK(\"somefile.apk\")\n\n            >>> for meth in dx.get_permission_usage('android.permission.SEND_SMS', a.get_effective_target_sdk_version()):\n            >>>     print(\"Using API method {}\".format(meth))\n            >>>     print(\"used in:\")\n            >>>     for _, m, _ in meth.get_xref_from():\n            >>>         print(m.full_name)\n\n        The permission mappings might be incomplete! See also  [get_permissions][androguard.core.analysis.analysis.Analysis.get_permissions].\n\n        :param permission: the name of the android permission (usually 'android.permission.XXX')\n        :param apilevel: the requested API level or None for default\n        :returns: yields `MethodAnalysis` objects for all using API methods\n        \"\"\"\n\n        # TODO maybe have the API level loading in the __init__ method and pass the APK as well?\n        permmap = load_api_specific_resource_module(\n            'api_permission_mappings', apilevel\n        )\n        if not permmap:\n            raise ValueError(\n                \"No permission mapping found! Is one available? \"\n                \"The requested API level was '{}'\".format(apilevel)\n            )\n\n        apis = {k for k, v in permmap.items() if permission in v}\n        if not apis:\n            raise ValueError(\n                \"No API methods could be found which use the permission. \"\n                \"Does the permission exists? You requested: '{}'\".format(\n                    permission\n                )\n            )\n\n        for cls in self.get_external_classes():\n            for meth_analysis in cls.get_methods():\n                meth = meth_analysis.get_method()\n                if meth.permission_api_name in apis:\n                    yield meth_analysis\n\n    def get_android_api_usage(self) -> Iterator[MethodAnalysis]:\n        \"\"\"\n        Get all usage of the Android APIs inside the `Analysis`.\n\n        :returns: yields `MethodAnalysis` objects for all Android APIs methods\n        \"\"\"\n\n        for cls in self.get_external_classes():\n            for meth_analysis in cls.get_methods():\n                if meth_analysis.is_android_api():\n                    yield meth_analysis\n\n\ndef is_ascii_obfuscation(vm: dex.DEX) -> bool:\n    \"\"\"\n    Tests if any class inside a [DEX][androguard.core.dex.DEX]\n    uses ASCII Obfuscation (e.g. UTF-8 Chars in Classnames)\n\n    :param vm: `DEX`\n    :returns: `True` if ascii obfuscation otherwise `False`\n    \"\"\"\n    for classe in vm.get_classes():\n        if is_ascii_problem(classe.get_name()):\n            return True\n        for method in classe.get_methods():\n            if is_ascii_problem(method.get_name()):\n                return True\n    return False\n"
  },
  {
    "path": "libs/androguard/core/androconf.py",
    "content": "# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nimport os\nimport sys\nimport tempfile\nfrom typing import Union\n\nfrom androguard import __version__\nfrom androguard.core.api_specific_resources import (\n    load_permission_mappings,\n    load_permissions,\n)\n\nANDROGUARD_VERSION = __version__\n\nfrom colorama import Fore, init\nfrom loguru import logger\n\n# initialize colorama, only has an effect on windows\ninit()\n\n\nclass InvalidResourceError(Exception):\n    \"\"\"\n    Invalid Resource Erorr is thrown by [load_api_specific_resource_module][androguard.core.androconf.load_api_specific_resource_module]\n    \"\"\"\n\n    pass\n\n\ndef is_ascii_problem(s: str) -> bool:\n    \"\"\"\n    Test if a string contains other chars than ASCII\n\n    :param s: a string to test\n    :returns: `True` if string contains other chars than ASCII, `False` otherwise\n    \"\"\"\n    try:\n        # As MUTF8Strings are actually bytes, we can simply check if they are ASCII or not\n        s.decode(\"ascii\")\n        return False\n    except (UnicodeEncodeError, UnicodeDecodeError):\n        return True\n\n\ndefault_conf = {\n    ## Configuration for executables used by androguard\n    # Assume the binary is in $PATH, otherwise give full path\n    # Runtime variables\n    #\n    # A path to the temporary directory\n    \"TMP_DIRECTORY\": tempfile.gettempdir(),\n    # Function to print stuff\n    \"PRINT_FCT\": sys.stdout.write,\n    # Default API level, if requested API is not available\n    \"DEFAULT_API\": 16,  # this is the minimal API version we have\n    # Session, for persistence\n    \"SESSION\": None,\n    # Color output configuration\n    \"COLORS\": {\n        \"OFFSET\": Fore.YELLOW,\n        \"OFFSET_ADDR\": Fore.GREEN,\n        \"INSTRUCTION_NAME\": Fore.YELLOW,\n        \"BRANCH_FALSE\": Fore.RED,\n        \"BRANCH_TRUE\": Fore.GREEN,\n        \"BRANCH\": Fore.BLUE,\n        \"EXCEPTION\": Fore.CYAN,\n        \"BB\": Fore.MAGENTA,\n        \"NOTE\": Fore.RED,\n        \"NORMAL\": Fore.RESET,\n        \"OUTPUT\": {\n            \"normal\": Fore.RESET,\n            \"registers\": Fore.YELLOW,\n            \"literal\": Fore.GREEN,\n            \"offset\": Fore.MAGENTA,\n            \"raw\": Fore.RED,\n            \"string\": Fore.RED,\n            \"meth\": Fore.CYAN,\n            \"type\": Fore.BLUE,\n            \"field\": Fore.GREEN,\n        }\n    }\n}\n\n\nclass Configuration:\n    instance = None\n\n    def __init__(self) -> None:\n        \"\"\"\n        A Wrapper for the CONF object\n        This creates a singleton, which has the same attributes everywhere.\n        \"\"\"\n        if not Configuration.instance:\n            Configuration.instance = default_conf\n\n    def __getattr__(self, item):\n        return getattr(self.instance, item)\n\n    def __getitem__(self, item):\n        return self.instance[item]\n\n    def __setitem__(self, key, value):\n        self.instance[key] = value\n\n    def __str__(self):\n        return str(self.instance)\n\n    def __repr__(self):\n        return repr(self.instance)\n\n\nCONF = Configuration()\n\n\ndef is_android(filename: str) -> str:\n    \"\"\"\n    Return the type of the file\n\n    :param filename: the filename\n    :returns: \"APK\", \"DEX\", None\n    \"\"\"\n    if not filename:\n        return None\n\n    with open(filename, \"rb\") as fd:\n        f_bytes = fd.read()\n        return is_android_raw(f_bytes)\n\n\ndef is_android_raw(raw: bytes) -> str:\n    \"\"\"\n    Returns a string that describes the type of file, for common Android\n    specific formats\n\n    :param raw: the file bytes to check\n    :returns: the type of file\n    \"\"\"\n    val = None\n\n    # We do not check for META-INF/MANIFEST.MF,\n    # as you also want to analyze unsigned APKs...\n    # AndroidManifest.xml should be in every APK.\n    # classes.dex and resources.arsc are not required!\n    # if raw[0:2] == b\"PK\" and b'META-INF/MANIFEST.MF' in raw:\n    # TODO this check might be still invalid. A ZIP file with stored APK inside would match as well.\n    # probably it would be better to rewrite this and add more sanity checks.\n    if raw[0:2] == b\"PK\" and b'AndroidManifest.xml' in raw:\n        val = \"APK\"\n        # check out\n    elif raw[0:3] == b\"dex\":\n        val = \"DEX\"\n    elif raw[0:3] == b\"dey\":\n        val = \"DEY\"\n    elif raw[0:4] == b\"\\x03\\x00\\x08\\x00\" or raw[0:4] == b\"\\x00\\x00\\x08\\x00\":\n        val = \"AXML\"\n    elif raw[0:4] == b\"\\x02\\x00\\x0C\\x00\":\n        val = \"ARSC\"\n\n    return val\n\n\ndef rrmdir(directory: str) -> None:\n    \"\"\"\n    Recursively delete a directory\n\n    :param directory: directory to remove\n    \"\"\"\n    for root, dirs, files in os.walk(directory, topdown=False):\n        for name in files:\n            os.remove(os.path.join(root, name))\n        for name in dirs:\n            os.rmdir(os.path.join(root, name))\n    os.rmdir(directory)\n\n\ndef make_color_tuple(color: str) -> tuple[int, int, int]:\n    \"\"\"\n    turn something like `#000000` into `0,0,0`\n    or `#FFFFFF` into `255,255,255`\n    \"\"\"\n    R = color[1:3]\n    G = color[3:5]\n    B = color[5:7]\n\n    R = int(R, 16)\n    G = int(G, 16)\n    B = int(B, 16)\n\n    return R, G, B\n\n\ndef interpolate_tuple(\n    startcolor: tuple[int, int, int],\n    goalcolor: tuple[int, int, int],\n    steps: int,\n) -> list[str]:\n    \"\"\"\n    Take two RGB color sets and mix them over a specified number of steps.  Return the list\n    \"\"\"\n    # white\n\n    R = startcolor[0]\n    G = startcolor[1]\n    B = startcolor[2]\n\n    targetR = goalcolor[0]\n    targetG = goalcolor[1]\n    targetB = goalcolor[2]\n\n    DiffR = targetR - R\n    DiffG = targetG - G\n    DiffB = targetB - B\n\n    buffer = []\n\n    for i in range(0, steps + 1):\n        iR = R + (DiffR * i // steps)\n        iG = G + (DiffG * i // steps)\n        iB = B + (DiffB * i // steps)\n\n        hR = str.replace(hex(iR), \"0x\", \"\")\n        hG = str.replace(hex(iG), \"0x\", \"\")\n        hB = str.replace(hex(iB), \"0x\", \"\")\n\n        if len(hR) == 1:\n            hR = \"0\" + hR\n        if len(hB) == 1:\n            hB = \"0\" + hB\n\n        if len(hG) == 1:\n            hG = \"0\" + hG\n\n        color = str.upper(\"#\" + hR + hG + hB)\n        buffer.append(color)\n\n    return buffer\n\n\ndef color_range(\n    startcolor: tuple[int, int, int],\n    goalcolor: tuple[int, int, int],\n    steps: int,\n) -> list[str]:\n    \"\"\"\n    wrapper for interpolate_tuple that accepts colors as html (`#CCCCC` and such)\n\n    :param startcolor: the start RGB color tuple\n    :param goalcolor: the goal RGB color tuple\n    :param steps: amount of steps\n    :returns: the interpolated RGB tuple\n    \"\"\"\n    start_tuple = make_color_tuple(startcolor)\n    goal_tuple = make_color_tuple(goalcolor)\n\n    return interpolate_tuple(start_tuple, goal_tuple, steps)\n\n\ndef load_api_specific_resource_module(\n    resource_name: str, api: Union[str, int, None] = None\n) -> dict:\n    \"\"\"\n    Load the module from the JSON files and return a dict, which might be empty\n    if the resource could not be loaded.\n\n    If no api version is given, the default one from the CONF dict is used.\n\n    :param resource_name: Name of the resource to load\n    :param api: API version\n    :raises InvalidResourceError: if resource not found\n    :returns: dict\n    \"\"\"\n    loader = dict(\n        aosp_permissions=load_permissions,\n        api_permission_mappings=load_permission_mappings,\n    )\n\n    if resource_name not in loader:\n        raise InvalidResourceError(\n            \"Invalid Resource '{}', not in [{}]\".format(\n                resource_name, \", \".join(loader.keys())\n            )\n        )\n\n    if not api:\n        api = CONF[\"DEFAULT_API\"]\n\n    ret = loader[resource_name](api)\n\n    if ret == {}:\n        # No API mapping found, return default\n        logger.warning(\n            \"API mapping for API level {} was not found! \"\n            \"Returning default, which is API level {}\".format(\n                api, CONF['DEFAULT_API']\n            )\n        )\n        ret = loader[resource_name](CONF['DEFAULT_API'])\n\n    return ret\n"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/__init__.py",
    "content": "import json\nimport os\nimport re\nfrom typing import Union\n\nfrom loguru import logger\n\n\nclass APILevelNotFoundError(Exception):\n    pass\n\n\ndef load_permissions(\n    apilevel: Union[str, int], permtype: str = 'permissions'\n) -> dict[str, dict[str, str]]:\n    \"\"\"\n    Load the Permissions for the given apilevel.\n\n    The permissions lists are generated using this tool: https://github.com/U039b/aosp_permissions_extraction\n\n    Has a fallback to select the maximum or minimal available API level.\n    For example, if 28 is requested but only 26 is available, 26 is returned.\n    If 5 is requested but 16 is available, 16 is returned.\n\n    If an API level is requested which is in between of two API levels we got,\n    the lower level is returned. For example, if 5,6,7,10 is available and 8 is\n    requested, 7 is returned instead.\n\n    :param apilevel:  integer value of the API level\n    :param permtype: either load permissions (`'permissions'`) or\n    permission groups (`'groups'`)\n    :return: a dictionary of {Permission Name: {Permission info}\n    \"\"\"\n\n    if permtype not in ['permissions', 'groups']:\n        raise ValueError(\"The type of permission list is not known.\")\n\n    # Usually apilevel is supplied as string...\n    apilevel = int(apilevel)\n\n    root = os.path.dirname(os.path.realpath(__file__))\n    permissions_file = os.path.join(\n        root, \"aosp_permissions\", \"permissions_{}.json\".format(apilevel)\n    )\n\n    levels = filter(\n        lambda x: re.match(r'^permissions_\\d+\\.json$', x),\n        os.listdir(os.path.join(root, \"aosp_permissions\")),\n    )\n    levels = list(map(lambda x: int(x[:-5].split('_')[1]), levels))\n\n    if not levels:\n        logger.error(\"No Permissions available, can not load!\")\n        return {}\n\n    logger.debug(\n        \"Available API levels: {}\".format(\", \".join(map(str, sorted(levels))))\n    )\n\n    if not os.path.isfile(permissions_file):\n        if apilevel > max(levels):\n            logger.warning(\n                \"Requested API level {} is larger than maximum we have, returning API level {} instead.\".format(\n                    apilevel, max(levels)\n                )\n            )\n            return load_permissions(max(levels), permtype)\n        if apilevel < min(levels):\n            logger.warning(\n                \"Requested API level {} is smaller than minimal we have, returning API level {} instead.\".format(\n                    apilevel, max(levels)\n                )\n            )\n            return load_permissions(min(levels), permtype)\n\n        # Missing level between existing ones, return the lower level\n        lower_level = max(filter(lambda x: x < apilevel, levels))\n        logger.warning(\n            \"Requested API Level could not be found, using {} instead\".format(\n                lower_level\n            )\n        )\n        return load_permissions(lower_level, permtype)\n\n    with open(permissions_file, \"r\") as fp:\n        return json.load(fp)[permtype]\n\n\ndef load_permission_mappings(\n    apilevel: Union[str, int]\n) -> dict[str, list[str]]:\n    \"\"\"\n    Load the API/Permission mapping for the requested API level.\n    If the requetsed level was not found, None is returned.\n\n    :param apilevel: integer value of the API level, i.e. 24 for Android 7.0\n    :return: a dictionary of {MethodSignature: [List of Permissions]}\n    \"\"\"\n    root = os.path.dirname(os.path.realpath(__file__))\n    permissions_file = os.path.join(\n        root, \"api_permission_mappings\", \"permissions_{}.json\".format(apilevel)\n    )\n\n    if not os.path.isfile(permissions_file):\n        return {}\n\n    with open(permissions_file, \"r\") as fp:\n        return json.load(fp)\n"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_10.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows an application to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of WiMAX.\",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"view WiMAX state\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the application to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the application to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the application to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the application to mount / unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount / unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the application to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures and videos\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from WiMAX network.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly stop other applications.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other applications\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the application to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows an application to move application resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"Move application resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows an application to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all\\n        of the calendar events stored on your phone. Malicious applications\\n        can use this to send your calendar events to other people.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows application to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system applications.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        phone usage.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows an application to change\\n        the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the application to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen of the phone.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows an application to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to modify the APN\\n        settings, such as Proxy and Port of any APN.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"write Access Point Name settings\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to add or change the \\n        events on your calendar, which may send email to guests. Malicious applications can use this \\n        to erase or modify your calendar events or to send email to guests.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the application to set an alarm in\\n      an installed alarm clock application. Some alarm clock applications may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set alarm in alarm clock\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_13.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows an application to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the application to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the application to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the application to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the application to mount / unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount / unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the application to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures and videos\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly stop other applications.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other applications\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the application to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows an application to move application resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"Move application resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows an application to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all\\n        of the calendar events stored on your phone. Malicious applications\\n        can use this to send your calendar events to other people.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows an application to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows an application to change\\n        the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the application to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows an application to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to modify the APN\\n        settings, such as Proxy and Port of any APN.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"write Access Point Name settings\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to add or change the\\n        events on your calendar, which may send email to guests. Malicious applications can use this\\n        to erase or modify your calendar events or to send email to guests.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows an application to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the application to set an alarm in\\n      an installed alarm clock application. Some alarm clock applications may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set alarm in alarm clock\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}\n"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_14.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows an application to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the application to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the application to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the application to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the application to mount / unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount / unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the application to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"Allows the holder to make requests of\\n        package verifiers. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindPackageVerifier\",\n      \"label\": \"bind to a package verifier\",\n      \"label_ptr\": \"permlab_bindPackageVerifier\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a text service(e.g. SpellCheckerService). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindTextService\",\n      \"label\": \"bind to a text service\",\n      \"label_ptr\": \"permlab_bindTextService\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a Vpn service. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindVpnService\",\n      \"label\": \"bind to a VPN service\",\n      \"label_ptr\": \"permlab_bindVpnService\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures and videos\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"Allows the application to launch the full backup confirmation UI.  Not to be used by any application.\",\n      \"description_ptr\": \"permdesc_confirm_full_backup\",\n      \"label\": \"confirm a full backup or restore operation\",\n      \"label_ptr\": \"permlab_confirm_full_backup\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly stop other applications.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other applications\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"Allows an application to manage network policies and define application-specific rules.\",\n      \"description_ptr\": \"permdesc_manageNetworkPolicy\",\n      \"label\": \"manage network policy\",\n      \"label_ptr\": \"permlab_manageNetworkPolicy\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the application to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"Allows modification of how network usage is accounted against applications. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_modifyNetworkAccounting\",\n      \"label\": \"modify network usage accounting\",\n      \"label_ptr\": \"permlab_modifyNetworkAccounting\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows an application to move application resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"Move application resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows an application to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"Allows the application to verify a package is\\n        installable.\",\n      \"description_ptr\": \"permdesc_packageVerificationAgent\",\n      \"label\": \"verify packages\",\n      \"label_ptr\": \"permlab_packageVerificationAgent\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all calendar\\n        events stored on your phone, including those of friends or coworkers. A malicious application with\\n        this permission can extract personal information from these calendars without the owners' knowledge.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"Allows an application to read historical network usage for specific networks and applications.\",\n      \"description_ptr\": \"permdesc_readNetworkUsageHistory\",\n      \"label\": \"read historical network usage\",\n      \"label_ptr\": \"permlab_readNetworkUsageHistory\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"Allows the application to read personal\\n        profile information stored on your device, such as your name and contact information. This\\n        means the application can identify you and send your profile information to others.\",\n      \"description_ptr\": \"permdesc_readProfile\",\n      \"label\": \"read your profile data\",\n      \"label_ptr\": \"permlab_readProfile\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"Allows the application to access\\n        and sync social updates from you and your friends. Malicious apps can use this to read\\n        private communications between you and your friends on social networks.\",\n      \"description_ptr\": \"permdesc_readSocialStream\",\n      \"label\": \"read your social stream\",\n      \"label_ptr\": \"permlab_readSocialStream\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows application to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system applications.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"Allows an application to remove\\n        tasks and kill their applications. Malicious applications can disrupt\\n        the behavior of other applications.\",\n      \"description_ptr\": \"permdesc_removeTasks\",\n      \"label\": \"stop running applications\",\n      \"label_ptr\": \"permlab_removeTasks\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"Allows application to retrieve\\n        the content of the active window. Malicious applications may retrieve\\n        the entire window content and examine all its text except passwords.\",\n      \"description_ptr\": \"permdesc_retrieve_window_content\",\n      \"label\": \"retrieve screen content\",\n      \"label_ptr\": \"permlab_retrieve_window_content\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSmsNoConfirmation\",\n      \"label\": \"send SMS messages with no confirmation\",\n      \"label_ptr\": \"permlab_sendSmsNoConfirmation\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows an application to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows an application to change\\n        the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the application to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows an application to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to change network settings and to intercept and inspect all network traffic,\\n      for example to change the proxy and port of any APN. Malicious applications could monitor, redirect, or modify network\\n      packets without your knowledge.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"change/intercept network settings and traffic\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to send event invitations as the calendar owner and add, remove,\\n        change events that you can modify on your device, including those of friends or co-workers. A malicious application with this permission\\n        can send spam emails that appear to come from calendar owners, modify events without the owners' knowledge, or add fake events.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows an application to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"Allows the application to change or add\\n        to personal profile information stored on your device, such as your name and contact\\n        information.  This means other applications can identify you and send your profile\\n        information to others.\",\n      \"description_ptr\": \"permdesc_writeProfile\",\n      \"label\": \"write to your profile data\",\n      \"label_ptr\": \"permlab_writeProfile\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"Allows the application to display\\n        social updates from your friends. Malicious apps can use this to pretend to be a friend\\n        and trick you into revealing passwords or other confidential information.\",\n      \"description_ptr\": \"permdesc_writeSocialStream\",\n      \"label\": \"write to your social stream\",\n      \"label_ptr\": \"permlab_writeSocialStream\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the application to set an alarm in\\n      an installed alarm clock application. Some alarm clock applications may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set alarm in alarm clock\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the application to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_15.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows an application to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of WiMAX.\",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"view WiMAX state\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"Allows an application to use any installed\\n        media decoder to decode for playback.\",\n      \"description_ptr\": \"permdesc_anyCodecForPlayback\",\n      \"label\": \"use any media decoder for playback\",\n      \"label_ptr\": \"permlab_anyCodecForPlayback\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the application to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the application to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the application to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the application to mount / unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount / unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the application to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"Allows the holder to make requests of\\n        package verifiers. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindPackageVerifier\",\n      \"label\": \"bind to a package verifier\",\n      \"label_ptr\": \"permlab_bindPackageVerifier\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a text service(e.g. SpellCheckerService). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindTextService\",\n      \"label\": \"bind to a text service\",\n      \"label_ptr\": \"permlab_bindTextService\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a Vpn service. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindVpnService\",\n      \"label\": \"bind to a VPN service\",\n      \"label_ptr\": \"permlab_bindVpnService\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures and videos\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from WiMAX network.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"Allows the application to launch the full backup confirmation UI.  Not to be used by any application.\",\n      \"description_ptr\": \"permdesc_confirm_full_backup\",\n      \"label\": \"confirm a full backup or restore operation\",\n      \"label_ptr\": \"permlab_confirm_full_backup\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly stop other applications.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other applications\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"Allows an application to manage network policies and define application-specific rules.\",\n      \"description_ptr\": \"permdesc_manageNetworkPolicy\",\n      \"label\": \"manage network policy\",\n      \"label_ptr\": \"permlab_manageNetworkPolicy\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the application to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"Allows modification of how network usage is accounted against applications. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_modifyNetworkAccounting\",\n      \"label\": \"modify network usage accounting\",\n      \"label_ptr\": \"permlab_modifyNetworkAccounting\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows an application to move application resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"Move application resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows an application to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"Allows the application to verify a package is\\n        installable.\",\n      \"description_ptr\": \"permdesc_packageVerificationAgent\",\n      \"label\": \"verify packages\",\n      \"label_ptr\": \"permlab_packageVerificationAgent\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all calendar\\n        events stored on your phone, including those of friends or coworkers. A malicious application with\\n        this permission can extract personal information from these calendars without the owners' knowledge.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"Allows an application to read historical network usage for specific networks and applications.\",\n      \"description_ptr\": \"permdesc_readNetworkUsageHistory\",\n      \"label\": \"read historical network usage\",\n      \"label_ptr\": \"permlab_readNetworkUsageHistory\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"Allows the application to read personal\\n        profile information stored on your device, such as your name and contact information. This\\n        means the application can identify you and send your profile information to others.\",\n      \"description_ptr\": \"permdesc_readProfile\",\n      \"label\": \"read your profile data\",\n      \"label_ptr\": \"permlab_readProfile\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"Allows the application to access\\n        and sync social updates from you and your friends. Malicious apps can use this to read\\n        private communications between you and your friends on social networks.\",\n      \"description_ptr\": \"permdesc_readSocialStream\",\n      \"label\": \"read your social stream\",\n      \"label_ptr\": \"permlab_readSocialStream\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows application to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system applications.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"Allows an application to remove\\n        tasks and kill their applications. Malicious applications can disrupt\\n        the behavior of other applications.\",\n      \"description_ptr\": \"permdesc_removeTasks\",\n      \"label\": \"stop running applications\",\n      \"label_ptr\": \"permlab_removeTasks\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"Allows application to retrieve\\n        the content of the active window. Malicious applications may retrieve\\n        the entire window content and examine all its text except passwords.\",\n      \"description_ptr\": \"permdesc_retrieve_window_content\",\n      \"label\": \"retrieve screen content\",\n      \"label_ptr\": \"permlab_retrieve_window_content\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSmsNoConfirmation\",\n      \"label\": \"send SMS messages with no confirmation\",\n      \"label_ptr\": \"permlab_sendSmsNoConfirmation\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows an application to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows an application to change\\n        the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the application to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows an application to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to change network settings and to intercept and inspect all network traffic,\\n      for example to change the proxy and port of any APN. Malicious applications could monitor, redirect, or modify network\\n      packets without your knowledge.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"change/intercept network settings and traffic\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to send event invitations as the calendar owner and add, remove,\\n        change events that you can modify on your device, including those of friends or co-workers. A malicious application with this permission\\n        can send spam emails that appear to come from calendar owners, modify events without the owners' knowledge, or add fake events.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows an application to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"Allows the application to change or add\\n        to personal profile information stored on your device, such as your name and contact\\n        information.  This means other applications can identify you and send your profile\\n        information to others.\",\n      \"description_ptr\": \"permdesc_writeProfile\",\n      \"label\": \"write to your profile data\",\n      \"label_ptr\": \"permlab_writeProfile\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"Allows the application to display\\n        social updates from your friends. Malicious apps can use this to pretend to be a friend\\n        and trick you into revealing passwords or other confidential information.\",\n      \"description_ptr\": \"permdesc_writeSocialStream\",\n      \"label\": \"write to your social stream\",\n      \"label_ptr\": \"permlab_writeSocialStream\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the application to set an alarm in\\n      an installed alarm clock application. Some alarm clock applications may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set alarm in alarm clock\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the application to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_16.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Do things that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for app developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location.\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS, email, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Access various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows the app to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows the app read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        apps.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access\\n      approximate location from location providers using network sources such as\\n      cell tower and Wi-Fi. When these location services are available and turned\\n      on, this permission allows the app to determine your approximate\\n      location.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"approximate (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"Allows the holder to access content\\n     providers from the shell. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessContentProvidersExternally\",\n      \"label\": \"access content providers externally\",\n      \"label_ptr\": \"permlab_accessContentProvidersExternally\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access precise\\n      location sources such as the Global Positioning System on the phone. When\\n      location services are available and turned on, this permission allows the\\n      app to determine your precise location.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"precise (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n      extra location provider commands.  This may allow the app to to interfere\\n      with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for\\n      testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows the app to use SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"View WiMAX connections\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows the app to make calls to AccountAuthenticators.\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"Allows the app to use any installed\\n        media decoder to decode for playback.\",\n      \"description_ptr\": \"permdesc_anyCodecForPlayback\",\n      \"label\": \"use any media decoder for playback\",\n      \"label_ptr\": \"permlab_anyCodecForPlayback\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the app to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the app to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the app to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the app to mount/unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount/unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the app to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows the app\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"create accounts and set passwords\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the app to control the system's backup and restore mechanism.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected battery statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an accessibility service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindAccessibilityService\",\n      \"label\": \"bind to an accessibility service\",\n      \"label_ptr\": \"permlab_bindAccessibilityService\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the app to tell the system\\n        which widgets can be used by which app. An app with this permission\\n        can give access to personal data to other apps.\\n        Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"Allows the holder to make requests of\\n        package verifiers. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPackageVerifier\",\n      \"label\": \"bind to a package verifier\",\n      \"label_ptr\": \"permlab_bindPackageVerifier\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindTextService\",\n      \"label\": \"bind to a text service\",\n      \"label_ptr\": \"permlab_bindTextService\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a Vpn service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindVpnService\",\n      \"label\": \"bind to a VPN service\",\n      \"label_ptr\": \"permlab_bindVpnService\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the app to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an app package has been removed.\\n        Malicious apps may use this to kill any other running\\n        app.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious apps may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious apps may use this to forge MMS message receipt or to\\n        silently replace the content of any webpage with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the app to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious apps may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows the app to change the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows the app to change whether a\\n        component of another app is enabled or not. Malicious apps may use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get app components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable app components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows the app to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change system display settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"Change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows the app to free phone storage\\n        by deleting files in app cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all app cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows the app to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other apps' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"Allows the app to launch the full backup confirmation UI.  Not to be used by any app.\",\n      \"description_ptr\": \"permdesc_confirm_full_backup\",\n      \"label\": \"confirm a full backup or restore operation\",\n      \"label_ptr\": \"permlab_confirm_full_backup\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows the app to enable/disable location\\n        update notifications from the radio.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"copy content\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"copy content\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows the app to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other apps' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows the app to delete\\n        Android packages. Malicious apps may use this to delete important apps.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete apps\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the app to turn the phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows the app to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows the app to retrieve\\n        internal state of the system. Malicious apps may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the app to control the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows the app to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force app to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows the app to forcibly stop other apps.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other apps\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"Allows the app to retrieve\\n        detailed information about currently and recently running tasks. Malicious apps may\\n        discover private information about other apps.\",\n      \"description_ptr\": \"permdesc_getDetailedTasks\",\n      \"label\": \"retrieve details of running apps\",\n      \"label_ptr\": \"permlab_getDetailedTasks\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"Allows an application to grant or revoke\\n        specific permissions for it or other applications.  Malicious applications may use this\\n        to access features you have not granted them.\\n    \",\n      \"description_ptr\": \"permdesc_grantRevokePermissions\",\n      \"label\": \"grant or revoke permissions\",\n      \"label_ptr\": \"permlab_grantRevokePermissions\",\n      \"name\": \"android.permission.GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the app to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows the app to deliver\\n        its own input events (key presses, etc.) to other apps. Malicious\\n        apps may use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources\\n      for testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows the app to install new or updated\\n        Android packages. Malicious apps may use this to add new apps with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install apps\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the app to create\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows the app to\\n    perform operations like adding and removing accounts, and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"add or remove accounts\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows the app to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage app tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"Allows the app to manage network policies and define app-specific rules.\",\n      \"description_ptr\": \"permdesc_manageNetworkPolicy\",\n      \"label\": \"manage network policy\",\n      \"label_ptr\": \"permlab_manageNetworkPolicy\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the app to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows the app to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed apps.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_modifyNetworkAccounting\",\n      \"label\": \"modify network usage accounting\",\n      \"label_ptr\": \"permlab_modifyNetworkAccounting\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the app to control the\\n        phone features of the device. An app with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"erase SD Card\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"access SD Card filesystem\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows the app to move app resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"move app resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the app to modify collected component usage statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"Allows the app to verify a package is\\n        installable.\",\n      \"description_ptr\": \"permdesc_packageVerificationAgent\",\n      \"label\": \"verify packages\",\n      \"label_ptr\": \"permlab_packageVerificationAgent\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the app to start CDMA provisioning.\\n        Malicious apps may unnecessarily start CDMA provisioning.\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to process\\n      outgoing calls and change the number to be dialed. This permission allows\\n      the app to monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n      cell broadcast messages received by your device. Cell broadcast alerts\\n      are delivered in some locations to warn you of emergency situations.\\n      Malicious apps may interfere with the performance or operation of your\\n      device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to test a permission for the SD card that will be available on future devices.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"test access to protected storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows the app to read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows the app to watch the\\n        keys you press even when interacting with another app (such\\n        as typing a password). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows the app to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"Allows the app to read historical network usage for specific networks and apps.\",\n      \"description_ptr\": \"permdesc_readNetworkUsageHistory\",\n      \"label\": \"read historical network usage\",\n      \"label_ptr\": \"permlab_readNetworkUsageHistory\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"Allows the app to read\\n     personal profile information stored on your device, such as your name and\\n     contact information. This means the app can identify you and may send your\\n     profile information to others.\",\n      \"description_ptr\": \"permdesc_readProfile\",\n      \"label\": \"read your own contact card\",\n      \"label_ptr\": \"permlab_readProfile\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app\\n      to access and sync social updates from you and your friends. Be careful\\n      when sharing information -- this allows the app to read communications\\n      between you and your friends on social networks, regardless of\\n      confidentiality. Note: this permission may not be enforced on all social\\n      networks.\",\n      \"description_ptr\": \"permdesc_readSocialStream\",\n      \"label\": \"read your social stream\",\n      \"label_ptr\": \"permlab_readSocialStream\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to read all words,\\n       names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read terms you added to the dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the app to force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows the app to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system apps.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows the app to record audio with the\\n      microphone.  This permission allows the app to record audio at any time\\n      without your confirmation.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"Allows the app to remove\\n        tasks and kill their apps. Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_removeTasks\",\n      \"label\": \"stop running apps\",\n      \"label_ptr\": \"permlab_removeTasks\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"Allows the app to retrieve\\n        the content of the active window. Malicious apps may retrieve\\n        the entire window content and examine all its text except passwords.\",\n      \"description_ptr\": \"permdesc_retrieve_window_content\",\n      \"label\": \"retrieve screen content\",\n      \"label_ptr\": \"permlab_retrieve_window_content\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"Allows the app to send SMS\\n      messages. This may result in unexpected charges. Malicious apps may cost\\n      you money by sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSmsNoConfirmation\",\n      \"label\": \"send SMS messages with no confirmation\",\n      \"label_ptr\": \"permlab_sendSmsNoConfirmation\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"Allows the holder to access serial ports using the SerialManager API.\",\n      \"description_ptr\": \"permdesc_serialPort\",\n      \"label\": \"access serial ports\",\n      \"label_ptr\": \"permlab_serialPort\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows the app to\\n        monitor and control how the system launches activities.\\n        Malicious apps may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all app launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows the app\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"force background apps to close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows the app to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows the app to turn\\n        on debugging for another app. Malicious apps may use this\\n        to kill other apps.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable app debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"Allows the app to change\\n        the keyboard layout. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setKeyboardLayout\",\n      \"label\": \"change keyboard layout\",\n      \"label_ptr\": \"permlab_setKeyboardLayout\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows the app to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows the app to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows the app to\\n        modify your preferred apps. Malicious apps may\\n        silently change the apps that are run, spoofing your\\n        existing apps to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred apps\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows the app\\n        to control the maximum number of processes that will run. Never\\n        needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"Allows the app to control the\\n        screen compatibility mode of other applications.  Malicious applications may\\n        break the behavior of other applications.\",\n      \"description_ptr\": \"permdesc_setScreenCompatibility\",\n      \"label\": \"set screen compatibility\",\n      \"label_ptr\": \"permlab_setScreenCompatibility\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows the app to change the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows the app to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to apps\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"Allows the app to start any activity, regardless of permission protection or exported state.\",\n      \"description_ptr\": \"permdesc_startAnyActivity\",\n      \"label\": \"start any activity\",\n      \"label_ptr\": \"permlab_startAnyActivity\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows the app to disable the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the app to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another app.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows the app to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows the app to modify\\n      your currently synced feeds. Malicious apps may change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to show system\\n      alert windows.  Some alert windows may take over the entire screen.\\n      \",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected battery statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.\",\n      \"description_ptr\": \"permdesc_updateLock\",\n      \"label\": \"discourage automatic device updates\",\n      \"label_ptr\": \"permlab_updateLock\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows the app to request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use accounts on the device\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows the app to change network settings and to intercept and inspect all network traffic,\\n      for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\\n      packets without your knowledge.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"change/intercept network settings and traffic\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n     add, remove, change events that you can modify on your phone, including\\n     those of friends or co-workers. This may allow the app to send messages\\n     that appear to come from calendar owners, or modify events without the\\n     owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows the app to modify the\\n        Google services map.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows the app to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"Allows the app to\\n      change or add to personal profile information stored on your device, such\\n      as your name and contact information.  This means the app can identify you\\n      and may send your profile information to others.\",\n      \"description_ptr\": \"permdesc_writeProfile\",\n      \"label\": \"modify your own contact card\",\n      \"label_ptr\": \"permlab_writeProfile\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's secure settings data. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows the app to write\\n      to SMS messages stored on your phone or SIM card. Malicious apps\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app to\\n     display social updates from your friends.  Be careful when sharing\\n     information -- this allows the app to produce messages that may appear to\\n     come from a friend. Note: this permission may not be enforced on all social\\n     networks.\",\n      \"description_ptr\": \"permdesc_writeSocialStream\",\n      \"label\": \"write to your social stream\",\n      \"label_ptr\": \"permlab_writeSocialStream\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user-defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n      an installed alarm clock app. Some alarm clock apps may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the app to read the\\n     history of all URLs that the Browser has visited, and all of the Browser's\\n     bookmarks. Note: this permission may not be enforced by third-party\\n     browsers or other  applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read your Web bookmarks and history\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the\\n        app to modify the Browser's history or bookmarks stored on your phone.\\n        This may allow the app to erase or modify Browser data.  Note:\\n        this permission may note be enforced by third-party browsers or other\\n        applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write web bookmarks and history\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_17.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accounts\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.AFFECTS_BATTERY\": {\n      \"description\": \"Use features that can quickly drain battery.\",\n      \"description_ptr\": \"permgroupdesc_affectsBattery\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_affects_battery\",\n      \"label\": \"Affects Battery\",\n      \"label_ptr\": \"permgrouplab_affectsBattery\",\n      \"name\": \"android.permission-group.AFFECTS_BATTERY\"\n    },\n    \"android.permission-group.APP_INFO\": {\n      \"description\": \"Ability to affect behavior of other applications on your device.\",\n      \"description_ptr\": \"permgroupdesc_appInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_app_info\",\n      \"label\": \"Your applications information\",\n      \"label_ptr\": \"permgrouplab_appInfo\",\n      \"name\": \"android.permission-group.APP_INFO\"\n    },\n    \"android.permission-group.AUDIO_SETTINGS\": {\n      \"description\": \"Change audio settings.\",\n      \"description_ptr\": \"permgroupdesc_audioSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_audio_settings\",\n      \"label\": \"Audio Settings\",\n      \"label_ptr\": \"permgrouplab_audioSettings\",\n      \"name\": \"android.permission-group.AUDIO_SETTINGS\"\n    },\n    \"android.permission-group.BLUETOOTH_NETWORK\": {\n      \"description\": \"Access devices and networks through Bluetooth.\",\n      \"description_ptr\": \"permgroupdesc_bluetoothNetwork\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bluetooth\",\n      \"label\": \"Bluetooth\",\n      \"label_ptr\": \"permgrouplab_bluetoothNetwork\",\n      \"name\": \"android.permission-group.BLUETOOTH_NETWORK\"\n    },\n    \"android.permission-group.BOOKMARKS\": {\n      \"description\": \"Direct access to bookmarks and browser history.\",\n      \"description_ptr\": \"permgroupdesc_bookmarks\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bookmarks\",\n      \"label\": \"Bookmarks and History\",\n      \"label_ptr\": \"permgrouplab_bookmarks\",\n      \"name\": \"android.permission-group.BOOKMARKS\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"Direct access to calendar and events.\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"Direct access to camera for image or video capture.\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Do things that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for app developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.DEVICE_ALARMS\": {\n      \"description\": \"Set the alarm clock.\",\n      \"description_ptr\": \"permgroupdesc_deviceAlarms\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_device_alarms\",\n      \"label\": \"Alarm\",\n      \"label_ptr\": \"permgrouplab_deviceAlarms\",\n      \"name\": \"android.permission-group.DEVICE_ALARMS\"\n    },\n    \"android.permission-group.DISPLAY\": {\n      \"description\": \"Effect the UI of other applications.\",\n      \"description_ptr\": \"permgroupdesc_display\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_display\",\n      \"label\": \"Other Application UI\",\n      \"label_ptr\": \"permgrouplab_display\",\n      \"name\": \"android.permission-group.DISPLAY\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location.\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS, email, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_messages\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"Direct access to the microphone to record audio.\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Access various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_network\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to information about you, stored in on your contact card.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_personal_info\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.SCREENLOCK\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_screenlock\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.SCREENLOCK\"\n    },\n    \"android.permission-group.SOCIAL_INFO\": {\n      \"description\": \"Direct access to information about your contacts and social connections.\",\n      \"description_ptr\": \"permgroupdesc_socialInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_social_info\",\n      \"label\": \"Your social information\",\n      \"label_ptr\": \"permgrouplab_socialInfo\",\n      \"name\": \"android.permission-group.SOCIAL_INFO\"\n    },\n    \"android.permission-group.STATUS_BAR\": {\n      \"description\": \"Change the device status bar settings.\",\n      \"description_ptr\": \"permgroupdesc_statusBar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_status_bar\",\n      \"label\": \"Status Bar\",\n      \"label_ptr\": \"permgrouplab_statusBar\",\n      \"name\": \"android.permission-group.STATUS_BAR\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYNC_SETTINGS\": {\n      \"description\": \"Access to the sync settings.\",\n      \"description_ptr\": \"permgroupdesc_syncSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_sync_settings\",\n      \"label\": \"Sync Settings\",\n      \"label_ptr\": \"permgrouplab_syncSettings\",\n      \"name\": \"android.permission-group.SYNC_SETTINGS\"\n    },\n    \"android.permission-group.SYSTEM_CLOCK\": {\n      \"description\": \"Change the device time or timezone.\",\n      \"description_ptr\": \"permgroupdesc_systemClock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_clock\",\n      \"label\": \"Clock\",\n      \"label_ptr\": \"permgrouplab_systemClock\",\n      \"name\": \"android.permission-group.SYSTEM_CLOCK\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_tools\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    },\n    \"android.permission-group.USER_DICTIONARY\": {\n      \"description\": \"Read words in user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_dictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary\",\n      \"label\": \"Read User Dictionary\",\n      \"label_ptr\": \"permgrouplab_dictionary\",\n      \"name\": \"android.permission-group.USER_DICTIONARY\"\n    },\n    \"android.permission-group.VOICEMAIL\": {\n      \"description\": \"Direct access to voicemail.\",\n      \"description_ptr\": \"permgroupdesc_voicemail\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_voicemail\",\n      \"label\": \"Voicemail\",\n      \"label_ptr\": \"permgrouplab_voicemail\",\n      \"name\": \"android.permission-group.VOICEMAIL\"\n    },\n    \"android.permission-group.WALLPAPER\": {\n      \"description\": \"Change the device wallpaper settings.\",\n      \"description_ptr\": \"permgroupdesc_wallpaper\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_wallpaper\",\n      \"label\": \"Wallpaper\",\n      \"label_ptr\": \"permgrouplab_wallpaper\",\n      \"name\": \"android.permission-group.WALLPAPER\"\n    },\n    \"android.permission-group.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Add words to the user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_writeDictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary_write\",\n      \"label\": \"Write User Dictionary\",\n      \"label_ptr\": \"permgrouplab_writeDictionary\",\n      \"name\": \"android.permission-group.WRITE_USER_DICTIONARY\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to access external storage for all users.\",\n      \"description_ptr\": \"permdesc_sdcardAccessAll\",\n      \"label\": \"access external storage of all users\",\n      \"label_ptr\": \"permlab_sdcardAccessAll\",\n      \"name\": \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows the app to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows the app read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        apps.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      approximate location. This location is derived by location services using\\n      network location sources such as cell towers and Wi-Fi. These location\\n      services must be turned on and available to your device for the app to\\n      use them. Apps may use this to determine approximately where you\\n      are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"Allows the holder to access content\\n     providers from the shell. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessContentProvidersExternally\",\n      \"label\": \"access content providers externally\",\n      \"label_ptr\": \"permlab_accessContentProvidersExternally\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      precise location using the Global Positioning System (GPS) or network\\n      location sources such as cell towers and Wi-Fi. These location services\\n      must be turned on and available to your device for the app to use them.\\n      Apps may use this to determine where you are, and may consume additional\\n      battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n      extra location provider commands.  This may allow the app to to interfere\\n      with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for\\n      testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows the app to use SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows the app to make calls to AccountAuthenticators.\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"Allows the app to use any installed\\n        media decoder to decode for playback.\",\n      \"description_ptr\": \"permdesc_anyCodecForPlayback\",\n      \"label\": \"use any media decoder for playback\",\n      \"label_ptr\": \"permlab_anyCodecForPlayback\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the app to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the app to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the app to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the app to mount/unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount/unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the app to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows the app\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"create accounts and set passwords\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the app to control the system's backup and restore mechanism.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows an application to read the current low-level\\n        battery use data.  May allow the application to find out detailed information about\\n        which apps you use.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"read battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an accessibility service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindAccessibilityService\",\n      \"label\": \"bind to an accessibility service\",\n      \"label_ptr\": \"permlab_bindAccessibilityService\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the app to tell the system\\n        which widgets can be used by which app. An app with this permission\\n        can give access to personal data to other apps.\\n        Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"Allows the holder to make requests of\\n        package verifiers. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPackageVerifier\",\n      \"label\": \"bind to a package verifier\",\n      \"label_ptr\": \"permlab_bindPackageVerifier\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindTextService\",\n      \"label\": \"bind to a text service\",\n      \"label_ptr\": \"permlab_bindTextService\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a Vpn service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindVpnService\",\n      \"label\": \"bind to a VPN service\",\n      \"label_ptr\": \"permlab_bindVpnService\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the app to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an app package has been removed.\\n        Malicious apps may use this to kill any other running\\n        app.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious apps may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious apps may use this to forge MMS message receipt or to\\n        silently replace the content of any webpage with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the app to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious apps may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows the app to change the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows the app to change whether a\\n        component of another app is enabled or not. Malicious apps may use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get app components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable app components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows the app to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change system display settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"Change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows the app to free phone storage\\n        by deleting files in the cache directories of other applications.  This may cause other\\n        applications to start up more slowly as they need to re-retrieve their data.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all app cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows the app to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other apps' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to configure and connect to Wifi displays.\",\n      \"description_ptr\": \"permdesc_configureWifiDisplay\",\n      \"label\": \"configure Wifi displays\",\n      \"label_ptr\": \"permlab_configureWifiDisplay\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"Allows the app to launch the full backup confirmation UI.  Not to be used by any app.\",\n      \"description_ptr\": \"permdesc_confirm_full_backup\",\n      \"label\": \"confirm a full backup or restore operation\",\n      \"label_ptr\": \"permlab_confirm_full_backup\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows the app to enable/disable location\\n        update notifications from the radio.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to control low-level features of Wifi displays.\",\n      \"description_ptr\": \"permdesc_controlWifiDisplay\",\n      \"label\": \"control Wifi displays\",\n      \"label_ptr\": \"permlab_controlWifiDisplay\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"copy content\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"copy content\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows the app to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other apps' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows the app to delete\\n        Android packages. Malicious apps may use this to delete important apps.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete apps\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the app to turn the phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows the app to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SCREENLOCK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows the app to retrieve\\n        internal state of the system. Malicious apps may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.STATUS_BAR\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"Allows an application to register an input filter\\n            which filters the stream of all user events before they are dispatched. Malicious app\\n            may control the system UI whtout user intervention.\",\n      \"description_ptr\": \"permdesc_filter_events\",\n      \"label\": \"filter events\",\n      \"label_ptr\": \"permlab_filter_events\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the app to control the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows the app to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force app to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows the app to forcibly stop other apps.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other apps\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"Allows the application to temporarily freeze\\n        the screen for a full-screen transition.\",\n      \"description_ptr\": \"permdesc_freezeScreen\",\n      \"label\": \"freeze screen\",\n      \"label_ptr\": \"permlab_freezeScreen\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"Allows the app to retrieve\\n        detailed information about currently and recently running tasks. Malicious apps may\\n        discover private information about other apps.\",\n      \"description_ptr\": \"permdesc_getDetailedTasks\",\n      \"label\": \"retrieve details of running apps\",\n      \"label_ptr\": \"permlab_getDetailedTasks\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"Allows an application to grant or revoke\\n        specific permissions for it or other applications.  Malicious applications may use this\\n        to access features you have not granted them.\\n    \",\n      \"description_ptr\": \"permdesc_grantRevokePermissions\",\n      \"label\": \"grant or revoke permissions\",\n      \"label_ptr\": \"permlab_grantRevokePermissions\",\n      \"name\": \"android.permission.GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the app to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows the app to deliver\\n        its own input events (key presses, etc.) to other apps. Malicious\\n        apps may use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources\\n      for testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows the app to install new or updated\\n        Android packages. Malicious apps may use this to add new apps with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install apps\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"Allows the app to perform actions\\n        across different users on the device.  Malicious apps may use this to violate\\n        the protection between users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsers\",\n      \"label\": \"interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsers\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"Allows all possible interactions across\\n        users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsersFull\",\n      \"label\": \"full license to interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsersFull\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the app to create\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MAGNIFY_DISPLAY\": {\n      \"description\": \"Allows an application to magnify the content of a\\n        display. Malicious apps may transform the display content in a way that renders the\\n        device unusable.\",\n      \"description_ptr\": \"permdesc_magnify_display\",\n      \"label\": \"magnify display\",\n      \"label_ptr\": \"permlab_magnify_display\",\n      \"name\": \"android.permission.MAGNIFY_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows the app to\\n    perform operations like adding and removing accounts, and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"add or remove accounts\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows the app to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage app tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"Allows the app to manage network policies and define app-specific rules.\",\n      \"description_ptr\": \"permdesc_manageNetworkPolicy\",\n      \"label\": \"manage network policy\",\n      \"label_ptr\": \"permlab_manageNetworkPolicy\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the app to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"Allows apps to manage users on the device, including query, creation and deletion.\",\n      \"description_ptr\": \"permdesc_manageUsers\",\n      \"label\": \"manage users\",\n      \"label_ptr\": \"permlab_manageUsers\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows the app to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed apps.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.AUDIO_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_modifyNetworkAccounting\",\n      \"label\": \"modify network usage accounting\",\n      \"label_ptr\": \"permlab_modifyNetworkAccounting\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the app to control the\\n        phone features of the device. An app with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"erase SD Card\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"access SD Card filesystem\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows the app to move app resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"move app resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the app to modify collected component usage statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"Allows the app to verify a package is\\n        installable.\",\n      \"description_ptr\": \"permdesc_packageVerificationAgent\",\n      \"label\": \"verify packages\",\n      \"label_ptr\": \"permlab_packageVerificationAgent\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the app to start CDMA provisioning.\\n        Malicious apps may unnecessarily start CDMA provisioning.\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to process\\n      outgoing calls and change the number to be dialed. This permission allows\\n      the app to monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n      cell broadcast messages received by your device. Cell broadcast alerts\\n      are delivered in some locations to warn you of emergency situations.\\n      Malicious apps may interfere with the performance or operation of your\\n      device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to test a permission for the SD card that will be available on future devices.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"test access to protected storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows the app to read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows the app to watch the\\n        keys you press even when interacting with another app (such\\n        as typing a password). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows the app to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"Allows the app to read historical network usage for specific networks and apps.\",\n      \"description_ptr\": \"permdesc_readNetworkUsageHistory\",\n      \"label\": \"read historical network usage\",\n      \"label_ptr\": \"permlab_readNetworkUsageHistory\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"Allows the app to read\\n     personal profile information stored on your device, such as your name and\\n     contact information. This means the app can identify you and may send your\\n     profile information to others.\",\n      \"description_ptr\": \"permdesc_readProfile\",\n      \"label\": \"read your own contact card\",\n      \"label_ptr\": \"permlab_readProfile\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app\\n      to access and sync social updates from you and your friends. Be careful\\n      when sharing information -- this allows the app to read communications\\n      between you and your friends on social networks, regardless of\\n      confidentiality. Note: this permission may not be enforced on all social\\n      networks.\",\n      \"description_ptr\": \"permdesc_readSocialStream\",\n      \"label\": \"read your social stream\",\n      \"label_ptr\": \"permlab_readSocialStream\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to read all words,\\n       names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read terms you added to the dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.USER_DICTIONARY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the app to force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows the app to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system apps.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"Allows the app to remove\\n        tasks and kill their apps. Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_removeTasks\",\n      \"label\": \"stop running apps\",\n      \"label_ptr\": \"permlab_removeTasks\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"Allows the app to retrieve\\n        the content of the active window. Malicious apps may retrieve\\n        the entire window content and examine all its text except passwords.\",\n      \"description_ptr\": \"permdesc_retrieve_window_content\",\n      \"label\": \"retrieve screen content\",\n      \"label_ptr\": \"permlab_retrieve_window_content\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_INFO\": {\n      \"description\": \"Allows an application to retrieve\\n         information about the the windows from the window manager. Malicious apps may\\n         retrieve information that is intended for internal system usage.\",\n      \"description_ptr\": \"permdesc_retrieve_window_info\",\n      \"label\": \"retrieve window info\",\n      \"label_ptr\": \"permlab_retrieve_window_info\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"Allows the app to send SMS\\n      messages. This may result in unexpected charges. Malicious apps may cost\\n      you money by sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSmsNoConfirmation\",\n      \"label\": \"send SMS messages with no confirmation\",\n      \"label_ptr\": \"permlab_sendSmsNoConfirmation\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"Allows the holder to access serial ports using the SerialManager API.\",\n      \"description_ptr\": \"permdesc_serialPort\",\n      \"label\": \"access serial ports\",\n      \"label_ptr\": \"permlab_serialPort\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows the app to\\n        monitor and control how the system launches activities.\\n        Malicious apps may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all app launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows the app\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"force background apps to close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows the app to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows the app to turn\\n        on debugging for another app. Malicious apps may use this\\n        to kill other apps.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable app debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"Allows the app to change\\n        the keyboard layout. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setKeyboardLayout\",\n      \"label\": \"change keyboard layout\",\n      \"label_ptr\": \"permlab_setKeyboardLayout\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows the app to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows the app to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows the app to\\n        modify your preferred apps. Malicious apps may\\n        silently change the apps that are run, spoofing your\\n        existing apps to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred apps\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows the app\\n        to control the maximum number of processes that will run. Never\\n        needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"Allows the app to control the\\n        screen compatibility mode of other applications.  Malicious applications may\\n        break the behavior of other applications.\",\n      \"description_ptr\": \"permdesc_setScreenCompatibility\",\n      \"label\": \"set screen compatibility\",\n      \"label_ptr\": \"permlab_setScreenCompatibility\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows the app to change the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_CLOCK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows the app to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to apps\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"Allows the app to start any activity, regardless of permission protection or exported state.\",\n      \"description_ptr\": \"permdesc_startAnyActivity\",\n      \"label\": \"start any activity\",\n      \"label_ptr\": \"permlab_startAnyActivity\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows the app to disable the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the app to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another app.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows the app to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows the app to modify\\n      your currently synced feeds. Malicious apps may change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to draw on top of other\\n        applications or parts of the user interface.  They may interfere with your\\n        use of the interface in any application, or change what you think you are\\n        seeing in other applications.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.DISPLAY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"Allows an application to temporarily\\n         enable accessibility on the device. Malicious apps may enable accessibility without\\n         user consent.\",\n      \"description_ptr\": \"permdesc_temporary_enable_accessibility\",\n      \"label\": \"temporary enable accessibility\",\n      \"label_ptr\": \"permlab_temporary_enable_accessibility\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected battery statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateBatteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_updateBatteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.\",\n      \"description_ptr\": \"permdesc_updateLock\",\n      \"label\": \"discourage automatic device updates\",\n      \"label_ptr\": \"permlab_updateLock\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows the app to request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use accounts on the device\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows the app to change network settings and to intercept and inspect all network traffic,\\n      for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\\n      packets without your knowledge.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"change/intercept network settings and traffic\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n     add, remove, change events that you can modify on your phone, including\\n     those of friends or co-workers. This may allow the app to send messages\\n     that appear to come from calendar owners, or modify events without the\\n     owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows the app to modify the\\n        Google services map.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows the app to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"Allows the app to\\n      change or add to personal profile information stored on your device, such\\n      as your name and contact information.  This means the app can identify you\\n      and may send your profile information to others.\",\n      \"description_ptr\": \"permdesc_writeProfile\",\n      \"label\": \"modify your own contact card\",\n      \"label_ptr\": \"permlab_writeProfile\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's secure settings data. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows the app to write\\n      to SMS messages stored on your phone or SIM card. Malicious apps\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app to\\n     display social updates from your friends.  Be careful when sharing\\n     information -- this allows the app to produce messages that may appear to\\n     come from a friend. Note: this permission may not be enforced on all social\\n     networks.\",\n      \"description_ptr\": \"permdesc_writeSocialStream\",\n      \"label\": \"write to your social stream\",\n      \"label_ptr\": \"permlab_writeSocialStream\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"add words to user-defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.WRITE_USER_DICTIONARY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n      an installed alarm clock app. Some alarm clock apps may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.DEVICE_ALARMS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the app to read the\\n     history of all URLs that the Browser has visited, and all of the Browser's\\n     bookmarks. Note: this permission may not be enforced by third-party\\n     browsers or other  applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read your Web bookmarks and history\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the\\n        app to modify the Browser's history or bookmarks stored on your phone.\\n        This may allow the app to erase or modify Browser data.  Note:\\n        this permission may note be enforced by third-party browsers or other\\n        applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write web bookmarks and history\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_18.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCESSIBILITY_FEATURES\": {\n      \"description\": \"Features that assistive technology can request.\",\n      \"description_ptr\": \"permgroupdesc_accessibilityFeatures\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accessibility_features\",\n      \"label\": \"Accessibility features\",\n      \"label_ptr\": \"permgrouplab_accessibilityFeatures\",\n      \"name\": \"android.permission-group.ACCESSIBILITY_FEATURES\"\n    },\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accounts\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.AFFECTS_BATTERY\": {\n      \"description\": \"Use features that can quickly drain battery.\",\n      \"description_ptr\": \"permgroupdesc_affectsBattery\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_affects_battery\",\n      \"label\": \"Affects Battery\",\n      \"label_ptr\": \"permgrouplab_affectsBattery\",\n      \"name\": \"android.permission-group.AFFECTS_BATTERY\"\n    },\n    \"android.permission-group.APP_INFO\": {\n      \"description\": \"Ability to affect behavior of other applications on your device.\",\n      \"description_ptr\": \"permgroupdesc_appInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_app_info\",\n      \"label\": \"Your applications information\",\n      \"label_ptr\": \"permgrouplab_appInfo\",\n      \"name\": \"android.permission-group.APP_INFO\"\n    },\n    \"android.permission-group.AUDIO_SETTINGS\": {\n      \"description\": \"Change audio settings.\",\n      \"description_ptr\": \"permgroupdesc_audioSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_audio_settings\",\n      \"label\": \"Audio Settings\",\n      \"label_ptr\": \"permgrouplab_audioSettings\",\n      \"name\": \"android.permission-group.AUDIO_SETTINGS\"\n    },\n    \"android.permission-group.BLUETOOTH_NETWORK\": {\n      \"description\": \"Access devices and networks through Bluetooth.\",\n      \"description_ptr\": \"permgroupdesc_bluetoothNetwork\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bluetooth\",\n      \"label\": \"Bluetooth\",\n      \"label_ptr\": \"permgrouplab_bluetoothNetwork\",\n      \"name\": \"android.permission-group.BLUETOOTH_NETWORK\"\n    },\n    \"android.permission-group.BOOKMARKS\": {\n      \"description\": \"Direct access to bookmarks and browser history.\",\n      \"description_ptr\": \"permgroupdesc_bookmarks\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bookmarks\",\n      \"label\": \"Bookmarks and History\",\n      \"label_ptr\": \"permgrouplab_bookmarks\",\n      \"name\": \"android.permission-group.BOOKMARKS\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"Direct access to calendar and events.\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"Direct access to camera for image or video capture.\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Do things that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for app developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.DEVICE_ALARMS\": {\n      \"description\": \"Set the alarm clock.\",\n      \"description_ptr\": \"permgroupdesc_deviceAlarms\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_device_alarms\",\n      \"label\": \"Alarm\",\n      \"label_ptr\": \"permgrouplab_deviceAlarms\",\n      \"name\": \"android.permission-group.DEVICE_ALARMS\"\n    },\n    \"android.permission-group.DISPLAY\": {\n      \"description\": \"Effect the UI of other applications.\",\n      \"description_ptr\": \"permgroupdesc_display\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_display\",\n      \"label\": \"Other Application UI\",\n      \"label_ptr\": \"permgrouplab_display\",\n      \"name\": \"android.permission-group.DISPLAY\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location.\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS, email, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_messages\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"Direct access to the microphone to record audio.\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Access various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_network\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to information about you, stored in on your contact card.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_personal_info\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.SCREENLOCK\": {\n      \"description\": \"Ability to affect behavior of the lock screen on your device.\",\n      \"description_ptr\": \"permgroupdesc_screenlock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_screenlock\",\n      \"label\": \"Lock screen\",\n      \"label_ptr\": \"permgrouplab_screenlock\",\n      \"name\": \"android.permission-group.SCREENLOCK\"\n    },\n    \"android.permission-group.SOCIAL_INFO\": {\n      \"description\": \"Direct access to information about your contacts and social connections.\",\n      \"description_ptr\": \"permgroupdesc_socialInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_social_info\",\n      \"label\": \"Your social information\",\n      \"label_ptr\": \"permgrouplab_socialInfo\",\n      \"name\": \"android.permission-group.SOCIAL_INFO\"\n    },\n    \"android.permission-group.STATUS_BAR\": {\n      \"description\": \"Change the device status bar settings.\",\n      \"description_ptr\": \"permgroupdesc_statusBar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_status_bar\",\n      \"label\": \"Status Bar\",\n      \"label_ptr\": \"permgrouplab_statusBar\",\n      \"name\": \"android.permission-group.STATUS_BAR\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYNC_SETTINGS\": {\n      \"description\": \"Access to the sync settings.\",\n      \"description_ptr\": \"permgroupdesc_syncSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_sync_settings\",\n      \"label\": \"Sync Settings\",\n      \"label_ptr\": \"permgrouplab_syncSettings\",\n      \"name\": \"android.permission-group.SYNC_SETTINGS\"\n    },\n    \"android.permission-group.SYSTEM_CLOCK\": {\n      \"description\": \"Change the device time or timezone.\",\n      \"description_ptr\": \"permgroupdesc_systemClock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_clock\",\n      \"label\": \"Clock\",\n      \"label_ptr\": \"permgrouplab_systemClock\",\n      \"name\": \"android.permission-group.SYSTEM_CLOCK\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_tools\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    },\n    \"android.permission-group.USER_DICTIONARY\": {\n      \"description\": \"Read words in user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_dictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary\",\n      \"label\": \"Read User Dictionary\",\n      \"label_ptr\": \"permgrouplab_dictionary\",\n      \"name\": \"android.permission-group.USER_DICTIONARY\"\n    },\n    \"android.permission-group.VOICEMAIL\": {\n      \"description\": \"Direct access to voicemail.\",\n      \"description_ptr\": \"permgroupdesc_voicemail\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_voicemail\",\n      \"label\": \"Voicemail\",\n      \"label_ptr\": \"permgrouplab_voicemail\",\n      \"name\": \"android.permission-group.VOICEMAIL\"\n    },\n    \"android.permission-group.WALLPAPER\": {\n      \"description\": \"Change the device wallpaper settings.\",\n      \"description_ptr\": \"permgroupdesc_wallpaper\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_wallpaper\",\n      \"label\": \"Wallpaper\",\n      \"label_ptr\": \"permgrouplab_wallpaper\",\n      \"name\": \"android.permission-group.WALLPAPER\"\n    },\n    \"android.permission-group.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Add words to the user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_writeDictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary_write\",\n      \"label\": \"Write User Dictionary\",\n      \"label_ptr\": \"permgrouplab_writeDictionary\",\n      \"name\": \"android.permission-group.WRITE_USER_DICTIONARY\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to access external storage for all users.\",\n      \"description_ptr\": \"permdesc_sdcardAccessAll\",\n      \"label\": \"access external storage of all users\",\n      \"label_ptr\": \"permlab_sdcardAccessAll\",\n      \"name\": \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows the app to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows the app read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        apps.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      approximate location. This location is derived by location services using\\n      network location sources such as cell towers and Wi-Fi. These location\\n      services must be turned on and available to your device for the app to\\n      use them. Apps may use this to determine approximately where you\\n      are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"Allows the holder to access content\\n     providers from the shell. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessContentProvidersExternally\",\n      \"label\": \"access content providers externally\",\n      \"label_ptr\": \"permlab_accessContentProvidersExternally\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      precise location using the Global Positioning System (GPS) or network\\n      location sources such as cell towers and Wi-Fi. These location services\\n      must be turned on and available to your device for the app to use them.\\n      Apps may use this to determine where you are, and may consume additional\\n      battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n      extra location provider commands.  This may allow the app to to interfere\\n      with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for\\n      testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.\",\n      \"description_ptr\": \"permdesc_accessNotifications\",\n      \"label\": \"access notifications\",\n      \"label_ptr\": \"permlab_accessNotifications\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows the app to use SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows the app to make calls to AccountAuthenticators.\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"Allows the app to use any installed\\n        media decoder to decode for playback.\",\n      \"description_ptr\": \"permdesc_anyCodecForPlayback\",\n      \"label\": \"use any media decoder for playback\",\n      \"label_ptr\": \"permlab_anyCodecForPlayback\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the app to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the app to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the app to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the app to mount/unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount/unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the app to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows the app\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"create accounts and set passwords\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the app to control the system's backup and restore mechanism.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows an application to read the current low-level\\n        battery use data.  May allow the application to find out detailed information about\\n        which apps you use.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"read battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an accessibility service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindAccessibilityService\",\n      \"label\": \"bind to an accessibility service\",\n      \"label_ptr\": \"permlab_bindAccessibilityService\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the app to tell the system\\n        which widgets can be used by which app. An app with this permission\\n        can give access to personal data to other apps.\\n        Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindNotificationListenerService\",\n      \"label\": \"bind to a notification listener service\",\n      \"label_ptr\": \"permlab_bindNotificationListenerService\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"Allows the holder to make requests of\\n        package verifiers. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPackageVerifier\",\n      \"label\": \"bind to a package verifier\",\n      \"label_ptr\": \"permlab_bindPackageVerifier\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindTextService\",\n      \"label\": \"bind to a text service\",\n      \"label_ptr\": \"permlab_bindTextService\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a Vpn service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindVpnService\",\n      \"label\": \"bind to a VPN service\",\n      \"label_ptr\": \"permlab_bindVpnService\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the app to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an app package has been removed.\\n        Malicious apps may use this to kill any other running\\n        app.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious apps may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious apps may use this to forge MMS message receipt or to\\n        silently replace the content of any webpage with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the app to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious apps may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"Allows a pre-installed system application to disable the camera use indicator LED.\",\n      \"description_ptr\": \"permdesc_cameraDisableTransmitLed\",\n      \"label\": \"disable transmit indicator LED when camera is in use\",\n      \"label_ptr\": \"permlab_cameraDisableTransmitLed\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows the app to change the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows the app to change whether a\\n        component of another app is enabled or not. Malicious apps may use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get app components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable app components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows the app to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change system display settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"Change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows the app to free phone storage\\n        by deleting files in the cache directories of other applications.  This may cause other\\n        applications to start up more slowly as they need to re-retrieve their data.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all app cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows the app to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other apps' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to configure and connect to Wifi displays.\",\n      \"description_ptr\": \"permdesc_configureWifiDisplay\",\n      \"label\": \"configure Wifi displays\",\n      \"label_ptr\": \"permlab_configureWifiDisplay\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"Allows the app to launch the full backup confirmation UI.  Not to be used by any app.\",\n      \"description_ptr\": \"permdesc_confirm_full_backup\",\n      \"label\": \"confirm a full backup or restore operation\",\n      \"label_ptr\": \"permlab_confirm_full_backup\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows the app to enable/disable location\\n        update notifications from the radio.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to control low-level features of Wifi displays.\",\n      \"description_ptr\": \"permdesc_controlWifiDisplay\",\n      \"label\": \"control Wifi displays\",\n      \"label_ptr\": \"permlab_controlWifiDisplay\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"copy content\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"copy content\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows the app to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other apps' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows the app to delete\\n        Android packages. Malicious apps may use this to delete important apps.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete apps\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the app to turn the phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows the app to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SCREENLOCK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows the app to retrieve\\n        internal state of the system. Malicious apps may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.STATUS_BAR\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"Allows an application to register an input filter\\n            which filters the stream of all user events before they are dispatched. Malicious app\\n            may control the system UI whtout user intervention.\",\n      \"description_ptr\": \"permdesc_filter_events\",\n      \"label\": \"filter events\",\n      \"label_ptr\": \"permlab_filter_events\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the app to control the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows the app to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force app to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows the app to forcibly stop other apps.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other apps\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"Allows the application to temporarily freeze\\n        the screen for a full-screen transition.\",\n      \"description_ptr\": \"permdesc_freezeScreen\",\n      \"label\": \"freeze screen\",\n      \"label_ptr\": \"permlab_freezeScreen\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"Allows the app to retrieve\\n        collected application operation statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_getAppOpsStats\",\n      \"label\": \"retrieve app ops statistics\",\n      \"label_ptr\": \"permlab_getAppOpsStats\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"Allows the app to retrieve\\n        detailed information about currently and recently running tasks. Malicious apps may\\n        discover private information about other apps.\",\n      \"description_ptr\": \"permdesc_getDetailedTasks\",\n      \"label\": \"retrieve details of running apps\",\n      \"label_ptr\": \"permlab_getDetailedTasks\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"Allows the holder to retrieve private information\\n        about the current application in the foreground of the screen.\",\n      \"description_ptr\": \"permdesc_getTopActivityInfo\",\n      \"label\": \"get current app info\",\n      \"label_ptr\": \"permlab_getTopActivityInfo\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"Allows an application to grant or revoke\\n        specific permissions for it or other applications.  Malicious applications may use this\\n        to access features you have not granted them.\\n    \",\n      \"description_ptr\": \"permdesc_grantRevokePermissions\",\n      \"label\": \"grant or revoke permissions\",\n      \"label_ptr\": \"permlab_grantRevokePermissions\",\n      \"name\": \"android.permission.GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the app to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows the app to deliver\\n        its own input events (key presses, etc.) to other apps. Malicious\\n        apps may use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources\\n      for testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows the app to install new or updated\\n        Android packages. Malicious apps may use this to add new apps with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install apps\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"Allows the app to perform actions\\n        across different users on the device.  Malicious apps may use this to violate\\n        the protection between users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsers\",\n      \"label\": \"interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsers\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"Allows all possible interactions across\\n        users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsersFull\",\n      \"label\": \"full license to interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsersFull\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the app to create\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MAGNIFY_DISPLAY\": {\n      \"description\": \"Allows an application to magnify the content of a\\n        display. Malicious apps may transform the display content in a way that renders the\\n        device unusable.\",\n      \"description_ptr\": \"permdesc_magnify_display\",\n      \"label\": \"magnify display\",\n      \"label_ptr\": \"permlab_magnify_display\",\n      \"name\": \"android.permission.MAGNIFY_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows the app to\\n    perform operations like adding and removing accounts, and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"add or remove accounts\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows the app to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage app tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"Allows the app to manage network policies and define app-specific rules.\",\n      \"description_ptr\": \"permdesc_manageNetworkPolicy\",\n      \"label\": \"manage network policy\",\n      \"label_ptr\": \"permlab_manageNetworkPolicy\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the app to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"Allows apps to manage users on the device, including query, creation and deletion.\",\n      \"description_ptr\": \"permdesc_manageUsers\",\n      \"label\": \"manage users\",\n      \"label_ptr\": \"permlab_manageUsers\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows the app to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed apps.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.AUDIO_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_modifyNetworkAccounting\",\n      \"label\": \"modify network usage accounting\",\n      \"label_ptr\": \"permlab_modifyNetworkAccounting\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the app to control the\\n        phone features of the device. An app with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"erase SD Card\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"access SD Card filesystem\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows the app to move app resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"move app resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the app to modify collected component usage statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"Allows the app to verify a package is\\n        installable.\",\n      \"description_ptr\": \"permdesc_packageVerificationAgent\",\n      \"label\": \"verify packages\",\n      \"label_ptr\": \"permlab_packageVerificationAgent\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the app to start CDMA provisioning.\\n        Malicious apps may unnecessarily start CDMA provisioning.\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to process\\n      outgoing calls and change the number to be dialed. This permission allows\\n      the app to monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n      cell broadcast messages received by your device. Cell broadcast alerts\\n      are delivered in some locations to warn you of emergency situations.\\n      Malicious apps may interfere with the performance or operation of your\\n      device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to test a permission for the SD card that will be available on future devices.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"test access to protected storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows the app to read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows the app to watch the\\n        keys you press even when interacting with another app (such\\n        as typing a password). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows the app to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"Allows the app to read historical network usage for specific networks and apps.\",\n      \"description_ptr\": \"permdesc_readNetworkUsageHistory\",\n      \"label\": \"read historical network usage\",\n      \"label_ptr\": \"permlab_readNetworkUsageHistory\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"Allows the app to read\\n     personal profile information stored on your device, such as your name and\\n     contact information. This means the app can identify you and may send your\\n     profile information to others.\",\n      \"description_ptr\": \"permdesc_readProfile\",\n      \"label\": \"read your own contact card\",\n      \"label_ptr\": \"permlab_readProfile\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app\\n      to access and sync social updates from you and your friends. Be careful\\n      when sharing information -- this allows the app to read communications\\n      between you and your friends on social networks, regardless of\\n      confidentiality. Note: this permission may not be enforced on all social\\n      networks.\",\n      \"description_ptr\": \"permdesc_readSocialStream\",\n      \"label\": \"read your social stream\",\n      \"label_ptr\": \"permlab_readSocialStream\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to read all words,\\n       names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read terms you added to the dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.USER_DICTIONARY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the app to force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows the app to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system apps.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows the app to record audio with the\\n      microphone.  This permission allows the app to record audio at any time\\n      without your confirmation.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"Allows the app to remove\\n        tasks and kill their apps. Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_removeTasks\",\n      \"label\": \"stop running apps\",\n      \"label_ptr\": \"permlab_removeTasks\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"Allows the app to retrieve\\n        the content of the active window. Malicious apps may retrieve\\n        the entire window content and examine all its text except passwords.\",\n      \"description_ptr\": \"permdesc_retrieve_window_content\",\n      \"label\": \"retrieve screen content\",\n      \"label_ptr\": \"permlab_retrieve_window_content\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_INFO\": {\n      \"description\": \"Allows an application to retrieve\\n         information about the the windows from the window manager. Malicious apps may\\n         retrieve information that is intended for internal system usage.\",\n      \"description_ptr\": \"permdesc_retrieve_window_info\",\n      \"label\": \"retrieve window info\",\n      \"label_ptr\": \"permlab_retrieve_window_info\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"Allows the app to send\\n      requests to other messaging apps to handle respond-via-message events for incoming\\n      calls.\",\n      \"description_ptr\": \"permdesc_sendRespondViaMessageRequest\",\n      \"label\": \"send respond-via-message events\",\n      \"label_ptr\": \"permlab_sendRespondViaMessageRequest\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"Allows the holder to access serial ports using the SerialManager API.\",\n      \"description_ptr\": \"permdesc_serialPort\",\n      \"label\": \"access serial ports\",\n      \"label_ptr\": \"permlab_serialPort\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows the app to\\n        monitor and control how the system launches activities.\\n        Malicious apps may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all app launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows the app\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"force background apps to close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows the app to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows the app to turn\\n        on debugging for another app. Malicious apps may use this\\n        to kill other apps.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable app debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"Allows the app to change\\n        the keyboard layout. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setKeyboardLayout\",\n      \"label\": \"change keyboard layout\",\n      \"label_ptr\": \"permlab_setKeyboardLayout\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows the app to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows the app to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows the app to\\n        modify your preferred apps. Malicious apps may\\n        silently change the apps that are run, spoofing your\\n        existing apps to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred apps\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows the app\\n        to control the maximum number of processes that will run. Never\\n        needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"Allows the app to control the\\n        screen compatibility mode of other applications.  Malicious applications may\\n        break the behavior of other applications.\",\n      \"description_ptr\": \"permdesc_setScreenCompatibility\",\n      \"label\": \"set screen compatibility\",\n      \"label_ptr\": \"permlab_setScreenCompatibility\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows the app to change the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_CLOCK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows the app to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to apps\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"Allows the app to start any activity, regardless of permission protection or exported state.\",\n      \"description_ptr\": \"permdesc_startAnyActivity\",\n      \"label\": \"start any activity\",\n      \"label_ptr\": \"permlab_startAnyActivity\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows the app to disable the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the app to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another app.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows the app to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows the app to modify\\n      your currently synced feeds. Malicious apps may change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to draw on top of other\\n        applications or parts of the user interface.  They may interfere with your\\n        use of the interface in any application, or change what you think you are\\n        seeing in other applications.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.DISPLAY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"Allows an application to temporarily\\n         enable accessibility on the device. Malicious apps may enable accessibility without\\n         user consent.\",\n      \"description_ptr\": \"permdesc_temporary_enable_accessibility\",\n      \"label\": \"temporary enable accessibility\",\n      \"label_ptr\": \"permlab_temporary_enable_accessibility\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected application operation statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateAppOpsStats\",\n      \"label\": \"modify app ops statistics\",\n      \"label_ptr\": \"permlab_updateAppOpsStats\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected battery statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateBatteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_updateBatteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.\",\n      \"description_ptr\": \"permdesc_updateLock\",\n      \"label\": \"discourage automatic device updates\",\n      \"label_ptr\": \"permlab_updateLock\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows the app to request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use accounts on the device\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows the app to change network settings and to intercept and inspect all network traffic,\\n      for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\\n      packets without your knowledge.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"change/intercept network settings and traffic\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n     add, remove, change events that you can modify on your phone, including\\n     those of friends or co-workers. This may allow the app to send messages\\n     that appear to come from calendar owners, or modify events without the\\n     owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows the app to modify the\\n        Google services map.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows the app to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"Allows the app to\\n      change or add to personal profile information stored on your device, such\\n      as your name and contact information.  This means the app can identify you\\n      and may send your profile information to others.\",\n      \"description_ptr\": \"permdesc_writeProfile\",\n      \"label\": \"modify your own contact card\",\n      \"label_ptr\": \"permlab_writeProfile\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's secure settings data. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows the app to write\\n      to SMS messages stored on your phone or SIM card. Malicious apps\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app to\\n     display social updates from your friends.  Be careful when sharing\\n     information -- this allows the app to produce messages that may appear to\\n     come from a friend. Note: this permission may not be enforced on all social\\n     networks.\",\n      \"description_ptr\": \"permdesc_writeSocialStream\",\n      \"label\": \"write to your social stream\",\n      \"label_ptr\": \"permlab_writeSocialStream\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"add words to user-defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.WRITE_USER_DICTIONARY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n      an installed alarm clock app. Some alarm clock apps may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.DEVICE_ALARMS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the app to read the\\n     history of all URLs that the Browser has visited, and all of the Browser's\\n     bookmarks. Note: this permission may not be enforced by third-party\\n     browsers or other  applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read your Web bookmarks and history\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the\\n        app to modify the Browser's history or bookmarks stored on your phone.\\n        This may allow the app to erase or modify Browser data.  Note:\\n        this permission may note be enforced by third-party browsers or other\\n        applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write web bookmarks and history\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_19.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCESSIBILITY_FEATURES\": {\n      \"description\": \"Features that assistive technology can request.\",\n      \"description_ptr\": \"permgroupdesc_accessibilityFeatures\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accessibility_features\",\n      \"label\": \"Accessibility features\",\n      \"label_ptr\": \"permgrouplab_accessibilityFeatures\",\n      \"name\": \"android.permission-group.ACCESSIBILITY_FEATURES\"\n    },\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accounts\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.AFFECTS_BATTERY\": {\n      \"description\": \"Use features that can quickly drain battery.\",\n      \"description_ptr\": \"permgroupdesc_affectsBattery\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_affects_battery\",\n      \"label\": \"Affects Battery\",\n      \"label_ptr\": \"permgrouplab_affectsBattery\",\n      \"name\": \"android.permission-group.AFFECTS_BATTERY\"\n    },\n    \"android.permission-group.APP_INFO\": {\n      \"description\": \"Ability to affect behavior of other applications on your device.\",\n      \"description_ptr\": \"permgroupdesc_appInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_app_info\",\n      \"label\": \"Your applications information\",\n      \"label_ptr\": \"permgrouplab_appInfo\",\n      \"name\": \"android.permission-group.APP_INFO\"\n    },\n    \"android.permission-group.AUDIO_SETTINGS\": {\n      \"description\": \"Change audio settings.\",\n      \"description_ptr\": \"permgroupdesc_audioSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_audio_settings\",\n      \"label\": \"Audio Settings\",\n      \"label_ptr\": \"permgrouplab_audioSettings\",\n      \"name\": \"android.permission-group.AUDIO_SETTINGS\"\n    },\n    \"android.permission-group.BLUETOOTH_NETWORK\": {\n      \"description\": \"Access devices and networks through Bluetooth.\",\n      \"description_ptr\": \"permgroupdesc_bluetoothNetwork\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bluetooth\",\n      \"label\": \"Bluetooth\",\n      \"label_ptr\": \"permgrouplab_bluetoothNetwork\",\n      \"name\": \"android.permission-group.BLUETOOTH_NETWORK\"\n    },\n    \"android.permission-group.BOOKMARKS\": {\n      \"description\": \"Direct access to bookmarks and browser history.\",\n      \"description_ptr\": \"permgroupdesc_bookmarks\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bookmarks\",\n      \"label\": \"Bookmarks and History\",\n      \"label_ptr\": \"permgrouplab_bookmarks\",\n      \"name\": \"android.permission-group.BOOKMARKS\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"Direct access to calendar and events.\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"Direct access to camera for image or video capture.\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Do things that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for app developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.DEVICE_ALARMS\": {\n      \"description\": \"Set the alarm clock.\",\n      \"description_ptr\": \"permgroupdesc_deviceAlarms\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_device_alarms\",\n      \"label\": \"Alarm\",\n      \"label_ptr\": \"permgrouplab_deviceAlarms\",\n      \"name\": \"android.permission-group.DEVICE_ALARMS\"\n    },\n    \"android.permission-group.DISPLAY\": {\n      \"description\": \"Effect the UI of other applications.\",\n      \"description_ptr\": \"permgroupdesc_display\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_display\",\n      \"label\": \"Other Application UI\",\n      \"label_ptr\": \"permgrouplab_display\",\n      \"name\": \"android.permission-group.DISPLAY\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location.\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS, email, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_messages\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"Direct access to the microphone to record audio.\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Access various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_network\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to information about you, stored in on your contact card.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_personal_info\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.SCREENLOCK\": {\n      \"description\": \"Ability to affect behavior of the lock screen on your device.\",\n      \"description_ptr\": \"permgroupdesc_screenlock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_screenlock\",\n      \"label\": \"Lock screen\",\n      \"label_ptr\": \"permgrouplab_screenlock\",\n      \"name\": \"android.permission-group.SCREENLOCK\"\n    },\n    \"android.permission-group.SOCIAL_INFO\": {\n      \"description\": \"Direct access to information about your contacts and social connections.\",\n      \"description_ptr\": \"permgroupdesc_socialInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_social_info\",\n      \"label\": \"Your social information\",\n      \"label_ptr\": \"permgrouplab_socialInfo\",\n      \"name\": \"android.permission-group.SOCIAL_INFO\"\n    },\n    \"android.permission-group.STATUS_BAR\": {\n      \"description\": \"Change the device status bar settings.\",\n      \"description_ptr\": \"permgroupdesc_statusBar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_status_bar\",\n      \"label\": \"Status Bar\",\n      \"label_ptr\": \"permgrouplab_statusBar\",\n      \"name\": \"android.permission-group.STATUS_BAR\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYNC_SETTINGS\": {\n      \"description\": \"Access to the sync settings.\",\n      \"description_ptr\": \"permgroupdesc_syncSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_sync_settings\",\n      \"label\": \"Sync Settings\",\n      \"label_ptr\": \"permgrouplab_syncSettings\",\n      \"name\": \"android.permission-group.SYNC_SETTINGS\"\n    },\n    \"android.permission-group.SYSTEM_CLOCK\": {\n      \"description\": \"Change the device time or timezone.\",\n      \"description_ptr\": \"permgroupdesc_systemClock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_clock\",\n      \"label\": \"Clock\",\n      \"label_ptr\": \"permgrouplab_systemClock\",\n      \"name\": \"android.permission-group.SYSTEM_CLOCK\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_tools\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    },\n    \"android.permission-group.USER_DICTIONARY\": {\n      \"description\": \"Read words in user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_dictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary\",\n      \"label\": \"Read User Dictionary\",\n      \"label_ptr\": \"permgrouplab_dictionary\",\n      \"name\": \"android.permission-group.USER_DICTIONARY\"\n    },\n    \"android.permission-group.VOICEMAIL\": {\n      \"description\": \"Direct access to voicemail.\",\n      \"description_ptr\": \"permgroupdesc_voicemail\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_voicemail\",\n      \"label\": \"Voicemail\",\n      \"label_ptr\": \"permgrouplab_voicemail\",\n      \"name\": \"android.permission-group.VOICEMAIL\"\n    },\n    \"android.permission-group.WALLPAPER\": {\n      \"description\": \"Change the device wallpaper settings.\",\n      \"description_ptr\": \"permgroupdesc_wallpaper\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_wallpaper\",\n      \"label\": \"Wallpaper\",\n      \"label_ptr\": \"permgrouplab_wallpaper\",\n      \"name\": \"android.permission-group.WALLPAPER\"\n    },\n    \"android.permission-group.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Add words to the user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_writeDictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary_write\",\n      \"label\": \"Write User Dictionary\",\n      \"label_ptr\": \"permgrouplab_writeDictionary\",\n      \"name\": \"android.permission-group.WRITE_USER_DICTIONARY\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to access external storage for all users.\",\n      \"description_ptr\": \"permdesc_sdcardAccessAll\",\n      \"label\": \"access external storage of all users\",\n      \"label_ptr\": \"permlab_sdcardAccessAll\",\n      \"name\": \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows the app to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows the app read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        apps.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      approximate location. This location is derived by location services using\\n      network location sources such as cell towers and Wi-Fi. These location\\n      services must be turned on and available to your device for the app to\\n      use them. Apps may use this to determine approximately where you\\n      are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"Allows the holder to access content\\n     providers from the shell. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessContentProvidersExternally\",\n      \"label\": \"access content providers externally\",\n      \"label_ptr\": \"permlab_accessContentProvidersExternally\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      precise location using the Global Positioning System (GPS) or network\\n      location sources such as cell towers and Wi-Fi. These location services\\n      must be turned on and available to your device for the app to use them.\\n      Apps may use this to determine where you are, and may consume additional\\n      battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"Allows an application to access keguard secure storage.\",\n      \"description_ptr\": \"permdesc_access_keyguard_secure_storage\",\n      \"label\": \"Access keyguard secure storage\",\n      \"label_ptr\": \"permlab_access_keyguard_secure_storage\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n      extra location provider commands.  This may allow the app to to interfere\\n      with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for\\n      testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"Allows an application to listen for observations on network conditions. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessNetworkConditions\",\n      \"label\": \"listen for observations on network conditions\",\n      \"label_ptr\": \"permlab_accessNetworkConditions\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.\",\n      \"description_ptr\": \"permdesc_accessNotifications\",\n      \"label\": \"access notifications\",\n      \"label_ptr\": \"permlab_accessNotifications\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows the app to use SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows the app to make calls to AccountAuthenticators.\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"Allows the app to use any installed\\n        media decoder to decode for playback.\",\n      \"description_ptr\": \"permdesc_anyCodecForPlayback\",\n      \"label\": \"use any media decoder for playback\",\n      \"label_ptr\": \"permlab_anyCodecForPlayback\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the app to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the app to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the app to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the app to mount/unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount/unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the app to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows the app\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"create accounts and set passwords\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the app to control the system's backup and restore mechanism.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows an application to read the current low-level\\n        battery use data.  May allow the application to find out detailed information about\\n        which apps you use.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"read battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an accessibility service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindAccessibilityService\",\n      \"label\": \"bind to an accessibility service\",\n      \"label_ptr\": \"permlab_bindAccessibilityService\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the app to tell the system\\n        which widgets can be used by which app. An app with this permission\\n        can give access to personal data to other apps.\\n        Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_CALL_SERVICE\": {\n      \"description\": \"Allows the app to control when and how the user sees the in-call screen.\",\n      \"description_ptr\": \"permdesc_bind_call_service\",\n      \"label\": \"interact with in-call screen\",\n      \"label_ptr\": \"permlab_bind_call_service\",\n      \"name\": \"android.permission.BIND_CALL_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"Allows the holder to bind to applications\\n        that are emulating NFC cards. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindNfcService\",\n      \"label\": \"bind to NFC service\",\n      \"label_ptr\": \"permlab_bindNfcService\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindNotificationListenerService\",\n      \"label\": \"bind to a notification listener service\",\n      \"label_ptr\": \"permlab_bindNotificationListenerService\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"Allows the holder to make requests of\\n        package verifiers. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPackageVerifier\",\n      \"label\": \"bind to a package verifier\",\n      \"label_ptr\": \"permlab_bindPackageVerifier\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a print service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPrintService\",\n      \"label\": \"bind to a print service\",\n      \"label_ptr\": \"permlab_bindPrintService\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a print spooler service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPrintSpoolerService\",\n      \"label\": \"bind to a print spooler service\",\n      \"label_ptr\": \"permlab_bindPrintSpoolerService\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a remote display. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteDisplay\",\n      \"label\": \"bind to a remote display\",\n      \"label_ptr\": \"permlab_bindRemoteDisplay\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindTextService\",\n      \"label\": \"bind to a text service\",\n      \"label_ptr\": \"permlab_bindTextService\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a Vpn service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindVpnService\",\n      \"label\": \"bind to a VPN service\",\n      \"label_ptr\": \"permlab_bindVpnService\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"Allows the app to\\n      pair with remote devices without user interaction.\",\n      \"description_ptr\": \"permdesc_bluetoothPriv\",\n      \"label\": \"allow Bluetooth pairing by Application\",\n      \"label_ptr\": \"permlab_bluetoothPriv\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the app to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an app package has been removed.\\n        Malicious apps may use this to kill any other running\\n        app.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious apps may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious apps may use this to forge MMS message receipt or to\\n        silently replace the content of any webpage with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the app to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious apps may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"Allows a pre-installed system application to disable the camera use indicator LED.\",\n      \"description_ptr\": \"permdesc_cameraDisableTransmitLed\",\n      \"label\": \"disable transmit indicator LED when camera is in use\",\n      \"label_ptr\": \"permlab_cameraDisableTransmitLed\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"Allows the app to capture audio for Hotword detection. The capture can\\n      happen in the background but does not prevent other audio capture (e.g. Camcorder).\",\n      \"description_ptr\": \"permdesc_captureAudioHotword\",\n      \"label\": \"Hotword detection\",\n      \"label_ptr\": \"permlab_captureAudioHotword\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect audio output.\",\n      \"description_ptr\": \"permdesc_captureAudioOutput\",\n      \"label\": \"capture audio output\",\n      \"label_ptr\": \"permlab_captureAudioOutput\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect secure video output.\",\n      \"description_ptr\": \"permdesc_captureSecureVideoOutput\",\n      \"label\": \"capture secure video output\",\n      \"label_ptr\": \"permlab_captureSecureVideoOutput\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect video output.\",\n      \"description_ptr\": \"permdesc_captureVideoOutput\",\n      \"label\": \"capture video output\",\n      \"label_ptr\": \"permlab_captureVideoOutput\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows the app to change the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows the app to change whether a\\n        component of another app is enabled or not. Malicious apps may use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get app components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable app components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows the app to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change system display settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"Change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows the app to free phone storage\\n        by deleting files in the cache directories of other applications.  This may cause other\\n        applications to start up more slowly as they need to re-retrieve their data.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all app cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows the app to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other apps' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to configure and connect to Wifi displays.\",\n      \"description_ptr\": \"permdesc_configureWifiDisplay\",\n      \"label\": \"configure Wifi displays\",\n      \"label_ptr\": \"permlab_configureWifiDisplay\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"Allows the app to launch the full backup confirmation UI.  Not to be used by any app.\",\n      \"description_ptr\": \"permdesc_confirm_full_backup\",\n      \"label\": \"confirm a full backup or restore operation\",\n      \"label_ptr\": \"permlab_confirm_full_backup\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"Allows an application to control keguard.\",\n      \"description_ptr\": \"permdesc_control_keyguard\",\n      \"label\": \"Control displaying and hiding keyguard\",\n      \"label_ptr\": \"permlab_control_keyguard\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows the app to enable/disable location\\n        update notifications from the radio.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to control low-level features of Wifi displays.\",\n      \"description_ptr\": \"permdesc_controlWifiDisplay\",\n      \"label\": \"control Wifi displays\",\n      \"label_ptr\": \"permlab_controlWifiDisplay\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"copy content\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"copy content\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows the app to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other apps' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows the app to delete\\n        Android packages. Malicious apps may use this to delete important apps.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete apps\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the app to turn the phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows the app to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SCREENLOCK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows the app to retrieve\\n        internal state of the system. Malicious apps may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.STATUS_BAR\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"Allows an application to register an input filter\\n            which filters the stream of all user events before they are dispatched. Malicious app\\n            may control the system UI whtout user intervention.\",\n      \"description_ptr\": \"permdesc_filter_events\",\n      \"label\": \"filter events\",\n      \"label_ptr\": \"permlab_filter_events\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the app to control the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows the app to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force app to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows the app to forcibly stop other apps.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other apps\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"Allows the application to temporarily freeze\\n        the screen for a full-screen transition.\",\n      \"description_ptr\": \"permdesc_freezeScreen\",\n      \"label\": \"freeze screen\",\n      \"label_ptr\": \"permlab_freezeScreen\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"Allows the app to retrieve\\n        collected application operation statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_getAppOpsStats\",\n      \"label\": \"retrieve app ops statistics\",\n      \"label_ptr\": \"permlab_getAppOpsStats\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"Allows the app to retrieve\\n        detailed information about currently and recently running tasks. Malicious apps may\\n        discover private information about other apps.\",\n      \"description_ptr\": \"permdesc_getDetailedTasks\",\n      \"label\": \"retrieve details of running apps\",\n      \"label_ptr\": \"permlab_getDetailedTasks\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"Allows the holder to retrieve private information\\n        about the current application in the foreground of the screen.\",\n      \"description_ptr\": \"permdesc_getTopActivityInfo\",\n      \"label\": \"get current app info\",\n      \"label_ptr\": \"permlab_getTopActivityInfo\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"Allows an application to grant or revoke\\n        specific permissions for it or other applications.  Malicious applications may use this\\n        to access features you have not granted them.\\n    \",\n      \"description_ptr\": \"permdesc_grantRevokePermissions\",\n      \"label\": \"grant or revoke permissions\",\n      \"label_ptr\": \"permlab_grantRevokePermissions\",\n      \"name\": \"android.permission.GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the app to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows the app to deliver\\n        its own input events (key presses, etc.) to other apps. Malicious\\n        apps may use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources\\n      for testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows the app to install new or updated\\n        Android packages. Malicious apps may use this to add new apps with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install apps\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"Allows the app to perform actions\\n        across different users on the device.  Malicious apps may use this to violate\\n        the protection between users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsers\",\n      \"label\": \"interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsers\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"Allows all possible interactions across\\n        users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsersFull\",\n      \"label\": \"full license to interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsersFull\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the app to create\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_invokeCarrierSetup\",\n      \"label\": \"invoke the carrier-provided configuration app\",\n      \"label_ptr\": \"permlab_invokeCarrierSetup\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MAGNIFY_DISPLAY\": {\n      \"description\": \"Allows an application to magnify the content of a\\n        display. Malicious apps may transform the display content in a way that renders the\\n        device unusable.\",\n      \"description_ptr\": \"permdesc_magnify_display\",\n      \"label\": \"magnify display\",\n      \"label_ptr\": \"permlab_magnify_display\",\n      \"name\": \"android.permission.MAGNIFY_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows the app to\\n    perform operations like adding and removing accounts, and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"add or remove accounts\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"Allows the app to add, remove, and\\n        modify the activity stacks in which other apps run.  Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_manageActivityStacks\",\n      \"label\": \"manage activity stacks\",\n      \"label_ptr\": \"permlab_manageActivityStacks\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows the app to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage app tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"Allows the app to install and uninstall CA certificates as trusted credentials.\",\n      \"description_ptr\": \"permdesc_manageCaCertificates\",\n      \"label\": \"manage trusted credentials\",\n      \"label_ptr\": \"permlab_manageCaCertificates\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"Allows the holder to add or remove active device\\n        administrators. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageDeviceAdmins\",\n      \"label\": \"add or remove a device admin\",\n      \"label_ptr\": \"permlab_manageDeviceAdmins\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"Allows the app to manage document storage.\",\n      \"description_ptr\": \"permdesc_manageDocs\",\n      \"label\": \"manage document storage\",\n      \"label_ptr\": \"permlab_manageDocs\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"Allows the app to manage network policies and define app-specific rules.\",\n      \"description_ptr\": \"permdesc_manageNetworkPolicy\",\n      \"label\": \"manage network policy\",\n      \"label_ptr\": \"permlab_manageNetworkPolicy\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the app to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"Allows apps to manage users on the device, including query, creation and deletion.\",\n      \"description_ptr\": \"permdesc_manageUsers\",\n      \"label\": \"manage users\",\n      \"label_ptr\": \"permlab_manageUsers\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MARK_NETWORK_SOCKET\": {\n      \"description\": \"Allows the app to modify socket marks for routing\",\n      \"description_ptr\": \"permdesc_markNetworkSocket\",\n      \"label\": \"modify socket marks\",\n      \"label_ptr\": \"permlab_markNetworkSocket\",\n      \"name\": \"android.permission.MARK_NETWORK_SOCKET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows the app to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed apps.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"Allows the app to control media playback and access the media information (title, author...).\",\n      \"description_ptr\": \"permdesc_mediaContentControl\",\n      \"label\": \"control media playback and metadata access\",\n      \"label_ptr\": \"permlab_mediaContentControl\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.AUDIO_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_modifyNetworkAccounting\",\n      \"label\": \"modify network usage accounting\",\n      \"label_ptr\": \"permlab_modifyNetworkAccounting\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the app to control the\\n        phone features of the device. An app with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"erase SD Card\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"access SD Card filesystem\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows the app to move app resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"move app resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the app to modify collected component usage statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"Allows the app to verify a package is\\n        installable.\",\n      \"description_ptr\": \"permdesc_packageVerificationAgent\",\n      \"label\": \"verify packages\",\n      \"label_ptr\": \"permlab_packageVerificationAgent\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the app to start CDMA provisioning.\\n        Malicious apps may unnecessarily start CDMA provisioning.\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n      cell broadcast messages received by your device. Cell broadcast alerts\\n      are delivered in some locations to warn you of emergency situations.\\n      Malicious apps may interfere with the performance or operation of your\\n      device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows the app to read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows the app to watch the\\n        keys you press even when interacting with another app (such\\n        as typing a password). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows the app to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"Allows the app to read historical network usage for specific networks and apps.\",\n      \"description_ptr\": \"permdesc_readNetworkUsageHistory\",\n      \"label\": \"read historical network usage\",\n      \"label_ptr\": \"permlab_readNetworkUsageHistory\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"Allows the app to read\\n     personal profile information stored on your device, such as your name and\\n     contact information. This means the app can identify you and may send your\\n     profile information to others.\",\n      \"description_ptr\": \"permdesc_readProfile\",\n      \"label\": \"read your own contact card\",\n      \"label_ptr\": \"permlab_readProfile\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app\\n      to access and sync social updates from you and your friends. Be careful\\n      when sharing information -- this allows the app to read communications\\n      between you and your friends on social networks, regardless of\\n      confidentiality. Note: this permission may not be enforced on all social\\n      networks.\",\n      \"description_ptr\": \"permdesc_readSocialStream\",\n      \"label\": \"read your social stream\",\n      \"label_ptr\": \"permlab_readSocialStream\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to read all words,\\n       names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read terms you added to the dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.USER_DICTIONARY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the app to force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows the app to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system apps.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows the app to record audio with the\\n      microphone.  This permission allows the app to record audio at any time\\n      without your confirmation.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"Allows the app to remove\\n        tasks and kill their apps. Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_removeTasks\",\n      \"label\": \"stop running apps\",\n      \"label_ptr\": \"permlab_removeTasks\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"Allows the app to retrieve\\n        the content of the active window. Malicious apps may retrieve\\n        the entire window content and examine all its text except passwords.\",\n      \"description_ptr\": \"permdesc_retrieve_window_content\",\n      \"label\": \"retrieve screen content\",\n      \"label_ptr\": \"permlab_retrieve_window_content\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_INFO\": {\n      \"description\": \"Allows an application to retrieve\\n         information about the the windows from the window manager. Malicious apps may\\n         retrieve information that is intended for internal system usage.\",\n      \"description_ptr\": \"permdesc_retrieve_window_info\",\n      \"label\": \"retrieve window info\",\n      \"label_ptr\": \"permlab_retrieve_window_info\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"Allows the app to send\\n      requests to other messaging apps to handle respond-via-message events for incoming\\n      calls.\",\n      \"description_ptr\": \"permdesc_sendRespondViaMessageRequest\",\n      \"label\": \"send respond-via-message events\",\n      \"label_ptr\": \"permlab_sendRespondViaMessageRequest\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"Allows the holder to access serial ports using the SerialManager API.\",\n      \"description_ptr\": \"permdesc_serialPort\",\n      \"label\": \"access serial ports\",\n      \"label_ptr\": \"permlab_serialPort\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows the app to\\n        monitor and control how the system launches activities.\\n        Malicious apps may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all app launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows the app\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"force background apps to close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows the app to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows the app to turn\\n        on debugging for another app. Malicious apps may use this\\n        to kill other apps.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable app debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"Allows the app to change\\n        the keyboard layout. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setKeyboardLayout\",\n      \"label\": \"change keyboard layout\",\n      \"label_ptr\": \"permlab_setKeyboardLayout\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows the app to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows the app to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows the app to\\n        modify your preferred apps. Malicious apps may\\n        silently change the apps that are run, spoofing your\\n        existing apps to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred apps\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows the app\\n        to control the maximum number of processes that will run. Never\\n        needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"Allows the app to control the\\n        screen compatibility mode of other applications.  Malicious applications may\\n        break the behavior of other applications.\",\n      \"description_ptr\": \"permdesc_setScreenCompatibility\",\n      \"label\": \"set screen compatibility\",\n      \"label_ptr\": \"permlab_setScreenCompatibility\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows the app to change the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_CLOCK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows the app to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to apps\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"Allows the app to start any activity, regardless of permission protection or exported state.\",\n      \"description_ptr\": \"permdesc_startAnyActivity\",\n      \"label\": \"start any activity\",\n      \"label_ptr\": \"permlab_startAnyActivity\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows the app to disable the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the app to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another app.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows the app to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows the app to modify\\n      your currently synced feeds. Malicious apps may change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to draw on top of other\\n        applications or parts of the user interface.  They may interfere with your\\n        use of the interface in any application, or change what you think you are\\n        seeing in other applications.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.DISPLAY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"Allows an application to temporarily\\n         enable accessibility on the device. Malicious apps may enable accessibility without\\n         user consent.\",\n      \"description_ptr\": \"permdesc_temporary_enable_accessibility\",\n      \"label\": \"temporary enable accessibility\",\n      \"label_ptr\": \"permlab_temporary_enable_accessibility\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected application operation statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateAppOpsStats\",\n      \"label\": \"modify app ops statistics\",\n      \"label_ptr\": \"permlab_updateAppOpsStats\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected battery statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateBatteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_updateBatteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.\",\n      \"description_ptr\": \"permdesc_updateLock\",\n      \"label\": \"discourage automatic device updates\",\n      \"label_ptr\": \"permlab_updateLock\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows the app to request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use accounts on the device\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows the app to change network settings and to intercept and inspect all network traffic,\\n      for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\\n      packets without your knowledge.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"change/intercept network settings and traffic\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n     add, remove, change events that you can modify on your phone, including\\n     those of friends or co-workers. This may allow the app to send messages\\n     that appear to come from calendar owners, or modify events without the\\n     owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows the app to modify the\\n        Google services map.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows the app to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"Allows the app to\\n      change or add to personal profile information stored on your device, such\\n      as your name and contact information.  This means the app can identify you\\n      and may send your profile information to others.\",\n      \"description_ptr\": \"permdesc_writeProfile\",\n      \"label\": \"modify your own contact card\",\n      \"label_ptr\": \"permlab_writeProfile\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's secure settings data. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows the app to write\\n      to SMS messages stored on your phone or SIM card. Malicious apps\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app to\\n     display social updates from your friends.  Be careful when sharing\\n     information -- this allows the app to produce messages that may appear to\\n     come from a friend. Note: this permission may not be enforced on all social\\n     networks.\",\n      \"description_ptr\": \"permdesc_writeSocialStream\",\n      \"label\": \"write to your social stream\",\n      \"label_ptr\": \"permlab_writeSocialStream\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"add words to user-defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.WRITE_USER_DICTIONARY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n      an installed alarm clock app. Some alarm clock apps may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.DEVICE_ALARMS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the app to read the\\n     history of all URLs that the Browser has visited, and all of the Browser's\\n     bookmarks. Note: this permission may not be enforced by third-party\\n     browsers or other  applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read your Web bookmarks and history\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the\\n        app to modify the Browser's history or bookmarks stored on your phone.\\n        This may allow the app to erase or modify Browser data.  Note:\\n        this permission may note be enforced by third-party browsers or other\\n        applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write web bookmarks and history\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_21.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCESSIBILITY_FEATURES\": {\n      \"description\": \"Features that assistive technology can request.\",\n      \"description_ptr\": \"permgroupdesc_accessibilityFeatures\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accessibility_features\",\n      \"label\": \"Accessibility features\",\n      \"label_ptr\": \"permgrouplab_accessibilityFeatures\",\n      \"name\": \"android.permission-group.ACCESSIBILITY_FEATURES\"\n    },\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accounts\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.AFFECTS_BATTERY\": {\n      \"description\": \"Use features that can quickly drain battery.\",\n      \"description_ptr\": \"permgroupdesc_affectsBattery\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_affects_battery\",\n      \"label\": \"Affects Battery\",\n      \"label_ptr\": \"permgrouplab_affectsBattery\",\n      \"name\": \"android.permission-group.AFFECTS_BATTERY\"\n    },\n    \"android.permission-group.APP_INFO\": {\n      \"description\": \"Ability to affect behavior of other applications on your device.\",\n      \"description_ptr\": \"permgroupdesc_appInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_app_info\",\n      \"label\": \"Your applications information\",\n      \"label_ptr\": \"permgrouplab_appInfo\",\n      \"name\": \"android.permission-group.APP_INFO\"\n    },\n    \"android.permission-group.AUDIO_SETTINGS\": {\n      \"description\": \"Change audio settings.\",\n      \"description_ptr\": \"permgroupdesc_audioSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_audio_settings\",\n      \"label\": \"Audio Settings\",\n      \"label_ptr\": \"permgrouplab_audioSettings\",\n      \"name\": \"android.permission-group.AUDIO_SETTINGS\"\n    },\n    \"android.permission-group.BLUETOOTH_NETWORK\": {\n      \"description\": \"Access devices and networks through Bluetooth.\",\n      \"description_ptr\": \"permgroupdesc_bluetoothNetwork\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bluetooth\",\n      \"label\": \"Bluetooth\",\n      \"label_ptr\": \"permgrouplab_bluetoothNetwork\",\n      \"name\": \"android.permission-group.BLUETOOTH_NETWORK\"\n    },\n    \"android.permission-group.BOOKMARKS\": {\n      \"description\": \"Direct access to bookmarks and browser history.\",\n      \"description_ptr\": \"permgroupdesc_bookmarks\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bookmarks\",\n      \"label\": \"Bookmarks and History\",\n      \"label_ptr\": \"permgrouplab_bookmarks\",\n      \"name\": \"android.permission-group.BOOKMARKS\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"Direct access to calendar and events.\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"Direct access to camera for image or video capture.\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Do things that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for app developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.DEVICE_ALARMS\": {\n      \"description\": \"Set the alarm clock.\",\n      \"description_ptr\": \"permgroupdesc_deviceAlarms\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_device_alarms\",\n      \"label\": \"Alarm\",\n      \"label_ptr\": \"permgrouplab_deviceAlarms\",\n      \"name\": \"android.permission-group.DEVICE_ALARMS\"\n    },\n    \"android.permission-group.DISPLAY\": {\n      \"description\": \"Effect the UI of other applications.\",\n      \"description_ptr\": \"permgroupdesc_display\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_display\",\n      \"label\": \"Other Application UI\",\n      \"label_ptr\": \"permgrouplab_display\",\n      \"name\": \"android.permission-group.DISPLAY\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location.\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS, email, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_messages\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"Direct access to the microphone to record audio.\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Access various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_network\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to information about you, stored in on your contact card.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_personal_info\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.SCREENLOCK\": {\n      \"description\": \"Ability to affect behavior of the lock screen on your device.\",\n      \"description_ptr\": \"permgroupdesc_screenlock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_screenlock\",\n      \"label\": \"Lock screen\",\n      \"label_ptr\": \"permgrouplab_screenlock\",\n      \"name\": \"android.permission-group.SCREENLOCK\"\n    },\n    \"android.permission-group.SOCIAL_INFO\": {\n      \"description\": \"Direct access to information about your contacts and social connections.\",\n      \"description_ptr\": \"permgroupdesc_socialInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_social_info\",\n      \"label\": \"Your social information\",\n      \"label_ptr\": \"permgrouplab_socialInfo\",\n      \"name\": \"android.permission-group.SOCIAL_INFO\"\n    },\n    \"android.permission-group.STATUS_BAR\": {\n      \"description\": \"Change the device status bar settings.\",\n      \"description_ptr\": \"permgroupdesc_statusBar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_status_bar\",\n      \"label\": \"Status Bar\",\n      \"label_ptr\": \"permgrouplab_statusBar\",\n      \"name\": \"android.permission-group.STATUS_BAR\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYNC_SETTINGS\": {\n      \"description\": \"Access to the sync settings.\",\n      \"description_ptr\": \"permgroupdesc_syncSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_sync_settings\",\n      \"label\": \"Sync Settings\",\n      \"label_ptr\": \"permgrouplab_syncSettings\",\n      \"name\": \"android.permission-group.SYNC_SETTINGS\"\n    },\n    \"android.permission-group.SYSTEM_CLOCK\": {\n      \"description\": \"Change the device time or timezone.\",\n      \"description_ptr\": \"permgroupdesc_systemClock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_clock\",\n      \"label\": \"Clock\",\n      \"label_ptr\": \"permgrouplab_systemClock\",\n      \"name\": \"android.permission-group.SYSTEM_CLOCK\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_tools\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    },\n    \"android.permission-group.USER_DICTIONARY\": {\n      \"description\": \"Read words in user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_dictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary\",\n      \"label\": \"Read User Dictionary\",\n      \"label_ptr\": \"permgrouplab_dictionary\",\n      \"name\": \"android.permission-group.USER_DICTIONARY\"\n    },\n    \"android.permission-group.VOICEMAIL\": {\n      \"description\": \"Direct access to voicemail.\",\n      \"description_ptr\": \"permgroupdesc_voicemail\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_voicemail\",\n      \"label\": \"Voicemail\",\n      \"label_ptr\": \"permgrouplab_voicemail\",\n      \"name\": \"android.permission-group.VOICEMAIL\"\n    },\n    \"android.permission-group.WALLPAPER\": {\n      \"description\": \"Change the device wallpaper settings.\",\n      \"description_ptr\": \"permgroupdesc_wallpaper\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_wallpaper\",\n      \"label\": \"Wallpaper\",\n      \"label_ptr\": \"permgrouplab_wallpaper\",\n      \"name\": \"android.permission-group.WALLPAPER\"\n    },\n    \"android.permission-group.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Add words to the user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_writeDictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary_write\",\n      \"label\": \"Write User Dictionary\",\n      \"label_ptr\": \"permgrouplab_writeDictionary\",\n      \"name\": \"android.permission-group.WRITE_USER_DICTIONARY\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to access external storage for all users.\",\n      \"description_ptr\": \"permdesc_sdcardAccessAll\",\n      \"label\": \"access external storage of all users\",\n      \"label_ptr\": \"permlab_sdcardAccessAll\",\n      \"name\": \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows the app to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows the app read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        apps.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      approximate location. This location is derived by location services using\\n      network location sources such as cell towers and Wi-Fi. These location\\n      services must be turned on and available to your device for the app to\\n      use them. Apps may use this to determine approximately where you\\n      are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"Allows the holder to access content\\n     providers from the shell. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessContentProvidersExternally\",\n      \"label\": \"access content providers externally\",\n      \"label_ptr\": \"permlab_accessContentProvidersExternally\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"Allows an application to provision and use DRM certficates. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessDrmCertificates\",\n      \"label\": \"access DRM certificates\",\n      \"label_ptr\": \"permlab_accessDrmCertificates\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      precise location using the Global Positioning System (GPS) or network\\n      location sources such as cell towers and Wi-Fi. These location services\\n      must be turned on and available to your device for the app to use them.\\n      Apps may use this to determine where you are, and may consume additional\\n      battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"Allows the app to use InputFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessInputFlinger\",\n      \"label\": \"access InputFlinger\",\n      \"label_ptr\": \"permlab_accessInputFlinger\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"Allows an application to access keguard secure storage.\",\n      \"description_ptr\": \"permdesc_access_keyguard_secure_storage\",\n      \"label\": \"Access keyguard secure storage\",\n      \"label_ptr\": \"permlab_access_keyguard_secure_storage\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n      extra location provider commands.  This may allow the app to interfere\\n      with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for\\n      testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"Allows an application to listen for observations on network conditions. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessNetworkConditions\",\n      \"label\": \"listen for observations on network conditions\",\n      \"label_ptr\": \"permlab_accessNetworkConditions\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.\",\n      \"description_ptr\": \"permdesc_accessNotifications\",\n      \"label\": \"access notifications\",\n      \"label_ptr\": \"permlab_accessNotifications\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows the app to use SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows the app to make calls to AccountAuthenticators.\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"Allows the app to use any installed\\n        media decoder to decode for playback.\",\n      \"description_ptr\": \"permdesc_anyCodecForPlayback\",\n      \"label\": \"use any media decoder for playback\",\n      \"label_ptr\": \"permlab_anyCodecForPlayback\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the app to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the app to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the app to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the app to mount/unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount/unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the app to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows the app\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"create accounts and set passwords\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the app to control the system's backup and restore mechanism.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows an application to read the current low-level\\n        battery use data.  May allow the application to find out detailed information about\\n        which apps you use.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"read battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an accessibility service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindAccessibilityService\",\n      \"label\": \"bind to an accessibility service\",\n      \"label_ptr\": \"permlab_bindAccessibilityService\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the app to tell the system\\n        which widgets can be used by which app. An app with this permission\\n        can give access to personal data to other apps.\\n        Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindConditionProviderService\",\n      \"label\": \"bind to a condition provider service\",\n      \"label_ptr\": \"permlab_bindConditionProviderService\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"Allows the app to interact with telephony services to make/receive calls.\",\n      \"description_ptr\": \"permdesc_bind_connection_service\",\n      \"label\": \"interact with telephony services\",\n      \"label_ptr\": \"permlab_bind_connection_service\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a dream service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindDreamService\",\n      \"label\": \"bind to a dream service\",\n      \"label_ptr\": \"permlab_bindDreamService\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"Allows the app to control when and how the user sees the in-call screen.\",\n      \"description_ptr\": \"permdesc_bind_incall_service\",\n      \"label\": \"interact with in-call screen\",\n      \"label_ptr\": \"permlab_bind_incall_service\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"This permission allows the Android system to run the application in the background when requested.\",\n      \"description_ptr\": \"permdesc_bindJobService\",\n      \"label\": \"run the application's scheduled background work\",\n      \"label_ptr\": \"permlab_bindJobService\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"Allows the holder to bind to applications\\n        that are emulating NFC cards. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindNfcService\",\n      \"label\": \"bind to NFC service\",\n      \"label_ptr\": \"permlab_bindNfcService\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindNotificationListenerService\",\n      \"label\": \"bind to a notification listener service\",\n      \"label_ptr\": \"permlab_bindNotificationListenerService\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"Allows the holder to make requests of\\n        package verifiers. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPackageVerifier\",\n      \"label\": \"bind to a package verifier\",\n      \"label_ptr\": \"permlab_bindPackageVerifier\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a print service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPrintService\",\n      \"label\": \"bind to a print service\",\n      \"label_ptr\": \"permlab_bindPrintService\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a print spooler service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPrintSpoolerService\",\n      \"label\": \"bind to a print spooler service\",\n      \"label_ptr\": \"permlab_bindPrintSpoolerService\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a remote display. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteDisplay\",\n      \"label\": \"bind to a remote display\",\n      \"label_ptr\": \"permlab_bindRemoteDisplay\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindTextService\",\n      \"label\": \"bind to a text service\",\n      \"label_ptr\": \"permlab_bindTextService\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"Allows an application to bind to a trust agent service.\",\n      \"description_ptr\": \"permdesc_bind_trust_agent_service\",\n      \"label\": \"Bind to a trust agent service\",\n      \"label_ptr\": \"permlab_bind_trust_agent_service\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a TV input. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindTvInput\",\n      \"label\": \"bind to a TV input\",\n      \"label_ptr\": \"permlab_bindTvInput\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a voice interaction service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindVoiceInteraction\",\n      \"label\": \"bind to a voice interactor\",\n      \"label_ptr\": \"permlab_bindVoiceInteraction\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a Vpn service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindVpnService\",\n      \"label\": \"bind to a VPN service\",\n      \"label_ptr\": \"permlab_bindVpnService\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"Allows the app to access Bluetooth MAP data.\",\n      \"description_ptr\": \"permdesc_bluetoothMap\",\n      \"label\": \"access Bluetooth MAP data\",\n      \"label_ptr\": \"permlab_bluetoothMap\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"Allows the app to\\n      pair with remote devices without user interaction.\",\n      \"description_ptr\": \"permdesc_bluetoothPriv\",\n      \"label\": \"allow Bluetooth pairing by Application\",\n      \"label_ptr\": \"permlab_bluetoothPriv\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to\\n      access data from sensors you use to measure what’s happening inside your\\n      body, such as heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the app to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an app package has been removed.\\n        Malicious apps may use this to kill any other running\\n        app.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SCORE_NETWORKS\": {\n      \"description\": \"Allows the app\\n        to broadcast a notification that networks need to be scored.\\n        Never needed for normal apps.\\n    \",\n      \"description_ptr\": \"permdesc_broadcastScoreNetworks\",\n      \"label\": \"send score networks broadcast\",\n      \"label_ptr\": \"permlab_broadcastScoreNetworks\",\n      \"name\": \"android.permission.BROADCAST_SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious apps may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious apps may use this to forge MMS message receipt or to\\n        silently replace the content of any webpage with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the app to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious apps may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"Allows a pre-installed system application to disable the camera use indicator LED.\",\n      \"description_ptr\": \"permdesc_cameraDisableTransmitLed\",\n      \"label\": \"disable transmit indicator LED when camera is in use\",\n      \"label_ptr\": \"permlab_cameraDisableTransmitLed\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"Allows the app to capture audio for Hotword detection. The capture can\\n      happen in the background but does not prevent other audio capture (e.g. Camcorder).\",\n      \"description_ptr\": \"permdesc_captureAudioHotword\",\n      \"label\": \"Hotword detection\",\n      \"label_ptr\": \"permlab_captureAudioHotword\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect audio output.\",\n      \"description_ptr\": \"permdesc_captureAudioOutput\",\n      \"label\": \"capture audio output\",\n      \"label_ptr\": \"permlab_captureAudioOutput\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect secure video output.\",\n      \"description_ptr\": \"permdesc_captureSecureVideoOutput\",\n      \"label\": \"capture secure video output\",\n      \"label_ptr\": \"permlab_captureSecureVideoOutput\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect video output.\",\n      \"description_ptr\": \"permdesc_captureVideoOutput\",\n      \"label\": \"capture video output\",\n      \"label_ptr\": \"permlab_captureVideoOutput\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows the app to change the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows the app to change whether a\\n        component of another app is enabled or not. Malicious apps may use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get app components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable app components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows the app to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change system display settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"Change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows the app to free phone storage\\n        by deleting files in the cache directories of other applications.  This may cause other\\n        applications to start up more slowly as they need to re-retrieve their data.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all app cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows the app to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other apps' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to configure and connect to Wifi displays.\",\n      \"description_ptr\": \"permdesc_configureWifiDisplay\",\n      \"label\": \"configure Wifi displays\",\n      \"label_ptr\": \"permlab_configureWifiDisplay\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"Allows the app to launch the full backup confirmation UI.  Not to be used by any app.\",\n      \"description_ptr\": \"permdesc_confirm_full_backup\",\n      \"label\": \"confirm a full backup or restore operation\",\n      \"label_ptr\": \"permlab_confirm_full_backup\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"Allows the app to provide an in-call user experience.\",\n      \"description_ptr\": \"permdesc_control_incall_experience\",\n      \"label\": \"provide an in-call user experience\",\n      \"label_ptr\": \"permlab_control_incall_experience\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"Allows an application to control keguard.\",\n      \"description_ptr\": \"permdesc_control_keyguard\",\n      \"label\": \"Control displaying and hiding keyguard\",\n      \"label_ptr\": \"permlab_control_keyguard\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows the app to enable/disable location\\n        update notifications from the radio.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to control low-level features of Wifi displays.\",\n      \"description_ptr\": \"permdesc_controlWifiDisplay\",\n      \"label\": \"control Wifi displays\",\n      \"label_ptr\": \"permlab_controlWifiDisplay\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"copy content\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"copy content\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows the app to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other apps' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows the app to delete\\n        Android packages. Malicious apps may use this to delete important apps.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete apps\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the app to turn the phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows the app to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SCREENLOCK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows the app to retrieve\\n        internal state of the system. Malicious apps may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.STATUS_BAR\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"Allows an application to register an input filter\\n            which filters the stream of all user events before they are dispatched. Malicious app\\n            may control the system UI whtout user intervention.\",\n      \"description_ptr\": \"permdesc_filter_events\",\n      \"label\": \"filter events\",\n      \"label_ptr\": \"permlab_filter_events\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the app to control the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows the app to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force app to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows the app to forcibly stop other apps.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other apps\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"Allows an application to collect\\n        frame statistics. Malicious apps may observe the frame statistics\\n        of windows from other apps.\",\n      \"description_ptr\": \"permdesc_frameStats\",\n      \"label\": \"retrieve frame statistics\",\n      \"label_ptr\": \"permlab_frameStats\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"Allows the application to temporarily freeze\\n        the screen for a full-screen transition.\",\n      \"description_ptr\": \"permdesc_freezeScreen\",\n      \"label\": \"freeze screen\",\n      \"label_ptr\": \"permlab_freezeScreen\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"Allows the app to retrieve\\n        collected application operation statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_getAppOpsStats\",\n      \"label\": \"retrieve app ops statistics\",\n      \"label_ptr\": \"permlab_getAppOpsStats\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"Allows the app to retrieve\\n        detailed information about currently and recently running tasks. Malicious apps may\\n        discover private information about other apps.\",\n      \"description_ptr\": \"permdesc_getDetailedTasks\",\n      \"label\": \"retrieve details of running apps\",\n      \"label_ptr\": \"permlab_getDetailedTasks\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"Allows the holder to retrieve private information\\n        about the current application in the foreground of the screen.\",\n      \"description_ptr\": \"permdesc_getTopActivityInfo\",\n      \"label\": \"get current app info\",\n      \"label_ptr\": \"permlab_getTopActivityInfo\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"Allows an application to grant or revoke\\n        specific permissions for it or other applications.  Malicious applications may use this\\n        to access features you have not granted them.\\n    \",\n      \"description_ptr\": \"permdesc_grantRevokePermissions\",\n      \"label\": \"grant or revoke permissions\",\n      \"label_ptr\": \"permlab_grantRevokePermissions\",\n      \"name\": \"android.permission.GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the app to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows the app to deliver\\n        its own input events (key presses, etc.) to other apps. Malicious\\n        apps may use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources\\n      for testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows the app to install new or updated\\n        Android packages. Malicious apps may use this to add new apps with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install apps\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"Allows the app to perform actions\\n        across different users on the device.  Malicious apps may use this to violate\\n        the protection between users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsers\",\n      \"label\": \"interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsers\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"Allows all possible interactions across\\n        users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsersFull\",\n      \"label\": \"full license to interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsersFull\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the app to create\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_invokeCarrierSetup\",\n      \"label\": \"invoke the carrier-provided configuration app\",\n      \"label_ptr\": \"permlab_invokeCarrierSetup\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"Allows an application to launch an activity that changes the trust agent behavior.\",\n      \"description_ptr\": \"permdesc_launch_trust_agent_settings\",\n      \"label\": \"Launch trust agent settings menu.\",\n      \"label_ptr\": \"permlab_launch_trust_agent_settings\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows the app to\\n    perform operations like adding and removing accounts, and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"add or remove accounts\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"Allows the app to add, remove, and\\n        modify the activity stacks in which other apps run.  Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_manageActivityStacks\",\n      \"label\": \"manage activity stacks\",\n      \"label_ptr\": \"permlab_manageActivityStacks\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows the app to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage app tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"Allows the app to install and uninstall CA certificates as trusted credentials.\",\n      \"description_ptr\": \"permdesc_manageCaCertificates\",\n      \"label\": \"manage trusted credentials\",\n      \"label_ptr\": \"permlab_manageCaCertificates\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"Allows the holder to add or remove active device\\n        administrators. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageDeviceAdmins\",\n      \"label\": \"add or remove a device admin\",\n      \"label_ptr\": \"permlab_manageDeviceAdmins\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"Allows the app to manage document storage.\",\n      \"description_ptr\": \"permdesc_manageDocs\",\n      \"label\": \"manage document storage\",\n      \"label_ptr\": \"permlab_manageDocs\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"Allows an application to manage media projection sessions. These sessions can provide applications the ability to capture display and audio contents. Should never be needed by normal apps.\",\n      \"description_ptr\": \"permdesc_manageMediaProjection\",\n      \"label\": \"Manage media projection sessions\",\n      \"label_ptr\": \"permlab_manageMediaProjection\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"Allows the app to manage network policies and define app-specific rules.\",\n      \"description_ptr\": \"permdesc_manageNetworkPolicy\",\n      \"label\": \"manage network policy\",\n      \"label_ptr\": \"permlab_manageNetworkPolicy\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the app to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"Allows apps to manage users on the device, including query, creation and deletion.\",\n      \"description_ptr\": \"permdesc_manageUsers\",\n      \"label\": \"manage users\",\n      \"label_ptr\": \"permlab_manageUsers\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"Allows the holder to manage the keyphrases for voice hotword detection.\\n        Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageVoiceKeyphrases\",\n      \"label\": \"manage voice keyphrases\",\n      \"label_ptr\": \"permlab_manageVoiceKeyphrases\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows the app to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed apps.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"Allows the app to control media playback and access the media information (title, author...).\",\n      \"description_ptr\": \"permdesc_mediaContentControl\",\n      \"label\": \"control media playback and metadata access\",\n      \"label_ptr\": \"permlab_mediaContentControl\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"Allows the app to directly control audio routing and\\n      override audio policy decisions.\",\n      \"description_ptr\": \"permdesc_modifyAudioRouting\",\n      \"label\": \"Audio Routing\",\n      \"label_ptr\": \"permlab_modifyAudioRouting\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.AUDIO_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_modifyNetworkAccounting\",\n      \"label\": \"modify network usage accounting\",\n      \"label_ptr\": \"permlab_modifyNetworkAccounting\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"Allows the holder to modify the system's\\n        parental controls data. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_modifyParentalControls\",\n      \"label\": \"modify parental controls\",\n      \"label_ptr\": \"permlab_modifyParentalControls\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the app to control the\\n        phone features of the device. An app with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"erase SD Card\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"access SD Card filesystem\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows the app to move app resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"move app resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"Allows this application to receive information about current Android Beam transfers\",\n      \"description_ptr\": \"permdesc_handoverStatus\",\n      \"label\": \"Receive Android Beam transfer status\",\n      \"label_ptr\": \"permlab_handoverStatus\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the app to modify collected component usage statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"Allows the app to verify a package is\\n        installable.\",\n      \"description_ptr\": \"permdesc_packageVerificationAgent\",\n      \"label\": \"verify packages\",\n      \"label_ptr\": \"permlab_packageVerificationAgent\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the app to start CDMA provisioning.\\n        Malicious apps may unnecessarily start CDMA provisioning.\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"Allows an application to provide a trust agent.\",\n      \"description_ptr\": \"permdesc_provide_trust_agent\",\n      \"label\": \"Provide a trust agent.\",\n      \"label_ptr\": \"permlab_provide_trust_agent\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n      cell broadcast messages received by your device. Cell broadcast alerts\\n      are delivered in some locations to warn you of emergency situations.\\n      Malicious apps may interfere with the performance or operation of your\\n      device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows the app to read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows the app to watch the\\n        keys you press even when interacting with another app (such\\n        as typing a password). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"Read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows the app to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"Allows the app to read historical network usage for specific networks and apps.\",\n      \"description_ptr\": \"permdesc_readNetworkUsageHistory\",\n      \"label\": \"read historical network usage\",\n      \"label_ptr\": \"permlab_readNetworkUsageHistory\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the precise\\n      phone states.  This permission allows the app to determine the real\\n      call status, whether a call is active or in the background, call fails,\\n      precise data connection status and data connection fails.\",\n      \"description_ptr\": \"permdesc_readPrecisePhoneState\",\n      \"label\": \"read precise phone states\",\n      \"label_ptr\": \"permlab_readPrecisePhoneState\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"Allows the app to read\\n     personal profile information stored on your device, such as your name and\\n     contact information. This means the app can identify you and may send your\\n     profile information to others.\",\n      \"description_ptr\": \"permdesc_readProfile\",\n      \"label\": \"read your own contact card\",\n      \"label_ptr\": \"permlab_readProfile\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app\\n      to access and sync social updates from you and your friends. Be careful\\n      when sharing information -- this allows the app to read communications\\n      between you and your friends on social networks, regardless of\\n      confidentiality. Note: this permission may not be enforced on all social\\n      networks.\",\n      \"description_ptr\": \"permdesc_readSocialStream\",\n      \"label\": \"read your social stream\",\n      \"label_ptr\": \"permlab_readSocialStream\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to read all words,\\n       names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read terms you added to the dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.USER_DICTIONARY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the app to force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"Allows the app to receive and process Bluetooth MAP\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveBluetoothMap\",\n      \"label\": \"receive Bluetooth messages (MAP)\",\n      \"label_ptr\": \"permlab_receiveBluetoothMap\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows the app to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system apps.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows the app to record audio with the\\n      microphone.  This permission allows the app to record audio at any time\\n      without your confirmation.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"Allows an application to interact with the recovery system and system updates.\",\n      \"description_ptr\": \"permdesc_recovery\",\n      \"label\": \"Interact with update and recovery system\",\n      \"label_ptr\": \"permlab_recovery\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"Allows an application to remove DRM certficates. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_removeDrmCertificates\",\n      \"label\": \"remove DRM certificates\",\n      \"label_ptr\": \"permlab_removeDrmCertificates\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"Allows the app to remove\\n        tasks and kill their apps. Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_removeTasks\",\n      \"label\": \"stop running apps\",\n      \"label_ptr\": \"permlab_removeTasks\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"Allows the app to retrieve\\n        the content of the active window. Malicious apps may retrieve\\n        the entire window content and examine all its text except passwords.\",\n      \"description_ptr\": \"permdesc_retrieve_window_content\",\n      \"label\": \"retrieve screen content\",\n      \"label_ptr\": \"permlab_retrieve_window_content\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"Allows an application to retrieve\\n        the window token. Malicious apps may perfrom unauthorized interaction with\\n        the application window impersonating the system.\",\n      \"description_ptr\": \"permdesc_retrieveWindowToken\",\n      \"label\": \"retrieve window token\",\n      \"label_ptr\": \"permlab_retrieveWindowToken\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"Allows the app to\\n        rank networks and influence which networks the phone should prefer.\",\n      \"description_ptr\": \"permdesc_scoreNetworks\",\n      \"label\": \"score networks\",\n      \"label_ptr\": \"permlab_scoreNetworks\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"Allows the app to send\\n      requests to other messaging apps to handle respond-via-message events for incoming\\n      calls.\",\n      \"description_ptr\": \"permdesc_sendRespondViaMessageRequest\",\n      \"label\": \"send respond-via-message events\",\n      \"label_ptr\": \"permlab_sendRespondViaMessageRequest\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"Allows the holder to access serial ports using the SerialManager API.\",\n      \"description_ptr\": \"permdesc_serialPort\",\n      \"label\": \"access serial ports\",\n      \"label_ptr\": \"permlab_serialPort\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows the app to\\n        monitor and control how the system launches activities.\\n        Malicious apps may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all app launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows the app\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"force background apps to close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows the app to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows the app to turn\\n        on debugging for another app. Malicious apps may use this\\n        to kill other apps.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable app debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setInputCalibration\",\n      \"label\": \"change input device calibration\",\n      \"label_ptr\": \"permlab_setInputCalibration\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"Allows the app to change\\n        the keyboard layout. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setKeyboardLayout\",\n      \"label\": \"change keyboard layout\",\n      \"label_ptr\": \"permlab_setKeyboardLayout\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows the app to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows the app to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows the app to\\n        modify your preferred apps. Malicious apps may\\n        silently change the apps that are run, spoofing your\\n        existing apps to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred apps\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows the app\\n        to control the maximum number of processes that will run. Never\\n        needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"Allows the app to control the\\n        screen compatibility mode of other applications.  Malicious applications may\\n        break the behavior of other applications.\",\n      \"description_ptr\": \"permdesc_setScreenCompatibility\",\n      \"label\": \"set screen compatibility\",\n      \"label_ptr\": \"permlab_setScreenCompatibility\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows the app to change the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_CLOCK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows the app to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to apps\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"Allows the app to start any activity, regardless of permission protection or exported state.\",\n      \"description_ptr\": \"permdesc_startAnyActivity\",\n      \"label\": \"start any activity\",\n      \"label_ptr\": \"permlab_startAnyActivity\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"Allows the app to use an ActivityManager.RecentTaskInfo\\n        object to launch a defunct task that was returned from ActivityManager.getRecentTaskList().\",\n      \"description_ptr\": \"permdesc_startTasksFromRecents\",\n      \"label\": \"start a task from recents\",\n      \"label_ptr\": \"permlab_startTasksFromRecents\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows the app to disable the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the app to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another app.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows the app to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows the app to modify\\n      your currently synced feeds. Malicious apps may change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to draw on top of other\\n        applications or parts of the user interface.  They may interfere with your\\n        use of the interface in any application, or change what you think you are\\n        seeing in other applications.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.DISPLAY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"Allows an application to temporarily\\n         enable accessibility on the device. Malicious apps may enable accessibility without\\n         user consent.\",\n      \"description_ptr\": \"permdesc_temporary_enable_accessibility\",\n      \"label\": \"temporary enable accessibility\",\n      \"label_ptr\": \"permlab_temporary_enable_accessibility\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"Allows an application to listen for changes in trust state.\",\n      \"description_ptr\": \"permdesc_trust_listener\",\n      \"label\": \"Listen to trust state changes.\",\n      \"label_ptr\": \"permlab_trust_listener\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected application operation statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateAppOpsStats\",\n      \"label\": \"modify app ops statistics\",\n      \"label_ptr\": \"permlab_updateAppOpsStats\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected battery statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateBatteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_updateBatteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.\",\n      \"description_ptr\": \"permdesc_updateLock\",\n      \"label\": \"discourage automatic device updates\",\n      \"label_ptr\": \"permlab_updateLock\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"Allows the app to reset the display timeout.\",\n      \"description_ptr\": \"permdesc_userActivity\",\n      \"label\": \"reset display timeout\",\n      \"label_ptr\": \"permlab_userActivity\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows the app to request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use accounts on the device\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows the app to change network settings and to intercept and inspect all network traffic,\\n      for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\\n      packets without your knowledge.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"change/intercept network settings and traffic\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n     add, remove, change events that you can modify on your phone, including\\n     those of friends or co-workers. This may allow the app to send messages\\n     that appear to come from calendar owners, or modify events without the\\n     owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows the app to modify the\\n        Google services map.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows the app to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"Allows the app to\\n      change or add to personal profile information stored on your device, such\\n      as your name and contact information.  This means the app can identify you\\n      and may send your profile information to others.\",\n      \"description_ptr\": \"permdesc_writeProfile\",\n      \"label\": \"modify your own contact card\",\n      \"label_ptr\": \"permlab_writeProfile\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's secure settings data. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows the app to write\\n      to SMS messages stored on your phone or SIM card. Malicious apps\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app to\\n     display social updates from your friends.  Be careful when sharing\\n     information -- this allows the app to produce messages that may appear to\\n     come from a friend. Note: this permission may not be enforced on all social\\n     networks.\",\n      \"description_ptr\": \"permdesc_writeSocialStream\",\n      \"label\": \"write to your social stream\",\n      \"label_ptr\": \"permlab_writeSocialStream\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"add words to user-defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.WRITE_USER_DICTIONARY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n      an installed alarm clock app. Some alarm clock apps may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.DEVICE_ALARMS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the app to read the\\n     history of all URLs that the Browser has visited, and all of the Browser's\\n     bookmarks. Note: this permission may not be enforced by third-party\\n     browsers or other  applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read your Web bookmarks and history\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the\\n        app to modify the Browser's history or bookmarks stored on your phone.\\n        This may allow the app to erase or modify Browser data.  Note:\\n        this permission may note be enforced by third-party browsers or other\\n        applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write web bookmarks and history\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"Allows the app to read your voicemails.\",\n      \"description_ptr\": \"permdesc_readVoicemail\",\n      \"label\": \"read voicemail\",\n      \"label_ptr\": \"permlab_readVoicemail\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"Allows the app to modify and remove messages from your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_writeVoicemail\",\n      \"label\": \"write voicemails\",\n      \"label_ptr\": \"permlab_writeVoicemail\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"system|signature\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_22.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCESSIBILITY_FEATURES\": {\n      \"description\": \"Features that assistive technology can request.\",\n      \"description_ptr\": \"permgroupdesc_accessibilityFeatures\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accessibility_features\",\n      \"label\": \"Accessibility features\",\n      \"label_ptr\": \"permgrouplab_accessibilityFeatures\",\n      \"name\": \"android.permission-group.ACCESSIBILITY_FEATURES\"\n    },\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_accounts\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.AFFECTS_BATTERY\": {\n      \"description\": \"Use features that can quickly drain battery.\",\n      \"description_ptr\": \"permgroupdesc_affectsBattery\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_affects_battery\",\n      \"label\": \"Affects Battery\",\n      \"label_ptr\": \"permgrouplab_affectsBattery\",\n      \"name\": \"android.permission-group.AFFECTS_BATTERY\"\n    },\n    \"android.permission-group.APP_INFO\": {\n      \"description\": \"Ability to affect behavior of other applications on your device.\",\n      \"description_ptr\": \"permgroupdesc_appInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_app_info\",\n      \"label\": \"Your applications information\",\n      \"label_ptr\": \"permgrouplab_appInfo\",\n      \"name\": \"android.permission-group.APP_INFO\"\n    },\n    \"android.permission-group.AUDIO_SETTINGS\": {\n      \"description\": \"Change audio settings.\",\n      \"description_ptr\": \"permgroupdesc_audioSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_audio_settings\",\n      \"label\": \"Audio Settings\",\n      \"label_ptr\": \"permgrouplab_audioSettings\",\n      \"name\": \"android.permission-group.AUDIO_SETTINGS\"\n    },\n    \"android.permission-group.BLUETOOTH_NETWORK\": {\n      \"description\": \"Access devices and networks through Bluetooth.\",\n      \"description_ptr\": \"permgroupdesc_bluetoothNetwork\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bluetooth\",\n      \"label\": \"Bluetooth\",\n      \"label_ptr\": \"permgrouplab_bluetoothNetwork\",\n      \"name\": \"android.permission-group.BLUETOOTH_NETWORK\"\n    },\n    \"android.permission-group.BOOKMARKS\": {\n      \"description\": \"Direct access to bookmarks and browser history.\",\n      \"description_ptr\": \"permgroupdesc_bookmarks\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_bookmarks\",\n      \"label\": \"Bookmarks and History\",\n      \"label_ptr\": \"permgrouplab_bookmarks\",\n      \"name\": \"android.permission-group.BOOKMARKS\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"Direct access to calendar and events.\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"Direct access to camera for image or video capture.\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Do things that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for app developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.DEVICE_ALARMS\": {\n      \"description\": \"Set the alarm clock.\",\n      \"description_ptr\": \"permgroupdesc_deviceAlarms\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_device_alarms\",\n      \"label\": \"Alarm\",\n      \"label_ptr\": \"permgrouplab_deviceAlarms\",\n      \"name\": \"android.permission-group.DEVICE_ALARMS\"\n    },\n    \"android.permission-group.DISPLAY\": {\n      \"description\": \"Effect the UI of other applications.\",\n      \"description_ptr\": \"permgroupdesc_display\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_display\",\n      \"label\": \"Other Application UI\",\n      \"label_ptr\": \"permgrouplab_display\",\n      \"name\": \"android.permission-group.DISPLAY\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location.\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS, email, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_messages\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"Direct access to the microphone to record audio.\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Access various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_network\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to information about you, stored in on your contact card.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_personal_info\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.SCREENLOCK\": {\n      \"description\": \"Ability to affect behavior of the lock screen on your device.\",\n      \"description_ptr\": \"permgroupdesc_screenlock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_screenlock\",\n      \"label\": \"Lock screen\",\n      \"label_ptr\": \"permgrouplab_screenlock\",\n      \"name\": \"android.permission-group.SCREENLOCK\"\n    },\n    \"android.permission-group.SOCIAL_INFO\": {\n      \"description\": \"Direct access to information about your contacts and social connections.\",\n      \"description_ptr\": \"permgroupdesc_socialInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_social_info\",\n      \"label\": \"Your social information\",\n      \"label_ptr\": \"permgrouplab_socialInfo\",\n      \"name\": \"android.permission-group.SOCIAL_INFO\"\n    },\n    \"android.permission-group.STATUS_BAR\": {\n      \"description\": \"Change the device status bar settings.\",\n      \"description_ptr\": \"permgroupdesc_statusBar\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_status_bar\",\n      \"label\": \"Status Bar\",\n      \"label_ptr\": \"permgrouplab_statusBar\",\n      \"name\": \"android.permission-group.STATUS_BAR\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYNC_SETTINGS\": {\n      \"description\": \"Access to the sync settings.\",\n      \"description_ptr\": \"permgroupdesc_syncSettings\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_sync_settings\",\n      \"label\": \"Sync Settings\",\n      \"label_ptr\": \"permgrouplab_syncSettings\",\n      \"name\": \"android.permission-group.SYNC_SETTINGS\"\n    },\n    \"android.permission-group.SYSTEM_CLOCK\": {\n      \"description\": \"Change the device time or timezone.\",\n      \"description_ptr\": \"permgroupdesc_systemClock\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_clock\",\n      \"label\": \"Clock\",\n      \"label_ptr\": \"permgrouplab_systemClock\",\n      \"name\": \"android.permission-group.SYSTEM_CLOCK\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_system_tools\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    },\n    \"android.permission-group.USER_DICTIONARY\": {\n      \"description\": \"Read words in user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_dictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary\",\n      \"label\": \"Read User Dictionary\",\n      \"label_ptr\": \"permgrouplab_dictionary\",\n      \"name\": \"android.permission-group.USER_DICTIONARY\"\n    },\n    \"android.permission-group.VOICEMAIL\": {\n      \"description\": \"Direct access to voicemail.\",\n      \"description_ptr\": \"permgroupdesc_voicemail\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_voicemail\",\n      \"label\": \"Voicemail\",\n      \"label_ptr\": \"permgrouplab_voicemail\",\n      \"name\": \"android.permission-group.VOICEMAIL\"\n    },\n    \"android.permission-group.WALLPAPER\": {\n      \"description\": \"Change the device wallpaper settings.\",\n      \"description_ptr\": \"permgroupdesc_wallpaper\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_wallpaper\",\n      \"label\": \"Wallpaper\",\n      \"label_ptr\": \"permgrouplab_wallpaper\",\n      \"name\": \"android.permission-group.WALLPAPER\"\n    },\n    \"android.permission-group.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Add words to the user dictionary.\",\n      \"description_ptr\": \"permgroupdesc_writeDictionary\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"perm_group_user_dictionary_write\",\n      \"label\": \"Write User Dictionary\",\n      \"label_ptr\": \"permgrouplab_writeDictionary\",\n      \"name\": \"android.permission-group.WRITE_USER_DICTIONARY\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to access external storage for all users.\",\n      \"description_ptr\": \"permdesc_sdcardAccessAll\",\n      \"label\": \"access external storage of all users\",\n      \"label_ptr\": \"permlab_sdcardAccessAll\",\n      \"name\": \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows the app to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows the app read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        apps.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      approximate location. This location is derived by location services using\\n      network location sources such as cell towers and Wi-Fi. These location\\n      services must be turned on and available to your device for the app to\\n      use them. Apps may use this to determine approximately where you\\n      are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"Allows the holder to access content\\n     providers from the shell. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessContentProvidersExternally\",\n      \"label\": \"access content providers externally\",\n      \"label_ptr\": \"permlab_accessContentProvidersExternally\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"Allows an application to provision and use DRM certficates. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessDrmCertificates\",\n      \"label\": \"access DRM certificates\",\n      \"label_ptr\": \"permlab_accessDrmCertificates\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      precise location using the Global Positioning System (GPS) or network\\n      location sources such as cell towers and Wi-Fi. These location services\\n      must be turned on and available to your device for the app to use them.\\n      Apps may use this to determine where you are, and may consume additional\\n      battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"Allows the app to access FM radio to listen to programs.\",\n      \"description_ptr\": \"permdesc_fm\",\n      \"label\": \"access FM radio\",\n      \"label_ptr\": \"permlab_fm\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"Allows the app to use InputFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessInputFlinger\",\n      \"label\": \"access InputFlinger\",\n      \"label_ptr\": \"permlab_accessInputFlinger\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"Allows an application to access keguard secure storage.\",\n      \"description_ptr\": \"permdesc_access_keyguard_secure_storage\",\n      \"label\": \"Access keyguard secure storage\",\n      \"label_ptr\": \"permlab_access_keyguard_secure_storage\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n      extra location provider commands.  This may allow the app to interfere\\n      with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for\\n      testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"Allows access to the kernel MTP driver to implement the MTP USB protocol.\",\n      \"description_ptr\": \"permdesc_accessMtp\",\n      \"label\": \"implement MTP protocol\",\n      \"label_ptr\": \"permlab_accessMtp\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"Allows an application to listen for observations on network conditions. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_accessNetworkConditions\",\n      \"label\": \"listen for observations on network conditions\",\n      \"label_ptr\": \"permlab_accessNetworkConditions\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.\",\n      \"description_ptr\": \"permdesc_accessNotifications\",\n      \"label\": \"access notifications\",\n      \"label_ptr\": \"permlab_accessNotifications\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows the app to use SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows the app to make calls to AccountAuthenticators.\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"Allows the app to use any installed\\n        media decoder to decode for playback.\",\n      \"description_ptr\": \"permdesc_anyCodecForPlayback\",\n      \"label\": \"use any media decoder for playback\",\n      \"label_ptr\": \"permlab_anyCodecForPlayback\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the app to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the app to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the app to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the app to mount/unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount/unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the app to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows the app\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"create accounts and set passwords\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the app to control the system's backup and restore mechanism.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows an application to read the current low-level\\n        battery use data.  May allow the application to find out detailed information about\\n        which apps you use.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"read battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an accessibility service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindAccessibilityService\",\n      \"label\": \"bind to an accessibility service\",\n      \"label_ptr\": \"permlab_bindAccessibilityService\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the app to tell the system\\n        which widgets can be used by which app. An app with this permission\\n        can give access to personal data to other apps.\\n        Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a carrier messaging service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierMessagingService\",\n      \"label\": \"bind to a carrier messaging service\",\n      \"label_ptr\": \"permlab_bindCarrierMessagingService\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindConditionProviderService\",\n      \"label\": \"bind to a condition provider service\",\n      \"label_ptr\": \"permlab_bindConditionProviderService\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"Allows the app to interact with telephony services to make/receive calls.\",\n      \"description_ptr\": \"permdesc_bind_connection_service\",\n      \"label\": \"interact with telephony services\",\n      \"label_ptr\": \"permlab_bind_connection_service\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a dream service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindDreamService\",\n      \"label\": \"bind to a dream service\",\n      \"label_ptr\": \"permlab_bindDreamService\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"Allows the app to control when and how the user sees the in-call screen.\",\n      \"description_ptr\": \"permdesc_bind_incall_service\",\n      \"label\": \"interact with in-call screen\",\n      \"label_ptr\": \"permlab_bind_incall_service\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"This permission allows the Android system to run the application in the background when requested.\",\n      \"description_ptr\": \"permdesc_bindJobService\",\n      \"label\": \"run the application's scheduled background work\",\n      \"label_ptr\": \"permlab_bindJobService\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"Allows the holder to bind to applications\\n        that are emulating NFC cards. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindNfcService\",\n      \"label\": \"bind to NFC service\",\n      \"label_ptr\": \"permlab_bindNfcService\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindNotificationListenerService\",\n      \"label\": \"bind to a notification listener service\",\n      \"label_ptr\": \"permlab_bindNotificationListenerService\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"Allows the holder to make requests of\\n        package verifiers. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPackageVerifier\",\n      \"label\": \"bind to a package verifier\",\n      \"label_ptr\": \"permlab_bindPackageVerifier\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a print service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPrintService\",\n      \"label\": \"bind to a print service\",\n      \"label_ptr\": \"permlab_bindPrintService\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a print spooler service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindPrintSpoolerService\",\n      \"label\": \"bind to a print spooler service\",\n      \"label_ptr\": \"permlab_bindPrintSpoolerService\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a widget service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteViews\",\n      \"label\": \"bind to a widget service\",\n      \"label_ptr\": \"permlab_bindRemoteViews\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a remote display. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindRemoteDisplay\",\n      \"label\": \"bind to a remote display\",\n      \"label_ptr\": \"permlab_bindRemoteDisplay\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a text service(e.g. SpellCheckerService). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindTextService\",\n      \"label\": \"bind to a text service\",\n      \"label_ptr\": \"permlab_bindTextService\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"Allows an application to bind to a trust agent service.\",\n      \"description_ptr\": \"permdesc_bind_trust_agent_service\",\n      \"label\": \"Bind to a trust agent service\",\n      \"label_ptr\": \"permlab_bind_trust_agent_service\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a TV input. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindTvInput\",\n      \"label\": \"bind to a TV input\",\n      \"label_ptr\": \"permlab_bindTvInput\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a voice interaction service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindVoiceInteraction\",\n      \"label\": \"bind to a voice interactor\",\n      \"label_ptr\": \"permlab_bindVoiceInteraction\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a Vpn service. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindVpnService\",\n      \"label\": \"bind to a VPN service\",\n      \"label_ptr\": \"permlab_bindVpnService\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"Allows the app to access Bluetooth MAP data.\",\n      \"description_ptr\": \"permdesc_bluetoothMap\",\n      \"label\": \"access Bluetooth MAP data\",\n      \"label_ptr\": \"permlab_bluetoothMap\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"Allows the app to\\n      pair with remote devices without user interaction.\",\n      \"description_ptr\": \"permdesc_bluetoothPriv\",\n      \"label\": \"allow Bluetooth pairing by Application\",\n      \"label_ptr\": \"permlab_bluetoothPriv\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"android.permission-group.BLUETOOTH_NETWORK\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the app to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"Allows the app\\n        to send privileged network broadcasts.\\n        Never needed for normal apps.\\n    \",\n      \"description_ptr\": \"permdesc_broadcastNetworkPrivileged\",\n      \"label\": \"send privileged network broadcasts\",\n      \"label_ptr\": \"permlab_broadcastNetworkPrivileged\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an app package has been removed.\\n        Malicious apps may use this to kill any other running\\n        app.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious apps may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows the app to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious apps may use this to forge MMS message receipt or to\\n        silently replace the content of any webpage with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the app to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious apps may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"Allows a pre-installed system application to disable the camera use indicator LED.\",\n      \"description_ptr\": \"permdesc_cameraDisableTransmitLed\",\n      \"label\": \"disable transmit indicator LED when camera is in use\",\n      \"label_ptr\": \"permlab_cameraDisableTransmitLed\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"Allows the app to capture audio for Hotword detection. The capture can\\n      happen in the background but does not prevent other audio capture (e.g. Camcorder).\",\n      \"description_ptr\": \"permdesc_captureAudioHotword\",\n      \"label\": \"Hotword detection\",\n      \"label_ptr\": \"permlab_captureAudioHotword\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect audio output.\",\n      \"description_ptr\": \"permdesc_captureAudioOutput\",\n      \"label\": \"capture audio output\",\n      \"label_ptr\": \"permlab_captureAudioOutput\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect secure video output.\",\n      \"description_ptr\": \"permdesc_captureSecureVideoOutput\",\n      \"label\": \"capture secure video output\",\n      \"label_ptr\": \"permlab_captureSecureVideoOutput\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"Allows the app to capture and redirect video output.\",\n      \"description_ptr\": \"permdesc_captureVideoOutput\",\n      \"label\": \"capture video output\",\n      \"label_ptr\": \"permlab_captureVideoOutput\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows the app to change the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows the app to change whether a\\n        component of another app is enabled or not. Malicious apps may use this\\n        to disable important phone capabilities. Care must be used with this permission, as it is\\n        possible to get app components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable app components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows the app to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change system display settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"Change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows the app to free phone storage\\n        by deleting files in the cache directories of other applications.  This may cause other\\n        applications to start up more slowly as they need to re-retrieve their data.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all app cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows the app to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other apps' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to configure and connect to Wifi displays.\",\n      \"description_ptr\": \"permdesc_configureWifiDisplay\",\n      \"label\": \"configure Wifi displays\",\n      \"label_ptr\": \"permlab_configureWifiDisplay\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"Allows the app to launch the full backup confirmation UI.  Not to be used by any app.\",\n      \"description_ptr\": \"permdesc_confirm_full_backup\",\n      \"label\": \"confirm a full backup or restore operation\",\n      \"label_ptr\": \"permlab_confirm_full_backup\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"Allows the app to provide an in-call user experience.\",\n      \"description_ptr\": \"permdesc_control_incall_experience\",\n      \"label\": \"provide an in-call user experience\",\n      \"label_ptr\": \"permlab_control_incall_experience\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"Allows an application to control keguard.\",\n      \"description_ptr\": \"permdesc_control_keyguard\",\n      \"label\": \"Control displaying and hiding keyguard\",\n      \"label_ptr\": \"permlab_control_keyguard\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows the app to enable/disable location\\n        update notifications from the radio.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"Allows the app to control low-level features of Virtual Private Networks.\",\n      \"description_ptr\": \"permdesc_controlVpn\",\n      \"label\": \"control Virtual Private Networks\",\n      \"label_ptr\": \"permlab_controlVpn\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"Allows the app to control low-level features of Wifi displays.\",\n      \"description_ptr\": \"permdesc_controlWifiDisplay\",\n      \"label\": \"control Wifi displays\",\n      \"label_ptr\": \"permlab_controlWifiDisplay\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"copy content\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"copy content\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows the app to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other apps' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows the app to delete\\n        Android packages. Malicious apps may use this to delete important apps.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete apps\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the app to turn the phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows the app to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SCREENLOCK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows the app to retrieve\\n        internal state of the system. Malicious apps may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.STATUS_BAR\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"Allows an application to register an input filter\\n            which filters the stream of all user events before they are dispatched. Malicious app\\n            may control the system UI whtout user intervention.\",\n      \"description_ptr\": \"permdesc_filter_events\",\n      \"label\": \"filter events\",\n      \"label_ptr\": \"permlab_filter_events\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the app to control the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows the app to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force app to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows the app to forcibly stop other apps.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other apps\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"Allows an application to collect\\n        frame statistics. Malicious apps may observe the frame statistics\\n        of windows from other apps.\",\n      \"description_ptr\": \"permdesc_frameStats\",\n      \"label\": \"retrieve frame statistics\",\n      \"label_ptr\": \"permlab_frameStats\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"Allows the application to temporarily freeze\\n        the screen for a full-screen transition.\",\n      \"description_ptr\": \"permdesc_freezeScreen\",\n      \"label\": \"freeze screen\",\n      \"label_ptr\": \"permlab_freezeScreen\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"Allows the app to retrieve\\n        collected application operation statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_getAppOpsStats\",\n      \"label\": \"retrieve app ops statistics\",\n      \"label_ptr\": \"permlab_getAppOpsStats\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"Allows the app to retrieve\\n        detailed information about currently and recently running tasks. Malicious apps may\\n        discover private information about other apps.\",\n      \"description_ptr\": \"permdesc_getDetailedTasks\",\n      \"label\": \"retrieve details of running apps\",\n      \"label_ptr\": \"permlab_getDetailedTasks\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"Allows the holder to retrieve private information\\n        about the current application in the foreground of the screen.\",\n      \"description_ptr\": \"permdesc_getTopActivityInfo\",\n      \"label\": \"get current app info\",\n      \"label_ptr\": \"permlab_getTopActivityInfo\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"Allows an application to grant or revoke\\n        specific permissions for it or other applications.  Malicious applications may use this\\n        to access features you have not granted them.\\n    \",\n      \"description_ptr\": \"permdesc_grantRevokePermissions\",\n      \"label\": \"grant or revoke permissions\",\n      \"label_ptr\": \"permlab_grantRevokePermissions\",\n      \"name\": \"android.permission.GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the app to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows the app to deliver\\n        its own input events (key presses, etc.) to other apps. Malicious\\n        apps may use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources\\n      for testing or install a new location provider.  This allows the app to\\n      override the location and/or status returned by other location sources\\n      such as GPS or location providers.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows the app to install new or updated\\n        Android packages. Malicious apps may use this to add new apps with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install apps\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"Allows the app to perform actions\\n        across different users on the device.  Malicious apps may use this to violate\\n        the protection between users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsers\",\n      \"label\": \"interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsers\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"Allows all possible interactions across\\n        users.\",\n      \"description_ptr\": \"permdesc_interactAcrossUsersFull\",\n      \"label\": \"full license to interact across users\",\n      \"label_ptr\": \"permlab_interactAcrossUsersFull\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the app to create\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_invokeCarrierSetup\",\n      \"label\": \"invoke the carrier-provided configuration app\",\n      \"label_ptr\": \"permlab_invokeCarrierSetup\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"Allows an application to launch an activity that changes the trust agent behavior.\",\n      \"description_ptr\": \"permdesc_launch_trust_agent_settings\",\n      \"label\": \"Launch trust agent settings menu.\",\n      \"label_ptr\": \"permlab_launch_trust_agent_settings\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows the app to\\n    perform operations like adding and removing accounts, and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"add or remove accounts\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"Allows the app to add, remove, and\\n        modify the activity stacks in which other apps run.  Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_manageActivityStacks\",\n      \"label\": \"manage activity stacks\",\n      \"label_ptr\": \"permlab_manageActivityStacks\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows the app to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage app tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"Allows the app to install and uninstall CA certificates as trusted credentials.\",\n      \"description_ptr\": \"permdesc_manageCaCertificates\",\n      \"label\": \"manage trusted credentials\",\n      \"label_ptr\": \"permlab_manageCaCertificates\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"Allows the holder to add or remove active device\\n        administrators. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageDeviceAdmins\",\n      \"label\": \"add or remove a device admin\",\n      \"label_ptr\": \"permlab_manageDeviceAdmins\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"Allows the app to manage document storage.\",\n      \"description_ptr\": \"permdesc_manageDocs\",\n      \"label\": \"manage document storage\",\n      \"label_ptr\": \"permlab_manageDocs\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"Allows an application to manage media projection sessions. These sessions can provide applications the ability to capture display and audio contents. Should never be needed by normal apps.\",\n      \"description_ptr\": \"permdesc_manageMediaProjection\",\n      \"label\": \"Manage media projection sessions\",\n      \"label_ptr\": \"permlab_manageMediaProjection\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"Allows the app to manage network policies and define app-specific rules.\",\n      \"description_ptr\": \"permdesc_manageNetworkPolicy\",\n      \"label\": \"manage network policy\",\n      \"label_ptr\": \"permlab_manageNetworkPolicy\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"Allows the app to manage preferences and permissions for USB devices.\",\n      \"description_ptr\": \"permdesc_manageUsb\",\n      \"label\": \"manage preferences and permissions for USB devices\",\n      \"label_ptr\": \"permlab_manageUsb\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"Allows apps to manage users on the device, including query, creation and deletion.\",\n      \"description_ptr\": \"permdesc_manageUsers\",\n      \"label\": \"manage users\",\n      \"label_ptr\": \"permlab_manageUsers\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"Allows the holder to manage the keyphrases for voice hotword detection.\\n        Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_manageVoiceKeyphrases\",\n      \"label\": \"manage voice keyphrases\",\n      \"label_ptr\": \"permlab_manageVoiceKeyphrases\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows the app to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed apps.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"Allows the app to control media playback and access the media information (title, author...).\",\n      \"description_ptr\": \"permdesc_mediaContentControl\",\n      \"label\": \"control media playback and metadata access\",\n      \"label_ptr\": \"permlab_mediaContentControl\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"Allows the app to directly control audio routing and\\n      override audio policy decisions.\",\n      \"description_ptr\": \"permdesc_modifyAudioRouting\",\n      \"label\": \"Audio Routing\",\n      \"label_ptr\": \"permlab_modifyAudioRouting\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.AUDIO_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_modifyNetworkAccounting\",\n      \"label\": \"modify network usage accounting\",\n      \"label_ptr\": \"permlab_modifyNetworkAccounting\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"Allows the holder to modify the system's\\n        parental controls data. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_modifyParentalControls\",\n      \"label\": \"modify parental controls\",\n      \"label_ptr\": \"permlab_modifyParentalControls\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the app to control the\\n        phone features of the device. An app with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"erase SD Card\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the app to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"access SD Card filesystem\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows the app to move app resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"move app resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"Allows this application to receive information about current Android Beam transfers\",\n      \"description_ptr\": \"permdesc_handoverStatus\",\n      \"label\": \"Receive Android Beam transfer status\",\n      \"label_ptr\": \"permlab_handoverStatus\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the app to modify collected component usage statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"Allows the app to verify a package is\\n        installable.\",\n      \"description_ptr\": \"permdesc_packageVerificationAgent\",\n      \"label\": \"verify packages\",\n      \"label_ptr\": \"permlab_packageVerificationAgent\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the app to start CDMA provisioning.\\n        Malicious apps may unnecessarily start CDMA provisioning.\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"Allows an application to provide a trust agent.\",\n      \"description_ptr\": \"permdesc_provide_trust_agent\",\n      \"label\": \"Provide a trust agent.\",\n      \"label_ptr\": \"permlab_provide_trust_agent\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n      cell broadcast messages received by your device. Cell broadcast alerts\\n      are delivered in some locations to warn you of emergency situations.\\n      Malicious apps may interfere with the performance or operation of your\\n      device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows the app to read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows the app to watch the\\n        keys you press even when interacting with another app (such\\n        as typing a password). Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"Read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows the app to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"Allows the app to read historical network usage for specific networks and apps.\",\n      \"description_ptr\": \"permdesc_readNetworkUsageHistory\",\n      \"label\": \"read historical network usage\",\n      \"label_ptr\": \"permlab_readNetworkUsageHistory\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the precise\\n      phone states.  This permission allows the app to determine the real\\n      call status, whether a call is active or in the background, call fails,\\n      precise data connection status and data connection fails.\",\n      \"description_ptr\": \"permdesc_readPrecisePhoneState\",\n      \"label\": \"read precise phone states\",\n      \"label_ptr\": \"permlab_readPrecisePhoneState\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"Allows the app to read\\n     personal profile information stored on your device, such as your name and\\n     contact information. This means the app can identify you and may send your\\n     profile information to others.\",\n      \"description_ptr\": \"permdesc_readProfile\",\n      \"label\": \"read your own contact card\",\n      \"label_ptr\": \"permlab_readProfile\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app\\n      to access and sync social updates from you and your friends. Be careful\\n      when sharing information -- this allows the app to read communications\\n      between you and your friends on social networks, regardless of\\n      confidentiality. Note: this permission may not be enforced on all social\\n      networks.\",\n      \"description_ptr\": \"permdesc_readSocialStream\",\n      \"label\": \"read your social stream\",\n      \"label_ptr\": \"permlab_readSocialStream\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to read all words,\\n       names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read terms you added to the dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.USER_DICTIONARY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the app to force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"Allows the app to receive and process Bluetooth MAP\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveBluetoothMap\",\n      \"label\": \"receive Bluetooth messages (MAP)\",\n      \"label_ptr\": \"permlab_receiveBluetoothMap\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"Allows the app to receive\\n      and process emergency broadcast messages. This permission is only available\\n      to system apps.\",\n      \"description_ptr\": \"permdesc_receiveEmergencyBroadcast\",\n      \"label\": \"receive emergency broadcasts\",\n      \"label_ptr\": \"permlab_receiveEmergencyBroadcast\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows the app to record audio with the\\n      microphone.  This permission allows the app to record audio at any time\\n      without your confirmation.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"Allows an application to interact with the recovery system and system updates.\",\n      \"description_ptr\": \"permdesc_recovery\",\n      \"label\": \"Interact with update and recovery system\",\n      \"label_ptr\": \"permlab_recovery\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"Allows the app to register new telecom connections.\",\n      \"description_ptr\": \"permdesc_register_call_provider\",\n      \"label\": \"register new telecom connections\",\n      \"label_ptr\": \"permlab_register_call_provider\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"Allows the app to manage telecom connections.\",\n      \"description_ptr\": \"permdesc_connection_manager\",\n      \"label\": \"manage telecom connections\",\n      \"label_ptr\": \"permlab_connection_manager\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"Allows the app to register new telecom SIM connections.\",\n      \"description_ptr\": \"permdesc_register_sim_subscription\",\n      \"label\": \"register new telecom SIM connections\",\n      \"label_ptr\": \"permlab_register_sim_subscription\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"Allows an application to remove DRM certficates. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_removeDrmCertificates\",\n      \"label\": \"remove DRM certificates\",\n      \"label_ptr\": \"permlab_removeDrmCertificates\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"Allows the app to remove\\n        tasks and kill their apps. Malicious apps may disrupt\\n        the behavior of other apps.\",\n      \"description_ptr\": \"permdesc_removeTasks\",\n      \"label\": \"stop running apps\",\n      \"label_ptr\": \"permlab_removeTasks\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.APP_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"Allows the app to retrieve\\n        the content of the active window. Malicious apps may retrieve\\n        the entire window content and examine all its text except passwords.\",\n      \"description_ptr\": \"permdesc_retrieve_window_content\",\n      \"label\": \"retrieve screen content\",\n      \"label_ptr\": \"permlab_retrieve_window_content\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"Allows an application to retrieve\\n        the window token. Malicious apps may perfrom unauthorized interaction with\\n        the application window impersonating the system.\",\n      \"description_ptr\": \"permdesc_retrieveWindowToken\",\n      \"label\": \"retrieve window token\",\n      \"label_ptr\": \"permlab_retrieveWindowToken\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"Allows the app to\\n        rank networks and influence which networks the phone should prefer.\",\n      \"description_ptr\": \"permdesc_scoreNetworks\",\n      \"label\": \"score networks\",\n      \"label_ptr\": \"permlab_scoreNetworks\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"Allows the app to send\\n      requests to other messaging apps to handle respond-via-message events for incoming\\n      calls.\",\n      \"description_ptr\": \"permdesc_sendRespondViaMessageRequest\",\n      \"label\": \"send respond-via-message events\",\n      \"label_ptr\": \"permlab_sendRespondViaMessageRequest\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"Allows the holder to access serial ports using the SerialManager API.\",\n      \"description_ptr\": \"permdesc_serialPort\",\n      \"label\": \"access serial ports\",\n      \"label_ptr\": \"permlab_serialPort\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows the app to\\n        monitor and control how the system launches activities.\\n        Malicious apps may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        use.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all app launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows the app\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"force background apps to close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows the app to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows the app to turn\\n        on debugging for another app. Malicious apps may use this\\n        to kill other apps.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable app debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setInputCalibration\",\n      \"label\": \"change input device calibration\",\n      \"label_ptr\": \"permlab_setInputCalibration\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"Allows the app to change\\n        the keyboard layout. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setKeyboardLayout\",\n      \"label\": \"change keyboard layout\",\n      \"label_ptr\": \"permlab_setKeyboardLayout\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows the app to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"Allows the app to change\\n        the mouse or trackpad pointer speed at any time. Should never be needed for\\n        normal apps.\",\n      \"description_ptr\": \"permdesc_setPointerSpeed\",\n      \"label\": \"change pointer speed\",\n      \"label_ptr\": \"permlab_setPointerSpeed\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows the app to\\n        modify your preferred apps. Malicious apps may\\n        silently change the apps that are run, spoofing your\\n        existing apps to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred apps\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows the app\\n        to control the maximum number of processes that will run. Never\\n        needed for normal apps.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"Allows the app to control the\\n        screen compatibility mode of other applications.  Malicious applications may\\n        break the behavior of other applications.\",\n      \"description_ptr\": \"permdesc_setScreenCompatibility\",\n      \"label\": \"set screen compatibility\",\n      \"label_ptr\": \"permlab_setScreenCompatibility\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows the app to change the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_CLOCK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.WALLPAPER\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows the app to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to apps\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"Allows the app to start any activity, regardless of permission protection or exported state.\",\n      \"description_ptr\": \"permdesc_startAnyActivity\",\n      \"label\": \"start any activity\",\n      \"label_ptr\": \"permlab_startAnyActivity\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"Allows the app to use an ActivityManager.RecentTaskInfo\\n        object to launch a defunct task that was returned from ActivityManager.getRecentTaskList().\",\n      \"description_ptr\": \"permdesc_startTasksFromRecents\",\n      \"label\": \"start a task from recents\",\n      \"label_ptr\": \"permlab_startTasksFromRecents\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows the app to disable the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the app to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another app.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows the app to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows the app to modify\\n      your currently synced feeds. Malicious apps may change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to draw on top of other\\n        applications or parts of the user interface.  They may interfere with your\\n        use of the interface in any application, or change what you think you are\\n        seeing in other applications.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.DISPLAY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"Allows an application to temporarily\\n         enable accessibility on the device. Malicious apps may enable accessibility without\\n         user consent.\",\n      \"description_ptr\": \"permdesc_temporary_enable_accessibility\",\n      \"label\": \"temporary enable accessibility\",\n      \"label_ptr\": \"permlab_temporary_enable_accessibility\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"Allows an application to listen for changes in trust state.\",\n      \"description_ptr\": \"permdesc_trust_listener\",\n      \"label\": \"Listen to trust state changes.\",\n      \"label_ptr\": \"permlab_trust_listener\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected application operation statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateAppOpsStats\",\n      \"label\": \"modify app ops statistics\",\n      \"label_ptr\": \"permlab_updateAppOpsStats\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the app to modify\\n        collected battery statistics. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_updateBatteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_updateBatteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"Allows the holder to offer information to the system about when would be a good time for a noninteractive reboot to upgrade the device.\",\n      \"description_ptr\": \"permdesc_updateLock\",\n      \"label\": \"discourage automatic device updates\",\n      \"label_ptr\": \"permlab_updateLock\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"Allows the app to reset the display timeout.\",\n      \"description_ptr\": \"permdesc_userActivity\",\n      \"label\": \"reset display timeout\",\n      \"label_ptr\": \"permlab_userActivity\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows the app to request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use accounts on the device\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.AFFECTS_BATTERY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows the app to change network settings and to intercept and inspect all network traffic,\\n      for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network\\n      packets without your knowledge.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"change/intercept network settings and traffic\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n        add, remove, change events that you can modify on your phone, including\\n        those of friends or co-workers. This may allow the app to send messages\\n        that appear to come from calendar owners, or modify events without the\\n        owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows the app to modify the\\n        Google services map.  Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"Allows the app to modify the contents of the internal media storage.\",\n      \"description_ptr\": \"permdesc_mediaStorageWrite\",\n      \"label\": \"modify/delete internal media storage contents\",\n      \"label_ptr\": \"permlab_mediaStorageWrite\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"Allows the app to\\n      change or add to personal profile information stored on your device, such\\n      as your name and contact information.  This means the app can identify you\\n      and may send your profile information to others.\",\n      \"description_ptr\": \"permdesc_writeProfile\",\n      \"label\": \"modify your own contact card\",\n      \"label_ptr\": \"permlab_writeProfile\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's secure settings data. Not for use by normal apps.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"signature|system|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows the app to write\\n      to SMS messages stored on your phone or SIM card. Malicious apps\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"Allows the app to\\n     display social updates from your friends.  Be careful when sharing\\n     information -- this allows the app to produce messages that may appear to\\n     come from a friend. Note: this permission may not be enforced on all social\\n     networks.\",\n      \"description_ptr\": \"permdesc_writeSocialStream\",\n      \"label\": \"write to your social stream\",\n      \"label_ptr\": \"permlab_writeSocialStream\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"android.permission-group.SOCIAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYNC_SETTINGS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows the app to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"add words to user-defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.WRITE_USER_DICTIONARY\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n      an installed alarm clock app. Some alarm clock apps may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.DEVICE_ALARMS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the app to read the\\n     history of all URLs that the Browser has visited, and all of the Browser's\\n     bookmarks. Note: this permission may not be enforced by third-party\\n     browsers or other  applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read your Web bookmarks and history\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the\\n        app to modify the Browser's history or bookmarks stored on your phone.\\n        This may allow the app to erase or modify Browser data.  Note:\\n        this permission may note be enforced by third-party browsers or other\\n        applications with web browsing capabilities.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write web bookmarks and history\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.BOOKMARKS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"Allows the app to read your voicemails.\",\n      \"description_ptr\": \"permdesc_readVoicemail\",\n      \"label\": \"read voicemail\",\n      \"label_ptr\": \"permlab_readVoicemail\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"Allows the app to modify and remove messages from your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_writeVoicemail\",\n      \"label\": \"write voicemails\",\n      \"label_ptr\": \"permlab_writeVoicemail\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.VOICEMAIL\",\n      \"protectionLevel\": \"system|signature\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_23.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99 .9 -1.99 2L3 19c0 1.1 .89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M 12 8.8 C 13.7673111995 8.8 15.2 10.2326888005 15.2 12 C 15.2 13.7673111995 13.7673111995 15.2 12 15.2 C 10.2326888005 15.2 8.8 13.7673111995 8.8 12 C 8.8 10.2326888005 10.2326888005 8.8 12 8.8 Z\\\" fill=\\\"#000000\\\"/><path d=\\\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z\\\" fill=\\\"none\\\"/><path d=\\\"M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body Sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20 2H4c-1.1 0-1.99 .9 -1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10 4H4c-1.1 0-1.99 .9 -1.99 2L2 18c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      approximate location. This location is derived by location services using\\n      network location sources such as cell towers and Wi-Fi. These location\\n      services must be turned on and available to your device for the app to\\n      use them. Apps may use this to determine approximately where you\\n      are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      precise location using the Global Positioning System (GPS) or network\\n      location sources such as cell towers and Wi-Fi. These location services\\n      must be turned on and available to your device for the app to use them.\\n      Apps may use this to determine where you are, and may consume additional\\n      battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|system\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"Change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the app to control the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_IMPORTANCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PACKAGE_IMPORTANCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"Manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"Read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows the app to record audio with the\\n      microphone.  This permission allows the app to record audio at any time\\n      without your confirmation.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"Request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to draw on top of other\\n        applications or parts of the user interface.  They may interfere with your\\n        use of the interface in any application, or change what you think you are\\n        seeing in other applications.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|development\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n        add, remove, change events that you can modify on your phone, including\\n        those of friends or co-workers. This may allow the app to send messages\\n        that appear to come from calendar owners, or modify events without the\\n        owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"system|signature\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_24.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99 .9 -1.99 2L3 19c0 1.1 .89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M 12 8.8 C 13.7673111995 8.8 15.2 10.2326888005 15.2 12 C 15.2 13.7673111995 13.7673111995 15.2 12 15.2 C 10.2326888005 15.2 8.8 13.7673111995 8.8 12 C 8.8 10.2326888005 10.2326888005 8.8 12 8.8 Z\\\" fill=\\\"#000000\\\"/><path d=\\\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z\\\" fill=\\\"none\\\"/><path d=\\\"M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body Sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20 2H4c-1.1 0-1.99 .9 -1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10 4H4c-1.1 0-1.99 .9 -1.99 2L2 18c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\\\" fill=\\\"#000000\\\"/><path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      approximate location. This location is derived by location services using\\n      network location sources such as cell towers and Wi-Fi. These location\\n      services must be turned on and available to your device for the app to\\n      use them. Apps may use this to determine approximately where you\\n      are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_EPHEMERAL_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_EPHEMERAL_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      precise location using the Global Positioning System (GPS) or network\\n      location sources such as cell towers and Wi-Fi. These location services\\n      must be turned on and available to your device for the app to use them.\\n      Apps may use this to determine where you are, and may consume additional\\n      battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_IMPORTANCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PACKAGE_IMPORTANCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows the app to record audio with the\\n      microphone.  This permission allows the app to record audio at any time\\n      without your confirmation.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to draw on top of other\\n        applications or parts of the user interface.  They may interfere with your\\n        use of the interface in any application, or change what you think you are\\n        seeing in other applications.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|development\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n        add, remove, change events that you can modify on your phone, including\\n        those of friends or co-workers. This may allow the app to send messages\\n        that appear to come from calendar owners, or modify events without the\\n        owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_25.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99 .9 -1.99 2L3 19c0 1.1 .89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M 12 8.8 C 13.7673111995 8.8 15.2 10.2326888005 15.2 12 C 15.2 13.7673111995 13.7673111995 15.2 12 15.2 C 10.2326888005 15.2 8.8 13.7673111995 8.8 12 C 8.8 10.2326888005 10.2326888005 8.8 12 8.8 Z\\\" fill=\\\"#000000\\\"/><path d=\\\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body Sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20 2H4c-1.1 0-1.99 .9 -1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10 4H4c-1.1 0-1.99 .9 -1.99 2L2 18c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      approximate location. This location is derived by location services using\\n      network location sources such as cell towers and Wi-Fi. These location\\n      services must be turned on and available to your device for the app to\\n      use them. Apps may use this to determine approximately where you\\n      are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_EPHEMERAL_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_EPHEMERAL_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Allows the app to get your\\n      precise location using the Global Positioning System (GPS) or network\\n      location sources such as cell towers and Wi-Fi. These location services\\n      must be turned on and available to your device for the app to use them.\\n      Apps may use this to determine where you are, and may consume additional\\n      battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows the app to take pictures and videos\\n      with the camera.  This permission allows the app to use the camera at any\\n      time without your confirmation.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_IMPORTANCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PACKAGE_IMPORTANCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows the app to\\n       read all calendar events stored on your phone, including those of friends\\n       or co-workers. This may allow the app to share or save your calendar data,\\n       regardless of confidentiality or sensitivity.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events plus confidential information\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"Allows the app to read\\n      your phone's call log, including data about incoming and outgoing calls.\\n      This permission allows apps to save your call log data, and malicious apps\\n      may share call log data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows the app to read SMS\\n      messages stored on your phone or SIM card. This allows the app to read all\\n      SMS messages, regardless of content or confidentiality.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows the app to record audio with the\\n      microphone.  This permission allows the app to record audio at any time\\n      without your confirmation.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows the app to draw on top of other\\n        applications or parts of the user interface.  They may interfere with your\\n        use of the interface in any application, or change what you think you are\\n        seeing in other applications.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"draw over other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|development\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows the app to\\n        add, remove, change events that you can modify on your phone, including\\n        those of friends or co-workers. This may allow the app to send messages\\n        that appear to come from calendar owners, or modify events without the\\n        owners' knowledge.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_26.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99 .9 -1.99 2L3 19c0 1.1 .89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M 12 8.8 C 13.7673111995 8.8 15.2 10.2326888005 15.2 12 C 15.2 13.7673111995 13.7673111995 15.2 12 15.2 C 10.2326888005 15.2 8.8 13.7673111995 8.8 12 C 8.8 10.2326888005 10.2326888005 8.8 12 8.8 Z\\\" fill=\\\"#000000\\\"/><path d=\\\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body Sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20 2H4c-1.1 0-1.99 .9 -1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10 4H4c-1.1 0-1.99 .9 -1.99 2L2 18c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous|ephemeral\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your location based on GPS or network location sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous|ephemeral\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|ephemeral\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous|ephemeral\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|ephemeral|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|ephemeral\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous|ephemeral\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|development\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|ephemeral\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|ephemeral\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_27.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99 .9 -1.99 2L3 19c0 1.1 .89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M 12 8.8 C 13.7673111995 8.8 15.2 10.2326888005 15.2 12 C 15.2 13.7673111995 13.7673111995 15.2 12 15.2 C 10.2326888005 15.2 8.8 13.7673111995 8.8 12 C 8.8 10.2326888005 10.2326888005 8.8 12 8.8 Z\\\" fill=\\\"#000000\\\"/><path d=\\\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body Sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20 2H4c-1.1 0-1.99 .9 -1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M10 4H4c-1.1 0-1.99 .9 -1.99 2L2 18c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your location based on GPS or network location sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACTIVITY_EMBEDDING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACTIVITY_EMBEDDING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|instant|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_LOWPAN_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOWPAN_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_PLANS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_PLANS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTENT_RATING_SYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CONTENT_RATING_SYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_LOWPAN_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOWPAN_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRINT_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WALLPAPER_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WALLPAPER_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_EMBMS_INTENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_EMBMS_INTENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|development\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.UPDATE_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_COLORIZED_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_COLORIZED_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.permission.BIND_EUICC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.BIND_EUICC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_28.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99 .9 -1.99 2L3 19c0 1.1 .89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CALL_LOG\": {\n      \"description\": \"read and write phone call log\",\n      \"description_ptr\": \"permgroupdesc_calllog\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\" width=\\\"24.0\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M16.01,14.48l-2.62,2.62c-2.75,-1.49 -5.01,-3.75 -6.5,-6.5l2.62,-2.62c0.24,-0.24 0.34,-0.58 0.27,-0.9L9.13,3.82c-0.09,-0.47 -0.5,-0.8 -0.98,-0.8L4,3.01c-0.56,0 -1.03,0.47 -1,1.03c0.17,2.91 1.04,5.63 2.43,8.01c1.57,2.69 3.81,4.93 6.5,6.5c2.38,1.39 5.1,2.26 8.01,2.43c0.56,0.03 1.03,-0.44 1.03,-1v-4.15c0,-0.48 -0.34,-0.89 -0.8,-0.98l-3.26,-0.65C16.58,14.14 16.24,14.24 16.01,14.48z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,8h10V6H12V8zM12,4h10V2H12V4zM22,10H12v2h10V10z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_call_log\",\n      \"label\": \"Call logs\",\n      \"label_ptr\": \"permgrouplab_calllog\",\n      \"name\": \"android.permission-group.CALL_LOG\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20,5h-3.17L15,3H9L7.17,5H4C2.9,5 2,5.9 2,7v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM20,19H4V7h16V19z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9c-2.21,0 -4,1.79 -4,4c0,2.21 1.79,4 4,4s4,-1.79 4,-4C16,10.79 14.21,9 12,9z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M4,1h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M4,21h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M20,5H4C2.9,5 2,5.9 2,7v10c0,1.1 0.9,2 2,2h2h12h2c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM8.21,17c0.7,-0.47 2.46,-1 3.79,-1s3.09,0.53 3.79,1H8.21zM20,17h-2c0,-1.99 -4,-3 -6,-3s-6,1.01 -6,3H4V7h16V17z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,13.5c1.66,0 3,-1.34 3,-3c0,-1.66 -1.34,-3 -3,-3s-3,1.34 -3,3C9,12.16 10.34,13.5 12,13.5zM12,9.5c0.55,0 1,0.45 1,1s-0.45,1 -1,1s-1,-0.45 -1,-1S11.45,9.5 12,9.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12,14c1.66,0 3,-1.34 3,-3V5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6C9,12.66 10.34,14 12,14zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5H5c0,3.53 2.61,6.43 6,6.92V21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92H17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body Sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20,2H4C2.9,2 2,2.9 2,4v18l4.75,-4h14C21.1,18 22,17.1 22,16V4C22,2.9 21.1,2 20,2zM20,16H4V4h16V16zM9,11H7V9h2V11zM17,11h-2V9h2V11zM13,11h-2V9h2V11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M20,6h-8l-2,-2H4C2.9,4 2.01,4.9 2.01,6L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8C22,6.9 21.1,6 20,6zM20,18H4V8h16V18z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCEPT_HANDOVER\": {\n      \"description\": \"Allows the app to continue a call which was started in another app.\",\n      \"description_ptr\": \"permdesc_acceptHandovers\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCEPT_HANDOVER\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location\\n      (network-based)\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your location based on GPS or network location sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location (GPS and\\n      network-based)\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SHORTCUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHORTCUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|textClassifier\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACTIVITY_EMBEDDING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACTIVITY_EMBEDDING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EUICC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EUICC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELEPHONY_DATA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_DATA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRIGHTNESS_SLIDER_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRIGHTNESS_SLIDER_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.CAMERA\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_SATURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_SATURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_HIDDEN_API_CHECKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_HIDDEN_API_CHECKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FOREGROUND_SERVICE\": {\n      \"description\": \"Allows the app to make use of foreground services.\",\n      \"description_ptr\": \"permdesc_foregroundService\",\n      \"label\": \"run foreground service\",\n      \"label_ptr\": \"permlab_foregroundService\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGE_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGE_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_SELF_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_SELF_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|instant|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.MANAGE_APP_OPS_MODES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_MODES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUDIO_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUDIO_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIND_INSTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIND_INSTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BLUETOOTH_WHEN_PERMISSION_REVIEW_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BLUETOOTH_WHEN_PERMISSION_REVIEW_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_IPSEC_TUNNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_IPSEC_TUNNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_LOWPAN_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOWPAN_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SLICE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SLICE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_PLANS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_PLANS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WIFI_WHEN_PERMISSION_REVIEW_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_WHEN_PERMISSION_REVIEW_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_QUIET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_QUIET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SETUP_WIZARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETUP_WIZARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_TRANSACTION_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_TRANSACTION_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_APP_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_APP_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OPEN_APPLICATION_DETAILS_OPEN_BY_DEFAULT_PAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_APPLICATION_DETAILS_OPEN_BY_DEFAULT_PAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.CALL_LOG\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.CALL_LOG\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to\\n      read data about your contacts stored on your phone, including the\\n      frequency with which you've called, emailed, or communicated in other ways\\n      with specific individuals. This permission allows apps to save your\\n      contact data, and malicious apps may share contact data without your\\n      knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTENT_RATING_SYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CONTENT_RATING_SYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your SD card.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_LOWPAN_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOWPAN_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRINT_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_RUNTIME_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_RUNTIME_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYSTEM_UPDATE_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SYSTEM_UPDATE_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WALLPAPER_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WALLPAPER_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.MICROPHONE\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECOVER_KEYSTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVER_KEYSTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_EMBMS_INTENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_EMBMS_INTENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.SMS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_HARMFUL_APP_WARNINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_HARMFUL_APP_WARNINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHOW_KEYGUARD_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHOW_KEYGUARD_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATSCOMPANION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATSCOMPANION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUSPEND_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUSPEND_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|development\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BLACKLISTED_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BLACKLISTED_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|textClassifier\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.UPDATE_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_BIOMETRIC\": {\n      \"description\": \"Allows the app to use biometric hardware for authentication\",\n      \"description_ptr\": \"permdesc_useBiometric\",\n      \"label\": \"use biometric hardware\",\n      \"label_ptr\": \"permlab_useBiometric\",\n      \"name\": \"android.permission.USE_BIOMETRIC\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_COLORIZED_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_COLORIZED_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_RESERVED_DISK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_RESERVED_DISK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.WATCH_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WATCH_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.CALENDAR\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.CALL_LOG\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to\\n    modify the data about your contacts stored on your phone, including the\\n    frequency with which you've called, emailed, or communicated in other ways\\n    with specific contacts. This permission allows apps to delete contact\\n    data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.CONTACTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your SD card\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.permission.INSTALL_EXISTING_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.INSTALL_EXISTING_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_29.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACTIVITY_RECOGNITION\": {\n      \"description\": \"access your physical activity\",\n      \"description_ptr\": \"permgroupdesc_activityRecognition\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_activity_recognition\",\n      \"label\": \"Physical activity\",\n      \"label_ptr\": \"permgrouplab_activityRecognition\",\n      \"name\": \"android.permission-group.ACTIVITY_RECOGNITION\",\n      \"request_ptr\": \"permgrouprequest_activityRecognition\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99 0.9 -1.99 2L3 20c0 1.1 0.89 2 2 2h14c1.1 0 2-0.9 2-2V6c0-1.1-0.9-2-2-2zm0 16H5V10h14v10zm-4.5-7c-1.38 0-2.5 1.12-2.5 2.5s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\",\n      \"request_ptr\": \"permgrouprequest_calendar\"\n    },\n    \"android.permission-group.CALL_LOG\": {\n      \"description\": \"read and write phone call log\",\n      \"description_ptr\": \"permgroupdesc_calllog\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24.0\\\" height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\"><path d=\\\"M16.01,14.48l-2.62,2.62c-2.75,-1.49 -5.01,-3.75 -6.5,-6.5l2.62,-2.62c0.24,-0.24 0.34,-0.58 0.27,-0.9L9.13,3.82c-0.09,-0.47 -0.5,-0.8 -0.98,-0.8L4,3.01c-0.56,0 -1.03,0.47 -1,1.03c0.17,2.91 1.04,5.63 2.43,8.01c1.57,2.69 3.81,4.93 6.5,6.5c2.38,1.39 5.1,2.26 8.01,2.43c0.56,0.03 1.03,-0.44 1.03,-1v-4.15c0,-0.48 -0.34,-0.89 -0.8,-0.98l-3.26,-0.65C16.58,14.14 16.24,14.24 16.01,14.48z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,8h10V6H12V8zM12,4h10V2H12V4zM22,10H12v2h10V10z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_call_log\",\n      \"label\": \"Call logs\",\n      \"label_ptr\": \"permgrouplab_calllog\",\n      \"name\": \"android.permission-group.CALL_LOG\",\n      \"request_ptr\": \"permgrouprequest_calllog\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,5h-3.17L15,3H9L7.17,5H4C2.9,5 2,5.9 2,7v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM20,19H4V7h16V19z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9c-2.21,0 -4,1.79 -4,4c0,2.21 1.79,4 4,4s4,-1.79 4,-4C16,10.79 14.21,9 12,9z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\",\n      \"request_ptr\": \"permgrouprequest_camera\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4,1h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M4,21h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M20,5H4C2.9,5 2,5.9 2,7v10c0,1.1 0.9,2 2,2h2h12h2c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM8.21,17c0.7,-0.47 2.46,-1 3.79,-1s3.09,0.53 3.79,1H8.21zM20,17h-2c0,-1.99 -4,-3 -6,-3s-6,1.01 -6,3H4V7h16V17z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,13.5c1.66,0 3,-1.34 3,-3c0,-1.66 -1.34,-3 -3,-3s-3,1.34 -3,3C9,12.16 10.34,13.5 12,13.5zM12,9.5c0.55,0 1,0.45 1,1s-0.45,1 -1,1s-1,-0.45 -1,-1S11.45,9.5 12,9.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\",\n      \"request_ptr\": \"permgrouprequest_contacts\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\",\n      \"request_ptr\": \"permgrouprequest_location\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,14c1.66,0 3,-1.34 3,-3V5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6C9,12.66 10.34,14 12,14zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5H5c0,3.53 2.61,6.43 6,6.92V21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92H17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\",\n      \"request_ptr\": \"permgrouprequest_microphone\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\",\n      \"request_ptr\": \"permgrouprequest_phone\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16.5,3c-1.74,0 -3.41,0.81 -4.5,2.09C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.42 2,                         8.5c0,3.78 3.4,6.86 8.55,11.54L12,21.35l1.45,-1.32C18.6,15.36 22,12.28 22,8.5C22,                         5.42 19.58,3 16.5,3zM12.1,18.55l-0.1,0.1l-0.1,-0.1C7.14,14.24 4,11.39 4,8.5C4,6.5 5.5,                         5 7.5,5c1.54,0 3.04,0.99 3.57,2.36h1.87C13.46,5.99 14.96,5 16.5,5c2,0 3.5,1.5 3.5,3.5C20,                         11.39 16.86,14.24 12.1,18.55z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\",\n      \"request_ptr\": \"permgrouprequest_sensors\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,2H4C2.9,2 2,2.9 2,4v18l4.75,-4h14C21.1,18 22,17.1 22,16V4C22,2.9 21.1,2 20,2zM20,16H4V4h16V16zM9,11H7V9h2V11zM17,11h-2V9h2V11zM13,11h-2V9h2V11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\",\n      \"request_ptr\": \"permgrouprequest_sms\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,6h-8l-2,-2H4C2.9,4 2.01,4.9 2.01,6L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8C22,6.9 21.1,6 20,6zM20,18H4V8h16V18z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\",\n      \"request_ptr\": \"permgrouprequest_storage\"\n    },\n    \"android.permission-group.UNDEFINED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission-group.UNDEFINED\",\n      \"request_ptr\": \"\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCEPT_HANDOVER\": {\n      \"description\": \"Allows the app to continue a call which was started in another app.\",\n      \"description_ptr\": \"permdesc_acceptHandovers\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCEPT_HANDOVER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_BACKGROUND_LOCATION\": {\n      \"description\": \"If this is granted additionally to the approximate or precise location access the app can access the location while running in the background.\",\n      \"description_ptr\": \"permdesc_accessBackgroundLocation\",\n      \"label\": \"access location in the background\",\n      \"label_ptr\": \"permlab_accessBackgroundLocation\",\n      \"name\": \"android.permission.ACCESS_BACKGROUND_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your location based on network sources such as cell towers and Wi-Fi networks, but only when the app is in the foreground. These location services must be turned on and available on your phone for the app to be able to use them.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location (network-based) only in the foreground\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your exact location only when it is in the foreground. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location only in the foreground\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier|wellbeing\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_MEDIA_LOCATION\": {\n      \"description\": \"Allows the app to read locations from your media collection.\",\n      \"description_ptr\": \"permdesc_mediaLocation\",\n      \"label\": \"read locations from your media collection\",\n      \"label_ptr\": \"permlab_mediaLocation\",\n      \"name\": \"android.permission.ACCESS_MEDIA_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SHARED_LIBRARIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHARED_LIBRARIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ACCESS_SHORTCUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHORTCUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appPredictor\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_WIMAX_STATE\": {\n      \"description\": \"Allows the app to determine whether\\n     WiMAX is enabled and information about any WiMAX networks that are\\n     connected. \",\n      \"description_ptr\": \"permdesc_accessWimaxState\",\n      \"label\": \"connect and disconnect from WiMAX\",\n      \"label_ptr\": \"permlab_accessWimaxState\",\n      \"name\": \"android.permission.ACCESS_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACTIVITY_EMBEDDING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACTIVITY_EMBEDDING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACTIVITY_RECOGNITION\": {\n      \"description\": \"This app can recognize your physical activity.\",\n      \"description_ptr\": \"permdesc_activityRecognition\",\n      \"label\": \"recognize physical activity\",\n      \"label_ptr\": \"permlab_activityRecognition\",\n      \"name\": \"android.permission.ACTIVITY_RECOGNITION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.AMBIENT_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AMBIENT_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.APPROVE_INCIDENT_REPORTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.APPROVE_INCIDENT_REPORTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|incidentReportApprover\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_ATTENTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ATTENTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_REDIRECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_REDIRECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EUICC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EUICC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_FINANCIAL_SMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_FINANCIAL_SMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELEPHONY_DATA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_DATA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRIGHTNESS_SLIDER_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRIGHTNESS_SLIDER_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.CALL_COMPANION_APP\": {\n      \"description\": \"Allows the app to see and control ongoing calls on the\\n        device. This includes information such as call numbers for calls and the state of the\\n        calls.\",\n      \"description_ptr\": \"permdesc_callCompanionApp\",\n      \"label\": \"see and control calls through the system.\",\n      \"label_ptr\": \"permlab_callCompanionApp\",\n      \"name\": \"android.permission.CALL_COMPANION_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\": {\n      \"description\": \"This app can receive callbacks when any camera device is being opened (by what application) or closed.\",\n      \"description_ptr\": \"permdesc_cameraOpenCloseListener\",\n      \"label\": \"Allow an application or service to receive callbacks about camera devices being opened or closed.\",\n      \"label_ptr\": \"permlab_cameraOpenCloseListener\",\n      \"name\": \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_MEDIA_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_MEDIA_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIMAX_STATE\": {\n      \"description\": \"Allows the app to\\n      connect the phone to and disconnect the phone from WiMAX networks.\",\n      \"description_ptr\": \"permdesc_changeWimaxState\",\n      \"label\": \"change WiMAX state\",\n      \"label_ptr\": \"permlab_changeWimaxState\",\n      \"name\": \"android.permission.CHANGE_WIMAX_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_ALWAYS_ON_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_ALWAYS_ON_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DISPLAY_SATURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_SATURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_HIDDEN_API_CHECKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_HIDDEN_API_CHECKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ENABLE_TEST_HARNESS_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENABLE_TEST_HARNESS_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FOREGROUND_SERVICE\": {\n      \"description\": \"Allows the app to make use of foreground services.\",\n      \"description_ptr\": \"permdesc_foregroundService\",\n      \"label\": \"run foreground service\",\n      \"label_ptr\": \"permlab_foregroundService\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGE_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGE_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_SELF_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_SELF_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|instant|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCK_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCK_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APP_OPS_MODES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_MODES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_PREDICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_PREDICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appPredictor\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUDIO_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUDIO_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIND_INSTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIND_INSTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC_DIALOG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC_DIALOG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_CAPTURE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_CAPTURE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_SUGGESTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_SUGGESTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DEBUGGING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEBUGGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.MANAGE_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_IPSEC_TUNNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_IPSEC_TUNNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_LOWPAN_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOWPAN_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SLICE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SLICE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_PLANS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_PLANS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TEST_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TEST_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WIFI_WHEN_WIRELESS_CONSENT_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_WHEN_WIRELESS_CONSENT_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_QUIET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_QUIET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MONITOR_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_CARRIER_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_CARRIER_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_MANAGED_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_MANAGED_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SCAN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SCAN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SETUP_WIZARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETUP_WIZARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_TRANSACTION_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_TRANSACTION_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_APP_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_APP_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_ROLLBACK_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_ROLLBACK_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.POWER_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.POWER_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to read data about your contacts stored on your phone.\\n      This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTENT_RATING_SYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CONTENT_RATING_SYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_LOWPAN_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOWPAN_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRINT_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_RUNTIME_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_RUNTIME_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYSTEM_UPDATE_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SYSTEM_UPDATE_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WALLPAPER_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WALLPAPER_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECOVER_KEYSTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVER_KEYSTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_DISPLAY_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_DISPLAY_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_PASSWORD_COMPLEXITY\": {\n      \"description\": \"Allows the app to learn the screen\\n        lock complexity level (high, medium, low or none), which indicates the possible range of\\n        length and type of the screen lock. The app can also suggest to users that they update the\\n        screen lock to a certain level but users can freely ignore and navigate away. Note that the\\n        screen lock is not stored in plaintext so the app does not know the exact password.\\n    \",\n      \"description_ptr\": \"permdesc_requestPasswordComplexity\",\n      \"label\": \"request screen lock complexity\",\n      \"label_ptr\": \"permlab_requestPasswordComplexity\",\n      \"name\": \"android.permission.REQUEST_PASSWORD_COMPLEXITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESET_FACE_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FACE_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_EMBMS_INTENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_EMBMS_INTENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_HARMFUL_APP_WARNINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_HARMFUL_APP_WARNINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHOW_KEYGUARD_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHOW_KEYGUARD_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SMS_FINANCIAL_TRANSACTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SMS_FINANCIAL_TRANSACTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier\"\n    },\n    \"android.permission.START_ACTIVITY_AS_CALLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITY_AS_CALLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.START_VIEW_PERMISSION_USAGE\": {\n      \"description\": \"Allows the holder to start the permission usage for an app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_startViewPermissionUsage\",\n      \"label\": \"start view permission usage\",\n      \"label_ptr\": \"permlab_startViewPermissionUsage\",\n      \"name\": \"android.permission.START_VIEW_PERMISSION_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.STATSCOMPANION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATSCOMPANION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUSPEND_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUSPEND_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|wellbeing\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|development\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BLACKLISTED_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BLACKLISTED_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appPredictor\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.UPDATE_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_BIOMETRIC\": {\n      \"description\": \"Allows the app to use biometric hardware for authentication\",\n      \"description_ptr\": \"permdesc_useBiometric\",\n      \"label\": \"use biometric hardware\",\n      \"label_ptr\": \"permlab_useBiometric\",\n      \"name\": \"android.permission.USE_BIOMETRIC\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_BIOMETRIC_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_BIOMETRIC_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_COLORIZED_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_COLORIZED_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FULL_SCREEN_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_FULL_SCREEN_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_RESERVED_DISK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_RESERVED_DISK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.WATCH_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WATCH_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to modify the data about your contacts stored on your phone.\\n      This permission allows apps to delete contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier|configurator\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_OBB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_OBB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.permission.INSTALL_EXISTING_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.INSTALL_EXISTING_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    }\n  }\n}\n"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_30.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACTIVITY_RECOGNITION\": {\n      \"description\": \"access your physical activity\",\n      \"description_ptr\": \"permgroupdesc_activityRecognition\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_activity_recognition\",\n      \"label\": \"Physical activity\",\n      \"label_ptr\": \"permgrouplab_activityRecognition\",\n      \"name\": \"android.permission-group.ACTIVITY_RECOGNITION\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99 0.9 -1.99 2L3 20c0 1.1 0.89 2 2 2h14c1.1 0 2-0.9 2-2V6c0-1.1-0.9-2-2-2zm0 16H5V10h14v10zm-4.5-7c-1.38 0-2.5 1.12-2.5 2.5s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CALL_LOG\": {\n      \"description\": \"read and write phone call log\",\n      \"description_ptr\": \"permgroupdesc_calllog\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24.0\\\" height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\"><path d=\\\"M16.01,14.48l-2.62,2.62c-2.75,-1.49 -5.01,-3.75 -6.5,-6.5l2.62,-2.62c0.24,-0.24 0.34,-0.58 0.27,-0.9L9.13,3.82c-0.09,-0.47 -0.5,-0.8 -0.98,-0.8L4,3.01c-0.56,0 -1.03,0.47 -1,1.03c0.17,2.91 1.04,5.63 2.43,8.01c1.57,2.69 3.81,4.93 6.5,6.5c2.38,1.39 5.1,2.26 8.01,2.43c0.56,0.03 1.03,-0.44 1.03,-1v-4.15c0,-0.48 -0.34,-0.89 -0.8,-0.98l-3.26,-0.65C16.58,14.14 16.24,14.24 16.01,14.48z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,8h10V6H12V8zM12,4h10V2H12V4zM22,10H12v2h10V10z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_call_log\",\n      \"label\": \"Call logs\",\n      \"label_ptr\": \"permgrouplab_calllog\",\n      \"name\": \"android.permission-group.CALL_LOG\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,5h-3.17L15,3H9L7.17,5H4C2.9,5 2,5.9 2,7v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM20,19H4V7h16V19z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9c-2.21,0 -4,1.79 -4,4c0,2.21 1.79,4 4,4s4,-1.79 4,-4C16,10.79 14.21,9 12,9z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4,1h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M4,21h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M20,5H4C2.9,5 2,5.9 2,7v10c0,1.1 0.9,2 2,2h2h12h2c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM8.21,17c0.7,-0.47 2.46,-1 3.79,-1s3.09,0.53 3.79,1H8.21zM20,17h-2c0,-1.99 -4,-3 -6,-3s-6,1.01 -6,3H4V7h16V17z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,13.5c1.66,0 3,-1.34 3,-3c0,-1.66 -1.34,-3 -3,-3s-3,1.34 -3,3C9,12.16 10.34,13.5 12,13.5zM12,9.5c0.55,0 1,0.45 1,1s-0.45,1 -1,1s-1,-0.45 -1,-1S11.45,9.5 12,9.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,14c1.66,0 3,-1.34 3,-3V5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6C9,12.66 10.34,14 12,14zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5H5c0,3.53 2.61,6.43 6,6.92V21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92H17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16.5,3c-1.74,0 -3.41,0.81 -4.5,2.09C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.42 2,                         8.5c0,3.78 3.4,6.86 8.55,11.54L12,21.35l1.45,-1.32C18.6,15.36 22,12.28 22,8.5C22,                         5.42 19.58,3 16.5,3zM12.1,18.55l-0.1,0.1l-0.1,-0.1C7.14,14.24 4,11.39 4,8.5C4,6.5 5.5,                         5 7.5,5c1.54,0 3.04,0.99 3.57,2.36h1.87C13.46,5.99 14.96,5 16.5,5c2,0 3.5,1.5 3.5,3.5C20,                         11.39 16.86,14.24 12.1,18.55z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,2H4C2.9,2 2,2.9 2,4v18l4.75,-4h14C21.1,18 22,17.1 22,16V4C22,2.9 21.1,2 20,2zM20,16H4V4h16V16zM9,11H7V9h2V11zM17,11h-2V9h2V11zM13,11h-2V9h2V11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,6h-8l-2,-2H4C2.9,4 2.01,4.9 2.01,6L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8C22,6.9 21.1,6 20,6zM20,18H4V8h16V18z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Files and media\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.UNDEFINED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission-group.UNDEFINED\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCEPT_HANDOVER\": {\n      \"description\": \"Allows the app to continue a call which was started in another app.\",\n      \"description_ptr\": \"permdesc_acceptHandovers\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCEPT_HANDOVER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_BACKGROUND_LOCATION\": {\n      \"description\": \"This app can access location at any time, even while the app is not in use.\",\n      \"description_ptr\": \"permdesc_accessBackgroundLocation\",\n      \"label\": \"access location in the background\",\n      \"label_ptr\": \"permlab_accessBackgroundLocation\",\n      \"name\": \"android.permission.ACCESS_BACKGROUND_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location only in the foreground\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CONTEXT_HUB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTEXT_HUB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location only in the foreground\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier|wellbeing\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appPredictor\"\n    },\n    \"android.permission.ACCESS_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_MEDIA_LOCATION\": {\n      \"description\": \"Allows the app to read locations from your media collection.\",\n      \"description_ptr\": \"permdesc_mediaLocation\",\n      \"label\": \"read locations from your media collection\",\n      \"label_ptr\": \"permlab_mediaLocation\",\n      \"name\": \"android.permission.ACCESS_MEDIA_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MESSAGES_ON_ICC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MESSAGES_ON_ICC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_SHARED_LIBRARIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHARED_LIBRARIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ACCESS_SHORTCUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHORTCUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appPredictor\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_TV_DESCRAMBLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_DESCRAMBLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_TUNER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_TUNER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VIBRATOR_STATE\": {\n      \"description\": \"Allows the app to access the vibrator state.\",\n      \"description_ptr\": \"permdesc_vibrator_state\",\n      \"label\": \"Allows the app to access the vibrator state.\",\n      \"label_ptr\": \"permdesc_vibrator_state\",\n      \"name\": \"android.permission.ACCESS_VIBRATOR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACTIVITY_EMBEDDING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACTIVITY_EMBEDDING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACTIVITY_RECOGNITION\": {\n      \"description\": \"This app can recognize your physical activity.\",\n      \"description_ptr\": \"permdesc_activityRecognition\",\n      \"label\": \"recognize physical activity\",\n      \"label_ptr\": \"permlab_activityRecognition\",\n      \"name\": \"android.permission.ACTIVITY_RECOGNITION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ADD_TRUSTED_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADD_TRUSTED_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.AMBIENT_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AMBIENT_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.APPROVE_INCIDENT_REPORTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.APPROVE_INCIDENT_REPORTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|incidentReportApprover\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY_BY_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY_BY_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_ATTENTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ATTENTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_REDIRECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_REDIRECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CELL_BROADCAST_SERVICE\": {\n      \"description\": \"Allows the app to bind to the\\n        cell broadcast module in order to forward cell broadcast messages\\n        as they are received. Cell broadcast alerts are delivered in some\\n        locations to warn you of emergency situations. Malicious apps may\\n        interfere with the performance or operation of your device when an\\n        emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_bindCellBroadcastService\",\n      \"label\": \"Forward cell broadcast messages\",\n      \"label_ptr\": \"permlab_bindCellBroadcastService\",\n      \"name\": \"android.permission.BIND_CELL_BROADCAST_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EUICC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EUICC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELEPHONY_DATA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_DATA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRIGHTNESS_SLIDER_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRIGHTNESS_SLIDER_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.CALL_COMPANION_APP\": {\n      \"description\": \"Allows the app to see and control ongoing calls on the\\n        device. This includes information such as call numbers for calls and the state of the\\n        calls.\",\n      \"description_ptr\": \"permdesc_callCompanionApp\",\n      \"label\": \"see and control calls through the system.\",\n      \"label_ptr\": \"permlab_callCompanionApp\",\n      \"name\": \"android.permission.CALL_COMPANION_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\": {\n      \"description\": \"This app can receive callbacks when any camera device is being opened (by what application) or closed.\",\n      \"description_ptr\": \"permdesc_cameraOpenCloseListener\",\n      \"label\": \"Allow an application or service to receive callbacks about camera devices being opened or closed.\",\n      \"label_ptr\": \"permlab_cameraOpenCloseListener\",\n      \"name\": \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_MEDIA_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_MEDIA_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_ALWAYS_ON_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_ALWAYS_ON_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DEVICE_LIGHTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_LIGHTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DISPLAY_SATURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_SATURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_HIDDEN_API_CHECKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_HIDDEN_API_CHECKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ENABLE_TEST_HARNESS_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENABLE_TEST_HARNESS_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ENTER_CAR_MODE_PRIORITIZED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENTER_CAR_MODE_PRIORITIZED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\": {\n      \"description\": \"Exempt the app from restrictions to record audio.\",\n      \"description_ptr\": \"permdesc_exemptFromAudioRecordRestrictions\",\n      \"label\": \"exempt from audio record restrictions\",\n      \"label_ptr\": \"permlab_exemptFromAudioRecordRestrictions\",\n      \"name\": \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FOREGROUND_SERVICE\": {\n      \"description\": \"Allows the app to make use of foreground services.\",\n      \"description_ptr\": \"permdesc_foregroundService\",\n      \"label\": \"run foreground service\",\n      \"label_ptr\": \"permlab_foregroundService\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HANDLE_CAR_MODE_CHANGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HANDLE_CAR_MODE_CHANGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGE_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGE_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_SELF_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_SELF_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|instant|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.LOADER_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOADER_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCK_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCK_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOG_COMPAT_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOG_COMPAT_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APP_OPS_MODES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_MODES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_PREDICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_PREDICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appPredictor\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUDIO_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUDIO_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIND_INSTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIND_INSTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC_DIALOG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC_DIALOG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_CAPTURE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_CAPTURE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_SUGGESTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_SUGGESTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CRATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CRATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DEBUGGING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEBUGGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.MANAGE_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_EXTERNAL_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_IPSEC_TUNNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_IPSEC_TUNNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_LOWPAN_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOWPAN_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SLICE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SLICE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_PLANS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_PLANS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TEST_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TEST_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_QUIET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_QUIET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|wellbeing|development\"\n    },\n    \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_AIRPLANE_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_AIRPLANE_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_CARRIER_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_CARRIER_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_FACTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_FACTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_MANAGED_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_MANAGED_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SCAN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SCAN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SETUP_WIZARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETUP_WIZARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_STATS_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STATS_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_PREFERRED_PAYMENT_INFO\": {\n      \"description\": \"Allows the app to get preferred nfc payment service information like\\n      registered aids and route destination.\",\n      \"description_ptr\": \"permdesc_preferredPaymentInfo\",\n      \"label\": \"Preferred NFC Payment Service Information\",\n      \"label_ptr\": \"permlab_preferredPaymentInfo\",\n      \"name\": \"android.permission.NFC_PREFERRED_PAYMENT_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_TRANSACTION_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_TRANSACTION_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_APP_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_APP_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OBSERVE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_APP_OPEN_BY_DEFAULT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_ROLLBACK_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_ROLLBACK_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop|retailDemo\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEEK_DROPBOX_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEEK_DROPBOX_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.POWER_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.POWER_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_ALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_ALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|companion\"\n    },\n    \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CARRIER_APP_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CARRIER_APP_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to read data about your contacts stored on your phone.\\n      Apps will also have access to the accounts on your phone that have created contacts.\\n      This may include accounts created by apps you have installed.\\n      This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTENT_RATING_SYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CONTENT_RATING_SYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_LOWPAN_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOWPAN_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRINT_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_RUNTIME_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_RUNTIME_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYSTEM_UPDATE_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SYSTEM_UPDATE_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WALLPAPER_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WALLPAPER_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECOVER_KEYSTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVER_KEYSTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_STATS_PULL_ATOM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_STATS_PULL_ATOM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_DISPLAY_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_DISPLAY_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_PASSWORD_COMPLEXITY\": {\n      \"description\": \"Allows the app to learn the screen\\n        lock complexity level (high, medium, low or none), which indicates the possible range of\\n        length and type of the screen lock. The app can also suggest to users that they update the\\n        screen lock to a certain level but users can freely ignore and navigate away. Note that the\\n        screen lock is not stored in plaintext so the app does not know the exact password.\\n    \",\n      \"description_ptr\": \"permdesc_requestPasswordComplexity\",\n      \"label\": \"request screen lock complexity\",\n      \"label_ptr\": \"permlab_requestPasswordComplexity\",\n      \"name\": \"android.permission.REQUEST_PASSWORD_COMPLEXITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESET_FACE_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FACE_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTORE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTORE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_EMBMS_INTENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_EMBMS_INTENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_HARMFUL_APP_WARNINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_HARMFUL_APP_WARNINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_INITIAL_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INITIAL_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHOW_KEYGUARD_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHOW_KEYGUARD_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SMS_FINANCIAL_TRANSACTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SMS_FINANCIAL_TRANSACTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier\"\n    },\n    \"android.permission.START_ACTIVITY_AS_CALLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITY_AS_CALLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.START_VIEW_PERMISSION_USAGE\": {\n      \"description\": \"Allows the holder to start the permission usage for an app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_startViewPermissionUsage\",\n      \"label\": \"start view permission usage\",\n      \"label_ptr\": \"permlab_startViewPermissionUsage\",\n      \"name\": \"android.permission.START_VIEW_PERMISSION_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.STATSCOMPANION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATSCOMPANION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUSPEND_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUSPEND_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|wellbeing\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|development\"\n    },\n    \"android.permission.SYSTEM_CAMERA\": {\n      \"description\": \"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well\",\n      \"description_ptr\": \"permdesc_systemCamera\",\n      \"label\": \"Allow an application or service access to system cameras to take pictures and videos\",\n      \"label_ptr\": \"permlab_systemCamera\",\n      \"name\": \"android.permission.SYSTEM_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"system|signature\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BLACKLISTED_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BLACKLISTED_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRIGGER_SHELL_BUGREPORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_SHELL_BUGREPORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TUNER_RESOURCE_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TUNER_RESOURCE_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appPredictor\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.UPDATE_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_BIOMETRIC\": {\n      \"description\": \"Allows the app to use biometric hardware for authentication\",\n      \"description_ptr\": \"permdesc_useBiometric\",\n      \"label\": \"use biometric hardware\",\n      \"label_ptr\": \"permlab_useBiometric\",\n      \"name\": \"android.permission.USE_BIOMETRIC\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_BIOMETRIC_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_BIOMETRIC_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_COLORIZED_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_COLORIZED_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FULL_SCREEN_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_FULL_SCREEN_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_RESERVED_DISK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_RESERVED_DISK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.VIBRATE_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIBRATE_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.WATCH_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WATCH_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to modify the data about your contacts stored on your phone.\\n      This permission allows apps to delete contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier|configurator\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_OBB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_OBB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.permission.INSTALL_EXISTING_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.INSTALL_EXISTING_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.permission.USE_INSTALLER_V2\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_INSTALLER_V2\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_31.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACTIVITY_RECOGNITION\": {\n      \"description\": \"access your physical activity\",\n      \"description_ptr\": \"permgroupdesc_activityRecognition\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_activity_recognition\",\n      \"label\": \"Physical activity\",\n      \"label_ptr\": \"permgrouplab_activityRecognition\",\n      \"name\": \"android.permission-group.ACTIVITY_RECOGNITION\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99 0.9 -1.99 2L3 20c0 1.1 0.89 2 2 2h14c1.1 0 2-0.9 2-2V6c0-1.1-0.9-2-2-2zm0 16H5V10h14v10zm-4.5-7c-1.38 0-2.5 1.12-2.5 2.5s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CALL_LOG\": {\n      \"description\": \"read and write phone call log\",\n      \"description_ptr\": \"permgroupdesc_calllog\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24.0\\\" height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\"><path d=\\\"M16.01,14.48l-2.62,2.62c-2.75,-1.49 -5.01,-3.75 -6.5,-6.5l2.62,-2.62c0.24,-0.24 0.34,-0.58 0.27,-0.9L9.13,3.82c-0.09,-0.47 -0.5,-0.8 -0.98,-0.8L4,3.01c-0.56,0 -1.03,0.47 -1,1.03c0.17,2.91 1.04,5.63 2.43,8.01c1.57,2.69 3.81,4.93 6.5,6.5c2.38,1.39 5.1,2.26 8.01,2.43c0.56,0.03 1.03,-0.44 1.03,-1v-4.15c0,-0.48 -0.34,-0.89 -0.8,-0.98l-3.26,-0.65C16.58,14.14 16.24,14.24 16.01,14.48z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,8h10V6H12V8zM12,4h10V2H12V4zM22,10H12v2h10V10z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_call_log\",\n      \"label\": \"Call logs\",\n      \"label_ptr\": \"permgrouplab_calllog\",\n      \"name\": \"android.permission-group.CALL_LOG\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18,10.48L18,6c0,-1.1 -0.9,-2 -2,-2L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2v-4.48l4,3.98v-11l-4,3.98zM16,9.69L16,18L4,18L4,6h12v3.69z\\\" fill=\\\"@android:color/white\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4,1h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M4,21h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M20,5H4C2.9,5 2,5.9 2,7v10c0,1.1 0.9,2 2,2h2h12h2c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM8.21,17c0.7,-0.47 2.46,-1 3.79,-1s3.09,0.53 3.79,1H8.21zM20,17h-2c0,-1.99 -4,-3 -6,-3s-6,1.01 -6,3H4V7h16V17z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,13.5c1.66,0 3,-1.34 3,-3c0,-1.66 -1.34,-3 -3,-3s-3,1.34 -3,3C9,12.16 10.34,13.5 12,13.5zM12,9.5c0.55,0 1,0.45 1,1s-0.45,1 -1,1s-1,-0.45 -1,-1S11.45,9.5 12,9.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,14c1.66,0 3,-1.34 3,-3V5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6C9,12.66 10.34,14 12,14zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5H5c0,3.53 2.61,6.43 6,6.92V21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92H17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NEARBY_DEVICES\": {\n      \"description\": \"discover and connect to nearby devices\",\n      \"description_ptr\": \"permgroupdesc_nearby_devices\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,16.427L7.574,12 12,7.574 16.426,12zM10.58,2.59l-8,8c-0.78,0.78 -0.78,2.05 0,2.83l8,8c0.78,0.78 2.05,0.78 2.83,0l8,-8c0.78,-0.78 0.78,-2.05 0,-2.83l-8,-8c-0.78,-0.79 -2.04,-0.79 -2.83,0zM13.39,17.81L12,19.2l-1.39,-1.39 -4.42,-4.42L4.8,12l1.39,-1.39 4.42,-4.42L12,4.8l1.39,1.39 4.42,4.42L19.2,12l-1.39,1.39 -4.42,4.42z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_nearby_devices\",\n      \"label\": \"Nearby devices\",\n      \"label_ptr\": \"permgrouplab_nearby_devices\",\n      \"name\": \"android.permission-group.NEARBY_DEVICES\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16.5,3c-1.74,0 -3.41,0.81 -4.5,2.09C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.42 2,                         8.5c0,3.78 3.4,6.86 8.55,11.54L12,21.35l1.45,-1.32C18.6,15.36 22,12.28 22,8.5C22,                         5.42 19.58,3 16.5,3zM12.1,18.55l-0.1,0.1l-0.1,-0.1C7.14,14.24 4,11.39 4,8.5C4,6.5 5.5,                         5 7.5,5c1.54,0 3.04,0.99 3.57,2.36h1.87C13.46,5.99 14.96,5 16.5,5c2,0 3.5,1.5 3.5,3.5C20,                         11.39 16.86,14.24 12.1,18.55z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,2H4C2.9,2 2,2.9 2,4v18l4.75,-4h14C21.1,18 22,17.1 22,16V4C22,2.9 21.1,2 20,2zM20,16H4V4h16V16zM9,11H7V9h2V11zM17,11h-2V9h2V11zM13,11h-2V9h2V11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,6h-8l-2,-2H4C2.9,4 2.01,4.9 2.01,6L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8C22,6.9 21.1,6 20,6zM20,18H4V8h16V18z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Files and media\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.UNDEFINED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission-group.UNDEFINED\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCEPT_HANDOVER\": {\n      \"description\": \"Allows the app to continue a call which was started in another app.\",\n      \"description_ptr\": \"permdesc_acceptHandovers\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCEPT_HANDOVER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_BACKGROUND_LOCATION\": {\n      \"description\": \"This app can access location at any time, even while the app is not in use.\",\n      \"description_ptr\": \"permdesc_accessBackgroundLocation\",\n      \"label\": \"access location in the background\",\n      \"label_ptr\": \"permlab_accessBackgroundLocation\",\n      \"name\": \"android.permission.ACCESS_BACKGROUND_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_BLOBS_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BLOBS_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location only in the foreground\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CONTEXT_HUB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTEXT_HUB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location only in the foreground\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier|role\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_MEDIA_LOCATION\": {\n      \"description\": \"Allows the app to read locations from your media collection.\",\n      \"description_ptr\": \"permdesc_mediaLocation\",\n      \"label\": \"read locations from your media collection\",\n      \"label_ptr\": \"permlab_mediaLocation\",\n      \"name\": \"android.permission.ACCESS_MEDIA_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MESSAGES_ON_ICC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MESSAGES_ON_ICC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ACCESS_SHARED_LIBRARIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHARED_LIBRARIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ACCESS_SHORTCUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHORTCUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_TUNED_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TUNED_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_DESCRAMBLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_DESCRAMBLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_TUNER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_TUNER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VIBRATOR_STATE\": {\n      \"description\": \"Allows the app to access the vibrator state.\",\n      \"description_ptr\": \"permdesc_vibrator_state\",\n      \"label\": \"Allows the app to access the vibrator state.\",\n      \"label_ptr\": \"permdesc_vibrator_state\",\n      \"name\": \"android.permission.ACCESS_VIBRATOR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACTIVITY_EMBEDDING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACTIVITY_EMBEDDING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACTIVITY_RECOGNITION\": {\n      \"description\": \"This app can recognize your physical activity.\",\n      \"description_ptr\": \"permdesc_activityRecognition\",\n      \"label\": \"recognize physical activity\",\n      \"label_ptr\": \"permlab_activityRecognition\",\n      \"name\": \"android.permission.ACTIVITY_RECOGNITION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ADD_TRUSTED_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADD_TRUSTED_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.AMBIENT_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AMBIENT_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.APPROVE_INCIDENT_REPORTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.APPROVE_INCIDENT_REPORTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|incidentReportApprover\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASSOCIATE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKGROUND_CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_backgroundCamera\",\n      \"label\": \"take pictures and videos in the background\",\n      \"label_ptr\": \"permlab_backgroundCamera\",\n      \"name\": \"android.permission.BACKGROUND_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_PREDICTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_PREDICTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_ATTENTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ATTENTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_REDIRECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_REDIRECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CELL_BROADCAST_SERVICE\": {\n      \"description\": \"Allows the app to bind to the\\n        cell broadcast module in order to forward cell broadcast messages\\n        as they are received. Cell broadcast alerts are delivered in some\\n        locations to warn you of emergency situations. Malicious apps may\\n        interfere with the performance or operation of your device when an\\n        emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_bindCellBroadcastService\",\n      \"label\": \"Forward cell broadcast messages\",\n      \"label_ptr\": \"permlab_bindCellBroadcastService\",\n      \"name\": \"android.permission.BIND_CELL_BROADCAST_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DISPLAY_HASHING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DISPLAY_HASHING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DOMAIN_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DOMAIN_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EUICC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EUICC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_GBA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_GBA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_HOTWORD_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_HOTWORD_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_MUSIC_RECOGNITION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MUSIC_RECOGNITION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESUME_ON_REBOOT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESUME_ON_REBOOT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROTATION_RESOLVER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROTATION_RESOLVER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELEPHONY_DATA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_DATA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRANSLATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRANSLATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADVERTISE\": {\n      \"description\": \"Allows the app to advertise to nearby Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_advertise\",\n      \"label\": \"advertise to nearby Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_advertise\",\n      \"name\": \"android.permission.BLUETOOTH_ADVERTISE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_CONNECT\": {\n      \"description\": \"Allows the app to connect to paired Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_connect\",\n      \"label\": \"connect to paired Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_connect\",\n      \"name\": \"android.permission.BLUETOOTH_CONNECT\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_SCAN\": {\n      \"description\": \"Allows the app to discover and pair nearby Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_scan\",\n      \"label\": \"discover and pair nearby Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_scan\",\n      \"name\": \"android.permission.BLUETOOTH_SCAN\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRIGHTNESS_SLIDER_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRIGHTNESS_SLIDER_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BYPASS_ROLE_QUALIFICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BYPASS_ROLE_QUALIFICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.CALL_COMPANION_APP\": {\n      \"description\": \"Allows the app to see and control ongoing calls on the\\n        device. This includes information such as call numbers for calls and the state of the\\n        calls.\",\n      \"description_ptr\": \"permdesc_callCompanionApp\",\n      \"label\": \"see and control calls through the system.\",\n      \"label_ptr\": \"permlab_callCompanionApp\",\n      \"name\": \"android.permission.CALL_COMPANION_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera while the app is in use.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\": {\n      \"description\": \"This app can receive callbacks when any camera device is being opened (by what application) or closed.\",\n      \"description_ptr\": \"permdesc_cameraOpenCloseListener\",\n      \"label\": \"Allow an application or service to receive callbacks about camera devices being opened or closed.\",\n      \"label_ptr\": \"permlab_cameraOpenCloseListener\",\n      \"name\": \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_BLACKOUT_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_BLACKOUT_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_MEDIA_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_MEDIA_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_TUNER_AUDIO_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TUNER_AUDIO_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CLEAR_FREEZE_PERIOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_FREEZE_PERIOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_ALWAYS_ON_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_ALWAYS_ON_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DEVICE_LIGHTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_LIGHTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DEVICE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DISPLAY_SATURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_SATURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_UI_TRACING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_UI_TRACING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_HIDDEN_API_CHECKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_HIDDEN_API_CHECKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DOMAIN_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DOMAIN_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ENABLE_TEST_HARNESS_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENABLE_TEST_HARNESS_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ENTER_CAR_MODE_PRIORITIZED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENTER_CAR_MODE_PRIORITIZED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\": {\n      \"description\": \"Exempt the app from restrictions to record audio.\",\n      \"description_ptr\": \"permdesc_exemptFromAudioRecordRestrictions\",\n      \"label\": \"exempt from audio record restrictions\",\n      \"label_ptr\": \"permlab_exemptFromAudioRecordRestrictions\",\n      \"name\": \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FOREGROUND_SERVICE\": {\n      \"description\": \"Allows the app to make use of foreground services.\",\n      \"description_ptr\": \"permdesc_foregroundService\",\n      \"label\": \"run foreground service\",\n      \"label_ptr\": \"permlab_foregroundService\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PEOPLE_TILE_PREVIEW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PEOPLE_TILE_PREVIEW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HANDLE_CAR_MODE_CHANGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HANDLE_CAR_MODE_CHANGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.HIDE_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.HIGH_SAMPLING_RATE_SENSORS\": {\n      \"description\": \"Allows the app to sample sensor data at a rate greater than 200 Hz\",\n      \"description_ptr\": \"permdesc_highSamplingRateSensors\",\n      \"label\": \"access sensor data at a high sampling rate\",\n      \"label_ptr\": \"permlab_highSamplingRateSensors\",\n      \"name\": \"android.permission.HIGH_SAMPLING_RATE_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INPUT_CONSUMER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INPUT_CONSUMER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGE_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGE_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_SELF_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_SELF_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_TEST_ONLY_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_TEST_ONLY_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|instant|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KEEP_UNINSTALLED_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEEP_UNINSTALLED_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.LOADER_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOADER_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.LOCK_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCK_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOG_COMPAT_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOG_COMPAT_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|recents\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.MANAGE_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APP_HIBERNATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_HIBERNATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_OPS_MODES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_MODES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_PREDICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_PREDICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUDIO_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUDIO_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIND_INSTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIND_INSTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC_DIALOG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC_DIALOG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_CAPTURE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_CAPTURE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_SUGGESTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_SUGGESTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CRATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CRATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DEBUGGING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEBUGGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.MANAGE_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_EXTERNAL_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_GAME_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_GAME_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_HOTWORD_DETECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_HOTWORD_DETECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|preinstalled\"\n    },\n    \"android.permission.MANAGE_IPSEC_TUNNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_IPSEC_TUNNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_LOWPAN_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOWPAN_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_MUSIC_RECOGNITION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MUSIC_RECOGNITION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATION_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATION_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ONGOING_CALLS\": {\n      \"description\": \"Allows an app to see details about ongoing calls\\n         on your device and to control these calls.\",\n      \"description_ptr\": \"permdesc_manageOngoingCalls\",\n      \"label\": \"Manage ongoing calls\",\n      \"label_ptr\": \"permlab_manageOngoingCalls\",\n      \"name\": \"android.permission.MANAGE_ONGOING_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ROTATION_RESOLVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROTATION_RESOLVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SEARCH_UI\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SEARCH_UI\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_SENSORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_SLICE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SLICE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SMARTSPACE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SMARTSPACE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_SPEECH_RECOGNITION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SPEECH_RECOGNITION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_PLANS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_PLANS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TEST_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TEST_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_TIME_AND_ZONE_DETECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TIME_AND_ZONE_DETECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TOAST_RATE_LIMITING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TOAST_RATE_LIMITING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_UI_TRANSLATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_UI_TRANSLATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WIFI_COUNTRY_CODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_COUNTRY_CODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MODIFY_QUIET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_QUIET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_AIRPLANE_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_AIRPLANE_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_CARRIER_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_CARRIER_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_FACTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_FACTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_MANAGED_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_MANAGED_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SCAN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SCAN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SETUP_WIZARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETUP_WIZARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_STATS_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STATS_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_PREFERRED_PAYMENT_INFO\": {\n      \"description\": \"Allows the app to get preferred nfc payment service information like\\n      registered aids and route destination.\",\n      \"description_ptr\": \"permdesc_preferredPaymentInfo\",\n      \"label\": \"Preferred NFC Payment Service Information\",\n      \"label_ptr\": \"permlab_preferredPaymentInfo\",\n      \"name\": \"android.permission.NFC_PREFERRED_PAYMENT_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_TRANSACTION_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_TRANSACTION_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_APP_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_APP_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OBSERVE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OBSERVE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role|installer\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_ROLLBACK_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_ROLLBACK_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop|retailDemo\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEEK_DROPBOX_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEEK_DROPBOX_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_IMS_SINGLE_REGISTRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_IMS_SINGLE_REGISTRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.POWER_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.POWER_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_ALL_PACKAGES\": {\n      \"description\": \"Allows an app to see all installed packages.\",\n      \"description_ptr\": \"permdesc_queryAllPackages\",\n      \"label\": \"query all packages\",\n      \"label_ptr\": \"permlab_queryAllPackages\",\n      \"name\": \"android.permission.QUERY_ALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.QUERY_AUDIO_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_AUDIO_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|companion\"\n    },\n    \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CARRIER_APP_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CARRIER_APP_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to read data about your contacts stored on your phone.\\n      Apps will also have access to the accounts on your phone that have created contacts.\\n      This may include accounts created by apps you have installed.\\n      This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTENT_RATING_SYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CONTENT_RATING_SYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DREAM_SUPPRESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_SUPPRESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.READ_GLOBAL_APP_SEARCH_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_GLOBAL_APP_SEARCH_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_LOWPAN_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOWPAN_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_NEARBY_STREAMING_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NEARBY_STREAMING_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PEOPLE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PEOPLE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRINT_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_PROJECTION_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROJECTION_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_RUNTIME_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_RUNTIME_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYSTEM_UPDATE_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SYSTEM_UPDATE_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WALLPAPER_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WALLPAPER_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone while the app is in use.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.RECORD_BACKGROUND_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordBackgroundAudio\",\n      \"label\": \"record audio in the background\",\n      \"label_ptr\": \"permlab_recordBackgroundAudio\",\n      \"name\": \"android.permission.RECORD_BACKGROUND_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECOVER_KEYSTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVER_KEYSTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_STATS_PULL_ATOM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_STATS_PULL_ATOM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_DISPLAY_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_DISPLAY_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter|recents\"\n    },\n    \"android.permission.RENOUNCE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RENOUNCE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_WATCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_WATCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_PASSWORD_COMPLEXITY\": {\n      \"description\": \"Allows the app to learn the screen\\n        lock complexity level (high, medium, low or none), which indicates the possible range of\\n        length and type of the screen lock. The app can also suggest to users that they update the\\n        screen lock to a certain level but users can freely ignore and navigate away. Note that the\\n        screen lock is not stored in plaintext so the app does not know the exact password.\\n    \",\n      \"description_ptr\": \"permdesc_requestPasswordComplexity\",\n      \"label\": \"request screen lock complexity\",\n      \"label_ptr\": \"permlab_requestPasswordComplexity\",\n      \"name\": \"android.permission.REQUEST_PASSWORD_COMPLEXITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESET_APP_ERRORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_APP_ERRORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_WIFI_SUBSYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTART_WIFI_SUBSYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESTORE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTORE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.ROTATE_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ROTATE_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCHEDULE_EXACT_ALARM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCHEDULE_EXACT_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|appop\"\n    },\n    \"android.permission.SCHEDULE_PRIORITIZED_ALARM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCHEDULE_PRIORITIZED_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_EMBMS_INTENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_EMBMS_INTENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_CLIP_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_CLIP_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_HARMFUL_APP_WARNINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_HARMFUL_APP_WARNINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_INITIAL_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INITIAL_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHOW_KEYGUARD_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHOW_KEYGUARD_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SIGNAL_REBOOT_READINESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_REBOOT_READINESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SMS_FINANCIAL_TRANSACTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SMS_FINANCIAL_TRANSACTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier\"\n    },\n    \"android.permission.START_ACTIVITY_AS_CALLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITY_AS_CALLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier|role\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.START_VIEW_PERMISSION_USAGE\": {\n      \"description\": \"Allows the holder to start the permission usage for an app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_startViewPermissionUsage\",\n      \"label\": \"start view permission usage\",\n      \"label_ptr\": \"permlab_startViewPermissionUsage\",\n      \"name\": \"android.permission.START_VIEW_PERMISSION_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.STATSCOMPANION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATSCOMPANION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_EXTERNAL_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_EXTERNAL_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUSPEND_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUSPEND_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|appop|installer|pre23|development\"\n    },\n    \"android.permission.SYSTEM_APPLICATION_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SYSTEM_APPLICATION_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role\"\n    },\n    \"android.permission.SYSTEM_CAMERA\": {\n      \"description\": \"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well\",\n      \"description_ptr\": \"permdesc_systemCamera\",\n      \"label\": \"Allow an application or service access to system cameras to take pictures and videos\",\n      \"label_ptr\": \"permlab_systemCamera\",\n      \"name\": \"android.permission.SYSTEM_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"system|signature|role\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BLACKLISTED_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BLACKLISTED_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRIGGER_SHELL_BUGREPORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_SHELL_BUGREPORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TUNER_RESOURCE_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TUNER_RESOURCE_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.UNLIMITED_TOASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_TOASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer|role\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_FONTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_FONTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.UPDATE_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_BIOMETRIC\": {\n      \"description\": \"Allows the app to use biometric hardware for authentication\",\n      \"description_ptr\": \"permdesc_useBiometric\",\n      \"label\": \"use biometric hardware\",\n      \"label_ptr\": \"permlab_useBiometric\",\n      \"name\": \"android.permission.USE_BIOMETRIC\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_BIOMETRIC_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_BIOMETRIC_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_COLORIZED_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_COLORIZED_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FULL_SCREEN_INTENT\": {\n      \"description\": \"Allows the app to display notifications as full screen activities on a locked device\",\n      \"description_ptr\": \"permdesc_fullScreenIntent\",\n      \"label\": \"display notifications as full screen activities on a locked device\",\n      \"label_ptr\": \"permlab_fullScreenIntent\",\n      \"name\": \"android.permission.USE_FULL_SCREEN_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.USE_RESERVED_DISK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_RESERVED_DISK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UWB_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UWB_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UWB_RANGING\": {\n      \"description\": \"Allow the app to determine relative position between nearby Ultra-Wideband devices\",\n      \"description_ptr\": \"permdesc_uwb_ranging\",\n      \"label\": \"determine relative position between nearby Ultra-Wideband devices\",\n      \"label_ptr\": \"permlab_uwb_ranging\",\n      \"name\": \"android.permission.UWB_RANGING\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.VIBRATE_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIBRATE_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.VIRTUAL_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIRTUAL_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.WATCH_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WATCH_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to modify the data about your contacts stored on your phone.\\n      This permission allows apps to delete contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier|configurator\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_OBB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_OBB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.permission.INSTALL_EXISTING_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.INSTALL_EXISTING_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.permission.USE_INSTALLER_V2\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_INSTALLER_V2\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.permission.USE_SYSTEM_DATA_LOADERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_SYSTEM_DATA_LOADERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_32.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACTIVITY_RECOGNITION\": {\n      \"description\": \"access your physical activity\",\n      \"description_ptr\": \"permgroupdesc_activityRecognition\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_activity_recognition\",\n      \"label\": \"Physical activity\",\n      \"label_ptr\": \"permgrouplab_activityRecognition\",\n      \"name\": \"android.permission-group.ACTIVITY_RECOGNITION\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99 0.9 -1.99 2L3 20c0 1.1 0.89 2 2 2h14c1.1 0 2-0.9 2-2V6c0-1.1-0.9-2-2-2zm0 16H5V10h14v10zm-4.5-7c-1.38 0-2.5 1.12-2.5 2.5s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CALL_LOG\": {\n      \"description\": \"read and write phone call log\",\n      \"description_ptr\": \"permgroupdesc_calllog\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24.0\\\" height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\"><path d=\\\"M16.01,14.48l-2.62,2.62c-2.75,-1.49 -5.01,-3.75 -6.5,-6.5l2.62,-2.62c0.24,-0.24 0.34,-0.58 0.27,-0.9L9.13,3.82c-0.09,-0.47 -0.5,-0.8 -0.98,-0.8L4,3.01c-0.56,0 -1.03,0.47 -1,1.03c0.17,2.91 1.04,5.63 2.43,8.01c1.57,2.69 3.81,4.93 6.5,6.5c2.38,1.39 5.1,2.26 8.01,2.43c0.56,0.03 1.03,-0.44 1.03,-1v-4.15c0,-0.48 -0.34,-0.89 -0.8,-0.98l-3.26,-0.65C16.58,14.14 16.24,14.24 16.01,14.48z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,8h10V6H12V8zM12,4h10V2H12V4zM22,10H12v2h10V10z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_call_log\",\n      \"label\": \"Call logs\",\n      \"label_ptr\": \"permgrouplab_calllog\",\n      \"name\": \"android.permission-group.CALL_LOG\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18,10.48L18,6c0,-1.1 -0.9,-2 -2,-2L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2v-4.48l4,3.98v-11l-4,3.98zM16,9.69L16,18L4,18L4,6h12v3.69z\\\" fill=\\\"@android:color/white\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4,1h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M4,21h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M20,5H4C2.9,5 2,5.9 2,7v10c0,1.1 0.9,2 2,2h2h12h2c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM8.21,17c0.7,-0.47 2.46,-1 3.79,-1s3.09,0.53 3.79,1H8.21zM20,17h-2c0,-1.99 -4,-3 -6,-3s-6,1.01 -6,3H4V7h16V17z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,13.5c1.66,0 3,-1.34 3,-3c0,-1.66 -1.34,-3 -3,-3s-3,1.34 -3,3C9,12.16 10.34,13.5 12,13.5zM12,9.5c0.55,0 1,0.45 1,1s-0.45,1 -1,1s-1,-0.45 -1,-1S11.45,9.5 12,9.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,14c1.66,0 3,-1.34 3,-3V5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6C9,12.66 10.34,14 12,14zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5H5c0,3.53 2.61,6.43 6,6.92V21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92H17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NEARBY_DEVICES\": {\n      \"description\": \"discover and connect to nearby devices\",\n      \"description_ptr\": \"permgroupdesc_nearby_devices\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,16.427L7.574,12 12,7.574 16.426,12zM10.58,2.59l-8,8c-0.78,0.78 -0.78,2.05 0,2.83l8,8c0.78,0.78 2.05,0.78 2.83,0l8,-8c0.78,-0.78 0.78,-2.05 0,-2.83l-8,-8c-0.78,-0.79 -2.04,-0.79 -2.83,0zM13.39,17.81L12,19.2l-1.39,-1.39 -4.42,-4.42L4.8,12l1.39,-1.39 4.42,-4.42L12,4.8l1.39,1.39 4.42,4.42L19.2,12l-1.39,1.39 -4.42,4.42z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_nearby_devices\",\n      \"label\": \"Nearby devices\",\n      \"label_ptr\": \"permgrouplab_nearby_devices\",\n      \"name\": \"android.permission-group.NEARBY_DEVICES\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16.5,3c-1.74,0 -3.41,0.81 -4.5,2.09C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.42 2,                         8.5c0,3.78 3.4,6.86 8.55,11.54L12,21.35l1.45,-1.32C18.6,15.36 22,12.28 22,8.5C22,                         5.42 19.58,3 16.5,3zM12.1,18.55l-0.1,0.1l-0.1,-0.1C7.14,14.24 4,11.39 4,8.5C4,6.5 5.5,                         5 7.5,5c1.54,0 3.04,0.99 3.57,2.36h1.87C13.46,5.99 14.96,5 16.5,5c2,0 3.5,1.5 3.5,3.5C20,                         11.39 16.86,14.24 12.1,18.55z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,2H4C2.9,2 2,2.9 2,4v18l4.75,-4h14C21.1,18 22,17.1 22,16V4C22,2.9 21.1,2 20,2zM20,16H4V4h16V16zM9,11H7V9h2V11zM17,11h-2V9h2V11zM13,11h-2V9h2V11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access photos, media, and files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,6h-8l-2,-2H4C2.9,4 2.01,4.9 2.01,6L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8C22,6.9 21.1,6 20,6zM20,18H4V8h16V18z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Files and media\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.UNDEFINED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission-group.UNDEFINED\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCEPT_HANDOVER\": {\n      \"description\": \"Allows the app to continue a call which was started in another app.\",\n      \"description_ptr\": \"permdesc_acceptHandovers\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCEPT_HANDOVER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_BACKGROUND_LOCATION\": {\n      \"description\": \"This app can access location at any time, even while the app is not in use.\",\n      \"description_ptr\": \"permdesc_accessBackgroundLocation\",\n      \"label\": \"access location in the background\",\n      \"label_ptr\": \"permlab_accessBackgroundLocation\",\n      \"name\": \"android.permission.ACCESS_BACKGROUND_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_BLOBS_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BLOBS_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location only in the foreground\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CONTEXT_HUB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTEXT_HUB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location only in the foreground\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier|role\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_MEDIA_LOCATION\": {\n      \"description\": \"Allows the app to read locations from your media collection.\",\n      \"description_ptr\": \"permdesc_mediaLocation\",\n      \"label\": \"read locations from your media collection\",\n      \"label_ptr\": \"permlab_mediaLocation\",\n      \"name\": \"android.permission.ACCESS_MEDIA_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MESSAGES_ON_ICC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MESSAGES_ON_ICC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ACCESS_SHARED_LIBRARIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHARED_LIBRARIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ACCESS_SHORTCUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHORTCUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_TUNED_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TUNED_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_DESCRAMBLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_DESCRAMBLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_TUNER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_TUNER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VIBRATOR_STATE\": {\n      \"description\": \"Allows the app to access the vibrator state.\",\n      \"description_ptr\": \"permdesc_vibrator_state\",\n      \"label\": \"Allows the app to access the vibrator state.\",\n      \"label_ptr\": \"permdesc_vibrator_state\",\n      \"name\": \"android.permission.ACCESS_VIBRATOR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACTIVITY_EMBEDDING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACTIVITY_EMBEDDING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACTIVITY_RECOGNITION\": {\n      \"description\": \"This app can recognize your physical activity.\",\n      \"description_ptr\": \"permdesc_activityRecognition\",\n      \"label\": \"recognize physical activity\",\n      \"label_ptr\": \"permlab_activityRecognition\",\n      \"name\": \"android.permission.ACTIVITY_RECOGNITION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ADD_TRUSTED_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADD_TRUSTED_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_SLIPPERY_TOUCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_SLIPPERY_TOUCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.AMBIENT_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AMBIENT_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.APPROVE_INCIDENT_REPORTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.APPROVE_INCIDENT_REPORTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|incidentReportApprover\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASSOCIATE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKGROUND_CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_backgroundCamera\",\n      \"label\": \"take pictures and videos in the background\",\n      \"label_ptr\": \"permlab_backgroundCamera\",\n      \"name\": \"android.permission.BACKGROUND_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_PREDICTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_PREDICTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_ATTENTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ATTENTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_REDIRECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_REDIRECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CELL_BROADCAST_SERVICE\": {\n      \"description\": \"Allows the app to bind to the\\n        cell broadcast module in order to forward cell broadcast messages\\n        as they are received. Cell broadcast alerts are delivered in some\\n        locations to warn you of emergency situations. Malicious apps may\\n        interfere with the performance or operation of your device when an\\n        emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_bindCellBroadcastService\",\n      \"label\": \"Forward cell broadcast messages\",\n      \"label_ptr\": \"permlab_bindCellBroadcastService\",\n      \"name\": \"android.permission.BIND_CELL_BROADCAST_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DISPLAY_HASHING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DISPLAY_HASHING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DOMAIN_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DOMAIN_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EUICC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EUICC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_GBA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_GBA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_HOTWORD_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_HOTWORD_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_MUSIC_RECOGNITION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MUSIC_RECOGNITION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESUME_ON_REBOOT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESUME_ON_REBOOT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROTATION_RESOLVER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROTATION_RESOLVER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELEPHONY_DATA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_DATA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRANSLATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRANSLATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADVERTISE\": {\n      \"description\": \"Allows the app to advertise to nearby Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_advertise\",\n      \"label\": \"advertise to nearby Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_advertise\",\n      \"name\": \"android.permission.BLUETOOTH_ADVERTISE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_CONNECT\": {\n      \"description\": \"Allows the app to connect to paired Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_connect\",\n      \"label\": \"connect to paired Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_connect\",\n      \"name\": \"android.permission.BLUETOOTH_CONNECT\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_SCAN\": {\n      \"description\": \"Allows the app to discover and pair nearby Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_scan\",\n      \"label\": \"discover and pair nearby Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_scan\",\n      \"name\": \"android.permission.BLUETOOTH_SCAN\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access data from sensors\\n    that monitor your physical condition, such as your heart rate.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"access body sensors (like heart rate monitors)\\n    \",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRIGHTNESS_SLIDER_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRIGHTNESS_SLIDER_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BYPASS_ROLE_QUALIFICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BYPASS_ROLE_QUALIFICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.CALL_COMPANION_APP\": {\n      \"description\": \"Allows the app to see and control ongoing calls on the\\n        device. This includes information such as call numbers for calls and the state of the\\n        calls.\",\n      \"description_ptr\": \"permdesc_callCompanionApp\",\n      \"label\": \"see and control calls through the system.\",\n      \"label_ptr\": \"permlab_callCompanionApp\",\n      \"name\": \"android.permission.CALL_COMPANION_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera while the app is in use.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\": {\n      \"description\": \"This app can receive callbacks when any camera device is being opened (by what application) or closed.\",\n      \"description_ptr\": \"permdesc_cameraOpenCloseListener\",\n      \"label\": \"Allow an application or service to receive callbacks about camera devices being opened or closed.\",\n      \"label_ptr\": \"permlab_cameraOpenCloseListener\",\n      \"name\": \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_BLACKOUT_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_BLACKOUT_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_MEDIA_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_MEDIA_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_TUNER_AUDIO_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TUNER_AUDIO_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CLEAR_FREEZE_PERIOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_FREEZE_PERIOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_ALWAYS_ON_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_ALWAYS_ON_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DEVICE_LIGHTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_LIGHTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DEVICE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DISPLAY_SATURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_SATURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_UI_TRACING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_UI_TRACING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_HIDDEN_API_CHECKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_HIDDEN_API_CHECKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DOMAIN_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DOMAIN_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ENABLE_TEST_HARNESS_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENABLE_TEST_HARNESS_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ENTER_CAR_MODE_PRIORITIZED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENTER_CAR_MODE_PRIORITIZED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\": {\n      \"description\": \"Exempt the app from restrictions to record audio.\",\n      \"description_ptr\": \"permdesc_exemptFromAudioRecordRestrictions\",\n      \"label\": \"exempt from audio record restrictions\",\n      \"label_ptr\": \"permlab_exemptFromAudioRecordRestrictions\",\n      \"name\": \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FOREGROUND_SERVICE\": {\n      \"description\": \"Allows the app to make use of foreground services.\",\n      \"description_ptr\": \"permdesc_foregroundService\",\n      \"label\": \"run foreground service\",\n      \"label_ptr\": \"permlab_foregroundService\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PEOPLE_TILE_PREVIEW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PEOPLE_TILE_PREVIEW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HANDLE_CAR_MODE_CHANGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HANDLE_CAR_MODE_CHANGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.HIDE_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.HIGH_SAMPLING_RATE_SENSORS\": {\n      \"description\": \"Allows the app to sample sensor data at a rate greater than 200 Hz\",\n      \"description_ptr\": \"permdesc_highSamplingRateSensors\",\n      \"label\": \"access sensor data at a high sampling rate\",\n      \"label_ptr\": \"permlab_highSamplingRateSensors\",\n      \"name\": \"android.permission.HIGH_SAMPLING_RATE_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INPUT_CONSUMER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INPUT_CONSUMER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGE_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGE_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_SELF_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_SELF_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_TEST_ONLY_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_TEST_ONLY_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|instant|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.INTERNAL_DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KEEP_UNINSTALLED_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEEP_UNINSTALLED_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.LOADER_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOADER_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.LOCK_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCK_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOG_COMPAT_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOG_COMPAT_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|recents\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.MANAGE_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APP_HIBERNATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_HIBERNATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_OPS_MODES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_MODES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_PREDICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_PREDICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUDIO_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUDIO_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIND_INSTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIND_INSTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC_DIALOG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC_DIALOG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_CAPTURE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_CAPTURE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_SUGGESTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_SUGGESTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CRATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CRATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DEBUGGING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEBUGGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter\"\n    },\n    \"android.permission.MANAGE_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_EXTERNAL_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_GAME_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_GAME_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_HOTWORD_DETECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_HOTWORD_DETECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|preinstalled\"\n    },\n    \"android.permission.MANAGE_IPSEC_TUNNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_IPSEC_TUNNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_LOWPAN_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOWPAN_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_MUSIC_RECOGNITION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MUSIC_RECOGNITION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATION_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATION_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ONGOING_CALLS\": {\n      \"description\": \"Allows an app to see details about ongoing calls\\n         on your device and to control these calls.\",\n      \"description_ptr\": \"permdesc_manageOngoingCalls\",\n      \"label\": \"Manage ongoing calls\",\n      \"label_ptr\": \"permlab_manageOngoingCalls\",\n      \"name\": \"android.permission.MANAGE_ONGOING_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ROTATION_RESOLVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROTATION_RESOLVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SEARCH_UI\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SEARCH_UI\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_SENSORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_SLICE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SLICE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SMARTSPACE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SMARTSPACE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_SPEECH_RECOGNITION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SPEECH_RECOGNITION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_PLANS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_PLANS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TEST_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TEST_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_TIME_AND_ZONE_DETECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TIME_AND_ZONE_DETECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TOAST_RATE_LIMITING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TOAST_RATE_LIMITING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_UI_TRANSLATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_UI_TRANSLATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WIFI_COUNTRY_CODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_COUNTRY_CODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MODIFY_QUIET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_QUIET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_AIRPLANE_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_AIRPLANE_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_CARRIER_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_CARRIER_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_FACTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_FACTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_MANAGED_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_MANAGED_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SCAN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SCAN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SETUP_WIZARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETUP_WIZARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_STATS_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STATS_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_PREFERRED_PAYMENT_INFO\": {\n      \"description\": \"Allows the app to get preferred nfc payment service information like\\n      registered aids and route destination.\",\n      \"description_ptr\": \"permdesc_preferredPaymentInfo\",\n      \"label\": \"Preferred NFC Payment Service Information\",\n      \"label_ptr\": \"permlab_preferredPaymentInfo\",\n      \"name\": \"android.permission.NFC_PREFERRED_PAYMENT_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_TRANSACTION_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_TRANSACTION_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_APP_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_APP_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OBSERVE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OBSERVE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role|installer\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKAGE_ROLLBACK_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_ROLLBACK_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop|retailDemo\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEEK_DROPBOX_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEEK_DROPBOX_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERFORM_IMS_SINGLE_REGISTRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_IMS_SINGLE_REGISTRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.POWER_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.POWER_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_ALL_PACKAGES\": {\n      \"description\": \"Allows an app to see all installed packages.\",\n      \"description_ptr\": \"permdesc_queryAllPackages\",\n      \"label\": \"query all packages\",\n      \"label_ptr\": \"permlab_queryAllPackages\",\n      \"name\": \"android.permission.QUERY_ALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.QUERY_AUDIO_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_AUDIO_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|companion\"\n    },\n    \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CARRIER_APP_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CARRIER_APP_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to read data about your contacts stored on your phone.\\n      Apps will also have access to the accounts on your phone that have created contacts.\\n      This may include accounts created by apps you have installed.\\n      This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTENT_RATING_SYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CONTENT_RATING_SYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DREAM_SUPPRESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_SUPPRESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.READ_GLOBAL_APP_SEARCH_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_GLOBAL_APP_SEARCH_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_LOWPAN_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOWPAN_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_NEARBY_STREAMING_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NEARBY_STREAMING_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PEOPLE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PEOPLE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRINT_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_PROJECTION_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROJECTION_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_RUNTIME_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_RUNTIME_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYSTEM_UPDATE_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SYSTEM_UPDATE_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WALLPAPER_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WALLPAPER_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone while the app is in use.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.RECORD_BACKGROUND_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordBackgroundAudio\",\n      \"label\": \"record audio in the background\",\n      \"label_ptr\": \"permlab_recordBackgroundAudio\",\n      \"name\": \"android.permission.RECORD_BACKGROUND_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECOVER_KEYSTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVER_KEYSTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_STATS_PULL_ATOM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_STATS_PULL_ATOM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_DISPLAY_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_DISPLAY_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|documenter|recents\"\n    },\n    \"android.permission.RENOUNCE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RENOUNCE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_WATCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_WATCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_PASSWORD_COMPLEXITY\": {\n      \"description\": \"Allows the app to learn the screen\\n        lock complexity level (high, medium, low or none), which indicates the possible range of\\n        length and type of the screen lock. The app can also suggest to users that they update the\\n        screen lock to a certain level but users can freely ignore and navigate away. Note that the\\n        screen lock is not stored in plaintext so the app does not know the exact password.\\n    \",\n      \"description_ptr\": \"permdesc_requestPasswordComplexity\",\n      \"label\": \"request screen lock complexity\",\n      \"label_ptr\": \"permlab_requestPasswordComplexity\",\n      \"name\": \"android.permission.REQUEST_PASSWORD_COMPLEXITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESET_APP_ERRORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_APP_ERRORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_WIFI_SUBSYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTART_WIFI_SUBSYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESTORE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTORE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.ROTATE_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ROTATE_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCHEDULE_EXACT_ALARM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCHEDULE_EXACT_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|appop\"\n    },\n    \"android.permission.SCHEDULE_PRIORITIZED_ALARM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCHEDULE_PRIORITIZED_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_EMBMS_INTENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_EMBMS_INTENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_CLIP_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_CLIP_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_HARMFUL_APP_WARNINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_HARMFUL_APP_WARNINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_INITIAL_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INITIAL_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHOW_KEYGUARD_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHOW_KEYGUARD_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SIGNAL_REBOOT_READINESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_REBOOT_READINESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SMS_FINANCIAL_TRANSACTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SMS_FINANCIAL_TRANSACTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier\"\n    },\n    \"android.permission.START_ACTIVITY_AS_CALLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITY_AS_CALLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier|role\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.START_VIEW_PERMISSION_USAGE\": {\n      \"description\": \"Allows the holder to start the permission usage for an app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_startViewPermissionUsage\",\n      \"label\": \"start view permission usage\",\n      \"label_ptr\": \"permlab_startViewPermissionUsage\",\n      \"name\": \"android.permission.START_VIEW_PERMISSION_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.STATSCOMPANION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATSCOMPANION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_EXTERNAL_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_EXTERNAL_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUSPEND_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUSPEND_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|appop|installer|pre23|development\"\n    },\n    \"android.permission.SYSTEM_APPLICATION_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SYSTEM_APPLICATION_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role\"\n    },\n    \"android.permission.SYSTEM_CAMERA\": {\n      \"description\": \"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well\",\n      \"description_ptr\": \"permdesc_systemCamera\",\n      \"label\": \"Allow an application or service access to system cameras to take pictures and videos\",\n      \"label_ptr\": \"permlab_systemCamera\",\n      \"name\": \"android.permission.SYSTEM_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"system|signature|role\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BLACKLISTED_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BLACKLISTED_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRIGGER_SHELL_BUGREPORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_SHELL_BUGREPORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TUNER_RESOURCE_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TUNER_RESOURCE_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.UNLIMITED_TOASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_TOASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer|role\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_FONTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_FONTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.UPDATE_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_BIOMETRIC\": {\n      \"description\": \"Allows the app to use biometric hardware for authentication\",\n      \"description_ptr\": \"permdesc_useBiometric\",\n      \"label\": \"use biometric hardware\",\n      \"label_ptr\": \"permlab_useBiometric\",\n      \"name\": \"android.permission.USE_BIOMETRIC\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_BIOMETRIC_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_BIOMETRIC_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_COLORIZED_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_COLORIZED_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FULL_SCREEN_INTENT\": {\n      \"description\": \"Allows the app to display notifications as full screen activities on a locked device\",\n      \"description_ptr\": \"permdesc_fullScreenIntent\",\n      \"label\": \"display notifications as full screen activities on a locked device\",\n      \"label_ptr\": \"permlab_fullScreenIntent\",\n      \"name\": \"android.permission.USE_FULL_SCREEN_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.USE_RESERVED_DISK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_RESERVED_DISK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UWB_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UWB_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UWB_RANGING\": {\n      \"description\": \"Allow the app to determine relative position between nearby Ultra-Wideband devices\",\n      \"description_ptr\": \"permdesc_uwb_ranging\",\n      \"label\": \"determine relative position between nearby Ultra-Wideband devices\",\n      \"label_ptr\": \"permlab_uwb_ranging\",\n      \"name\": \"android.permission.UWB_RANGING\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.VIBRATE_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIBRATE_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.VIRTUAL_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIRTUAL_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.WATCH_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WATCH_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to modify the data about your contacts stored on your phone.\\n      This permission allows apps to delete contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier|configurator\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_OBB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_OBB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23\"\n    },\n    \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.permission.INSTALL_EXISTING_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.INSTALL_EXISTING_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.permission.USE_INSTALLER_V2\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_INSTALLER_V2\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.permission.USE_SYSTEM_DATA_LOADERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_SYSTEM_DATA_LOADERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_33.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACTIVITY_RECOGNITION\": {\n      \"description\": \"access your physical activity\",\n      \"description_ptr\": \"permgroupdesc_activityRecognition\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_activity_recognition\",\n      \"label\": \"Physical activity\",\n      \"label_ptr\": \"permgrouplab_activityRecognition\",\n      \"name\": \"android.permission-group.ACTIVITY_RECOGNITION\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99 0.9 -1.99 2L3 20c0 1.1 0.89 2 2 2h14c1.1 0 2-0.9 2-2V6c0-1.1-0.9-2-2-2zm0 16H5V10h14v10zm-4.5-7c-1.38 0-2.5 1.12-2.5 2.5s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CALL_LOG\": {\n      \"description\": \"read and write phone call log\",\n      \"description_ptr\": \"permgroupdesc_calllog\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24.0\\\" height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\"><path d=\\\"M16.01,14.48l-2.62,2.62c-2.75,-1.49 -5.01,-3.75 -6.5,-6.5l2.62,-2.62c0.24,-0.24 0.34,-0.58 0.27,-0.9L9.13,3.82c-0.09,-0.47 -0.5,-0.8 -0.98,-0.8L4,3.01c-0.56,0 -1.03,0.47 -1,1.03c0.17,2.91 1.04,5.63 2.43,8.01c1.57,2.69 3.81,4.93 6.5,6.5c2.38,1.39 5.1,2.26 8.01,2.43c0.56,0.03 1.03,-0.44 1.03,-1v-4.15c0,-0.48 -0.34,-0.89 -0.8,-0.98l-3.26,-0.65C16.58,14.14 16.24,14.24 16.01,14.48z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,8h10V6H12V8zM12,4h10V2H12V4zM22,10H12v2h10V10z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_call_log\",\n      \"label\": \"Call logs\",\n      \"label_ptr\": \"permgrouplab_calllog\",\n      \"name\": \"android.permission-group.CALL_LOG\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18,10.48L18,6c0,-1.1 -0.9,-2 -2,-2L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2v-4.48l4,3.98v-11l-4,3.98zM16,9.69L16,18L4,18L4,6h12v3.69z\\\" fill=\\\"@android:color/white\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4,1h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M4,21h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M20,5H4C2.9,5 2,5.9 2,7v10c0,1.1 0.9,2 2,2h2h12h2c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM8.21,17c0.7,-0.47 2.46,-1 3.79,-1s3.09,0.53 3.79,1H8.21zM20,17h-2c0,-1.99 -4,-3 -6,-3s-6,1.01 -6,3H4V7h16V17z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,13.5c1.66,0 3,-1.34 3,-3c0,-1.66 -1.34,-3 -3,-3s-3,1.34 -3,3C9,12.16 10.34,13.5 12,13.5zM12,9.5c0.55,0 1,0.45 1,1s-0.45,1 -1,1s-1,-0.45 -1,-1S11.45,9.5 12,9.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,14c1.66,0 3,-1.34 3,-3V5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6C9,12.66 10.34,14 12,14zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5H5c0,3.53 2.61,6.43 6,6.92V21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92H17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NEARBY_DEVICES\": {\n      \"description\": \"discover and connect to nearby devices\",\n      \"description_ptr\": \"permgroupdesc_nearby_devices\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,16.427L7.574,12 12,7.574 16.426,12zM10.58,2.59l-8,8c-0.78,0.78 -0.78,2.05 0,2.83l8,8c0.78,0.78 2.05,0.78 2.83,0l8,-8c0.78,-0.78 0.78,-2.05 0,-2.83l-8,-8c-0.78,-0.79 -2.04,-0.79 -2.83,0zM13.39,17.81L12,19.2l-1.39,-1.39 -4.42,-4.42L4.8,12l1.39,-1.39 4.42,-4.42L12,4.8l1.39,1.39 4.42,4.42L19.2,12l-1.39,1.39 -4.42,4.42z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_nearby_devices\",\n      \"label\": \"Nearby devices\",\n      \"label_ptr\": \"permgrouplab_nearby_devices\",\n      \"name\": \"android.permission-group.NEARBY_DEVICES\"\n    },\n    \"android.permission-group.NOTIFICATIONS\": {\n      \"description\": \"show notifications\",\n      \"description_ptr\": \"permgroupdesc_notifications\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24.0\\\" height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\"><path d=\\\"M7.58 4.08L6.15 2.65C3.75 4.48 2.17 7.3 2.03 10.5h2c.15-2.65 1.51-4.97 3.55-6.42zm12.39 6.42h2c-.15-3.2-1.73-6.02-4.12-7.85l-1.42 1.43c2.02 1.45 3.39 3.77 3.54 6.42zM18 11c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2v-5zm-6 11c.14 0 .27-.01.4-.04.65-.14 1.18-.58 1.44-1.18.1-.24.15-.5.15-.78h-4c.01 1.1.9 2 2.01 2z\\\" fill=\\\"#FF000000\\\"/></svg>\",\n      \"icon_ptr\": \"ic_notifications_alerted\",\n      \"label\": \"Notifications\",\n      \"label_ptr\": \"permgrouplab_notifications\",\n      \"name\": \"android.permission-group.NOTIFICATIONS\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.READ_MEDIA_AURAL\": {\n      \"description\": \"access music and audio on your device\",\n      \"description_ptr\": \"permgroupdesc_readMediaAural\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M10,21q-1.65,0 -2.825,-1.175Q6,18.65 6,17q0,-1.65 1.175,-2.825Q8.35,13 10,13q0.575,0 1.063,0.137 0.487,0.138 0.937,0.413V3h6v4h-4v10q0,1.65 -1.175,2.825Q11.65,21 10,21z\\\" fill=\\\"@android:color/white\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_read_media_aural\",\n      \"label\": \"Music and audio\",\n      \"label_ptr\": \"permgrouplab_readMediaAural\",\n      \"name\": \"android.permission-group.READ_MEDIA_AURAL\"\n    },\n    \"android.permission-group.READ_MEDIA_VISUAL\": {\n      \"description\": \"access photos and videos on your device\",\n      \"description_ptr\": \"permgroupdesc_readMediaVisual\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M9,14h10l-3.45,-4.5 -2.3,3 -1.55,-2zM8,18q-0.825,0 -1.412,-0.587Q6,16.825 6,16L6,4q0,-0.825 0.588,-1.413Q7.175,2 8,2h12q0.825,0 1.413,0.587Q22,3.175 22,4v12q0,0.825 -0.587,1.413Q20.825,18 20,18zM8,16h12L20,4L8,4v12zM4,22q-0.825,0 -1.413,-0.587Q2,20.825 2,20L2,6h2v14h14v2zM8,4v12L8,4z\\\" fill=\\\"@android:color/white\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_read_media_visual\",\n      \"label\": \"Photos and videos\",\n      \"label_ptr\": \"permgrouplab_readMediaVisual\",\n      \"name\": \"android.permission-group.READ_MEDIA_VISUAL\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16.5,3c-1.74,0 -3.41,0.81 -4.5,2.09C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.42 2,                         8.5c0,3.78 3.4,6.86 8.55,11.54L12,21.35l1.45,-1.32C18.6,15.36 22,12.28 22,8.5C22,                         5.42 19.58,3 16.5,3zM12.1,18.55l-0.1,0.1l-0.1,-0.1C7.14,14.24 4,11.39 4,8.5C4,6.5 5.5,                         5 7.5,5c1.54,0 3.04,0.99 3.57,2.36h1.87C13.46,5.99 14.96,5 16.5,5c2,0 3.5,1.5 3.5,3.5C20,                         11.39 16.86,14.24 12.1,18.55z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,2H4C2.9,2 2,2.9 2,4v18l4.75,-4h14C21.1,18 22,17.1 22,16V4C22,2.9 21.1,2 20,2zM20,16H4V4h16V16zM9,11H7V9h2V11zM17,11h-2V9h2V11zM13,11h-2V9h2V11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,6h-8l-2,-2H4C2.9,4 2.01,4.9 2.01,6L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8C22,6.9 21.1,6 20,6zM20,18H4V8h16V18z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Files\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.UNDEFINED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission-group.UNDEFINED\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCEPT_HANDOVER\": {\n      \"description\": \"Allows the app to continue a call which was started in another app.\",\n      \"description_ptr\": \"permdesc_acceptHandovers\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCEPT_HANDOVER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_AMBIENT_CONTEXT_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_CONTEXT_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_BACKGROUND_LOCATION\": {\n      \"description\": \"This app can access location at any time, even while the app is not in use.\",\n      \"description_ptr\": \"permdesc_accessBackgroundLocation\",\n      \"label\": \"access location in the background\",\n      \"label_ptr\": \"permlab_accessBackgroundLocation\",\n      \"name\": \"android.permission.ACCESS_BACKGROUND_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_BLOBS_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BLOBS_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RESPONSE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RESPONSE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location only in the foreground\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CONTEXT_HUB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTEXT_HUB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location only in the foreground\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FPS_COUNTER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FPS_COUNTER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier|role\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_MEDIA_LOCATION\": {\n      \"description\": \"Allows the app to read locations from your media collection.\",\n      \"description_ptr\": \"permdesc_mediaLocation\",\n      \"label\": \"read locations from your media collection\",\n      \"label_ptr\": \"permlab_mediaLocation\",\n      \"name\": \"android.permission.ACCESS_MEDIA_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MESSAGES_ON_ICC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MESSAGES_ON_ICC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ACCESS_SHARED_LIBRARIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHARED_LIBRARIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ACCESS_SHORTCUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHORTCUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_TUNED_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TUNED_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_DESCRAMBLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_DESCRAMBLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_SHARED_FILTER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_SHARED_FILTER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_TUNER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_TUNER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_ULTRASOUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_ULTRASOUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VIBRATOR_STATE\": {\n      \"description\": \"Allows the app to access the vibrator state.\",\n      \"description_ptr\": \"permdesc_vibrator_state\",\n      \"label\": \"Allows the app to access the vibrator state.\",\n      \"label_ptr\": \"permdesc_vibrator_state\",\n      \"name\": \"android.permission.ACCESS_VIBRATOR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACTIVITY_EMBEDDING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACTIVITY_EMBEDDING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACTIVITY_RECOGNITION\": {\n      \"description\": \"This app can recognize your physical activity.\",\n      \"description_ptr\": \"permdesc_activityRecognition\",\n      \"label\": \"recognize physical activity\",\n      \"label_ptr\": \"permlab_activityRecognition\",\n      \"name\": \"android.permission.ACTIVITY_RECOGNITION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ADD_TRUSTED_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADD_TRUSTED_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_SLIPPERY_TOUCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_SLIPPERY_TOUCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents|role\"\n    },\n    \"android.permission.AMBIENT_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AMBIENT_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.APPROVE_INCIDENT_REPORTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.APPROVE_INCIDENT_REPORTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|incidentReportApprover\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASSOCIATE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKGROUND_CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_backgroundCamera\",\n      \"label\": \"take pictures and videos in the background\",\n      \"label_ptr\": \"permlab_backgroundCamera\",\n      \"name\": \"android.permission.BACKGROUND_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_PREDICTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_PREDICTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_ATTENTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ATTENTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ATTESTATION_VERIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ATTESTATION_VERIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_REDIRECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_REDIRECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CELL_BROADCAST_SERVICE\": {\n      \"description\": \"Allows the app to bind to the\\n        cell broadcast module in order to forward cell broadcast messages\\n        as they are received. Cell broadcast alerts are delivered in some\\n        locations to warn you of emergency situations. Malicious apps may\\n        interfere with the performance or operation of your device when an\\n        emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_bindCellBroadcastService\",\n      \"label\": \"Forward cell broadcast messages\",\n      \"label_ptr\": \"permlab_bindCellBroadcastService\",\n      \"name\": \"android.permission.BIND_CELL_BROADCAST_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DISPLAY_HASHING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DISPLAY_HASHING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DOMAIN_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DOMAIN_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EUICC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EUICC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_GAME_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_GAME_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_GBA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_GBA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_HOTWORD_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_HOTWORD_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_MUSIC_RECOGNITION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MUSIC_RECOGNITION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESUME_ON_REBOOT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESUME_ON_REBOOT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROTATION_RESOLVER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROTATION_RESOLVER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_SELECTION_TOOLBAR_RENDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SELECTION_TOOLBAR_RENDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELEPHONY_DATA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_DATA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRACE_REPORT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRACE_REPORT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRANSLATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRANSLATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_INTERACTIVE_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INTERACTIVE_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADVERTISE\": {\n      \"description\": \"Allows the app to advertise to nearby Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_advertise\",\n      \"label\": \"advertise to nearby Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_advertise\",\n      \"name\": \"android.permission.BLUETOOTH_ADVERTISE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_CONNECT\": {\n      \"description\": \"Allows the app to connect to paired Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_connect\",\n      \"label\": \"connect to paired Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_connect\",\n      \"name\": \"android.permission.BLUETOOTH_CONNECT\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_SCAN\": {\n      \"description\": \"Allows the app to discover and pair nearby Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_scan\",\n      \"label\": \"discover and pair nearby Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_scan\",\n      \"name\": \"android.permission.BLUETOOTH_SCAN\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in use.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"Access body sensor data, like heart rate, while in use\",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BODY_SENSORS_BACKGROUND\": {\n      \"description\": \"Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in the background.\",\n      \"description_ptr\": \"permdesc_bodySensors_background\",\n      \"label\": \"Access body sensor data, like heart rate, while in the background\",\n      \"label_ptr\": \"permlab_bodySensors_background\",\n      \"name\": \"android.permission.BODY_SENSORS_BACKGROUND\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRIGHTNESS_SLIDER_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRIGHTNESS_SLIDER_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BYPASS_ROLE_QUALIFICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BYPASS_ROLE_QUALIFICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.CALL_AUDIO_INTERCEPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_AUDIO_INTERCEPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CALL_COMPANION_APP\": {\n      \"description\": \"Allows the app to see and control ongoing calls on the\\n        device. This includes information such as call numbers for calls and the state of the\\n        calls.\",\n      \"description_ptr\": \"permdesc_callCompanionApp\",\n      \"label\": \"see and control calls through the system.\",\n      \"label_ptr\": \"permlab_callCompanionApp\",\n      \"name\": \"android.permission.CALL_COMPANION_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera while the app is in use.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\": {\n      \"description\": \"This app can receive callbacks when any camera device is being opened (by what application) or closed.\",\n      \"description_ptr\": \"permdesc_cameraOpenCloseListener\",\n      \"label\": \"Allow an application or service to receive callbacks about camera devices being opened or closed.\",\n      \"label_ptr\": \"permlab_cameraOpenCloseListener\",\n      \"name\": \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_BLACKOUT_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_BLACKOUT_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_MEDIA_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_MEDIA_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_TUNER_AUDIO_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TUNER_AUDIO_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CLEAR_FREEZE_PERIOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_FREEZE_PERIOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_ALWAYS_ON_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_ALWAYS_ON_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_AUTOMOTIVE_GNSS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_AUTOMOTIVE_GNSS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DEVICE_LIGHTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_LIGHTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DEVICE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DISPLAY_SATURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_SATURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_UI_TRACING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_UI_TRACING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_VIRTUAL_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_VIRTUAL_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.DELIVER_COMPANION_MESSAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELIVER_COMPANION_MESSAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_HIDDEN_API_CHECKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_HIDDEN_API_CHECKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DOMAIN_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DOMAIN_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ENABLE_TEST_HARNESS_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENABLE_TEST_HARNESS_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ENTER_CAR_MODE_PRIORITIZED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENTER_CAR_MODE_PRIORITIZED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\": {\n      \"description\": \"Exempt the app from restrictions to record audio.\",\n      \"description_ptr\": \"permdesc_exemptFromAudioRecordRestrictions\",\n      \"label\": \"exempt from audio record restrictions\",\n      \"label_ptr\": \"permlab_exemptFromAudioRecordRestrictions\",\n      \"name\": \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FOREGROUND_SERVICE\": {\n      \"description\": \"Allows the app to make use of foreground services.\",\n      \"description_ptr\": \"permdesc_foregroundService\",\n      \"label\": \"run foreground service\",\n      \"label_ptr\": \"permlab_foregroundService\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_HISTORICAL_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_HISTORICAL_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PEOPLE_TILE_PREVIEW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PEOPLE_TILE_PREVIEW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HANDLE_CAR_MODE_CHANGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HANDLE_CAR_MODE_CHANGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.HIDE_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.HIGH_SAMPLING_RATE_SENSORS\": {\n      \"description\": \"Allows the app to sample sensor data at a rate greater than 200 Hz\",\n      \"description_ptr\": \"permdesc_highSamplingRateSensors\",\n      \"label\": \"access sensor data at a high sampling rate\",\n      \"label_ptr\": \"permlab_highSamplingRateSensors\",\n      \"name\": \"android.permission.HIGH_SAMPLING_RATE_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INPUT_CONSUMER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INPUT_CONSUMER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_DPC_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_DPC_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.INSTALL_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGE_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGE_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_SELF_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_SELF_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_TEST_ONLY_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_TEST_ONLY_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|instant|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|role\"\n    },\n    \"android.permission.INTERNAL_DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KEEP_UNINSTALLED_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEEP_UNINSTALLED_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.LAUNCH_DEVICE_MANAGER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_DEVICE_MANAGER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.LOADER_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOADER_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_BYPASS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_BYPASS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.LOCK_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCK_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOG_COMPAT_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOG_COMPAT_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MAKE_UID_VISIBLE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MAKE_UID_VISIBLE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|recents\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.MANAGE_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APP_HIBERNATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_HIBERNATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_OPS_MODES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_MODES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier|role\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_PREDICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_PREDICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUDIO_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUDIO_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIND_INSTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIND_INSTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC_DIALOG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC_DIALOG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CLOUDSEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CLOUDSEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_CONTENT_CAPTURE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_CAPTURE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_SUGGESTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_SUGGESTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CRATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CRATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DEBUGGING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEBUGGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ETHERNET_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ETHERNET_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_EXTERNAL_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_GAME_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_GAME_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_GAME_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_GAME_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_HOTWORD_DETECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_HOTWORD_DETECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|preinstalled\"\n    },\n    \"android.permission.MANAGE_IPSEC_TUNNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_IPSEC_TUNNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_LOWPAN_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOWPAN_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_LOW_POWER_STANDBY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOW_POWER_STANDBY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_MUSIC_RECOGNITION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MUSIC_RECOGNITION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATION_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATION_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ONGOING_CALLS\": {\n      \"description\": \"Allows an app to see details about ongoing calls\\n         on your device and to control these calls.\",\n      \"description_ptr\": \"permdesc_manageOngoingCalls\",\n      \"label\": \"Manage ongoing calls\",\n      \"label_ptr\": \"permlab_manageOngoingCalls\",\n      \"name\": \"android.permission.MANAGE_ONGOING_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ROTATION_RESOLVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROTATION_RESOLVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SAFETY_CENTER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SAFETY_CENTER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|installer|role\"\n    },\n    \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SEARCH_UI\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SEARCH_UI\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_SENSORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role|installer\"\n    },\n    \"android.permission.MANAGE_SLICE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SLICE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SMARTSPACE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SMARTSPACE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_SPEECH_RECOGNITION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SPEECH_RECOGNITION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_PLANS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_PLANS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TEST_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TEST_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_TIME_AND_ZONE_DETECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TIME_AND_ZONE_DETECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TOAST_RATE_LIMITING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TOAST_RATE_LIMITING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_UI_TRANSLATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_UI_TRANSLATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WEAK_ESCROW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WEAK_ESCROW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WIFI_COUNTRY_CODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_COUNTRY_CODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_WIFI_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|knownSigner\"\n    },\n    \"android.permission.MANAGE_WIFI_NETWORK_SELECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_NETWORK_SELECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|knownSigner\"\n    },\n    \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MODIFY_QUIET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_QUIET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_TOUCH_MODE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_TOUCH_MODE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NEARBY_WIFI_DEVICES\": {\n      \"description\": \"Allows the app to advertise, connect, and determine the relative position of nearby Wiu2011Fi devices\",\n      \"description_ptr\": \"permdesc_nearby_wifi_devices\",\n      \"label\": \"interact with nearby Wiu2011Fi devices\",\n      \"label_ptr\": \"permlab_nearby_wifi_devices\",\n      \"name\": \"android.permission.NEARBY_WIFI_DEVICES\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.NETWORK_AIRPLANE_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_AIRPLANE_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_CARRIER_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_CARRIER_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_FACTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_FACTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.NETWORK_MANAGED_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_MANAGED_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.NETWORK_SCAN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SCAN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SETUP_WIZARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETUP_WIZARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_STATS_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STATS_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_PREFERRED_PAYMENT_INFO\": {\n      \"description\": \"Allows the app to get preferred nfc payment service information like\\n      registered aids and route destination.\",\n      \"description_ptr\": \"permdesc_preferredPaymentInfo\",\n      \"label\": \"Preferred NFC Payment Service Information\",\n      \"label_ptr\": \"permlab_preferredPaymentInfo\",\n      \"name\": \"android.permission.NFC_PREFERRED_PAYMENT_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_TRANSACTION_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_TRANSACTION_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_APP_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_APP_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OBSERVE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OBSERVE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role|installer\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|knownSigner\"\n    },\n    \"android.permission.PACKAGE_ROLLBACK_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_ROLLBACK_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop|retailDemo\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEEK_DROPBOX_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEEK_DROPBOX_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|role\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.PERFORM_IMS_SINGLE_REGISTRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_IMS_SINGLE_REGISTRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.POST_NOTIFICATIONS\": {\n      \"description\": \"Allows the app to show notifications\",\n      \"description_ptr\": \"permdesc_postNotification\",\n      \"label\": \"show notifications\",\n      \"label_ptr\": \"permlab_postNotification\",\n      \"name\": \"android.permission.POST_NOTIFICATIONS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.POWER_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.POWER_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVISION_DEMO_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVISION_DEMO_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.QUERY_ADMIN_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_ADMIN_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.QUERY_ALL_PACKAGES\": {\n      \"description\": \"Allows an app to see all installed packages.\",\n      \"description_ptr\": \"permdesc_queryAllPackages\",\n      \"label\": \"query all packages\",\n      \"label_ptr\": \"permlab_queryAllPackages\",\n      \"name\": \"android.permission.QUERY_ALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.QUERY_AUDIO_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_AUDIO_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|companion\"\n    },\n    \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_APP_SPECIFIC_LOCALES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_APP_SPECIFIC_LOCALES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_ASSISTANT_APP_SEARCH_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_ASSISTANT_APP_SEARCH_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.READ_BASIC_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the basic telephony\\n        features of the device.\",\n      \"description_ptr\": \"permdesc_readBasicPhoneState\",\n      \"label\": \"read basic telephony status and identity \",\n      \"label_ptr\": \"permlab_readBasicPhoneState\",\n      \"name\": \"android.permission.READ_BASIC_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CARRIER_APP_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CARRIER_APP_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.READ_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to read data about your contacts stored on your phone.\\n      Apps will also have access to the accounts on your phone that have created contacts.\\n      This may include accounts created by apps you have installed.\\n      This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTENT_RATING_SYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CONTENT_RATING_SYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DREAM_SUPPRESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_SUPPRESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.READ_GLOBAL_APP_SEARCH_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_GLOBAL_APP_SEARCH_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.READ_HOME_APP_SEARCH_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_HOME_APP_SEARCH_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_LOWPAN_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOWPAN_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_MEDIA_AUDIO\": {\n      \"description\": \"Allows the app to read audio files from your shared storage.\",\n      \"description_ptr\": \"permdesc_readMediaAudio\",\n      \"label\": \"read audio files from shared storage\",\n      \"label_ptr\": \"permlab_readMediaAudio\",\n      \"name\": \"android.permission.READ_MEDIA_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_MEDIA_IMAGES\": {\n      \"description\": \"Allows the app to read image files from your shared storage.\",\n      \"description_ptr\": \"permdesc_readMediaImages\",\n      \"label\": \"read image files from shared storage\",\n      \"label_ptr\": \"permlab_readMediaImages\",\n      \"name\": \"android.permission.READ_MEDIA_IMAGES\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_MEDIA_VIDEO\": {\n      \"description\": \"Allows the app to read video files from your shared storage.\",\n      \"description_ptr\": \"permdesc_readMediaVideo\",\n      \"label\": \"read video files from shared storage\",\n      \"label_ptr\": \"permlab_readMediaVideo\",\n      \"name\": \"android.permission.READ_MEDIA_VIDEO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_NEARBY_STREAMING_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NEARBY_STREAMING_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PEOPLE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PEOPLE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRINT_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_PROJECTION_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROJECTION_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_RUNTIME_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_RUNTIME_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SAFETY_CENTER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SAFETY_CENTER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYSTEM_UPDATE_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SYSTEM_UPDATE_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WALLPAPER_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WALLPAPER_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone while the app is in use.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.RECORD_BACKGROUND_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordBackgroundAudio\",\n      \"label\": \"record audio in the background\",\n      \"label_ptr\": \"permlab_recordBackgroundAudio\",\n      \"name\": \"android.permission.RECORD_BACKGROUND_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECOVER_KEYSTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVER_KEYSTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_STATS_PULL_ATOM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_STATS_PULL_ATOM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_DISPLAY_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_DISPLAY_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role\"\n    },\n    \"android.permission.RENOUNCE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RENOUNCE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_COMPUTER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_COMPUTER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_WATCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_WATCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_SELF_MANAGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_SELF_MANAGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_PASSWORD_COMPLEXITY\": {\n      \"description\": \"Allows the app to learn the screen\\n        lock complexity level (high, medium, low or none), which indicates the possible range of\\n        length and type of the screen lock. The app can also suggest to users that they update the\\n        screen lock to a certain level but users can freely ignore and navigate away. Note that the\\n        screen lock is not stored in plaintext so the app does not know the exact password.\\n    \",\n      \"description_ptr\": \"permdesc_requestPasswordComplexity\",\n      \"label\": \"request screen lock complexity\",\n      \"label_ptr\": \"permlab_requestPasswordComplexity\",\n      \"name\": \"android.permission.REQUEST_PASSWORD_COMPLEXITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_UNIQUE_ID_ATTESTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_UNIQUE_ID_ATTESTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_APP_ERRORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_APP_ERRORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_WIFI_SUBSYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTART_WIFI_SUBSYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESTORE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTORE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.ROTATE_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ROTATE_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SCHEDULE_EXACT_ALARM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCHEDULE_EXACT_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|appop\"\n    },\n    \"android.permission.SCHEDULE_PRIORITIZED_ALARM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCHEDULE_PRIORITIZED_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_EMBMS_INTENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_EMBMS_INTENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SAFETY_CENTER_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SAFETY_CENTER_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|privileged\"\n    },\n    \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_CLIP_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_CLIP_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_GAME_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_GAME_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_HARMFUL_APP_WARNINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_HARMFUL_APP_WARNINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_INITIAL_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INITIAL_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_SYSTEM_AUDIO_CAPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SYSTEM_AUDIO_CAPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_DIM_AMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_DIM_AMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHOW_KEYGUARD_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHOW_KEYGUARD_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SIGNAL_REBOOT_READINESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_REBOOT_READINESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SMS_FINANCIAL_TRANSACTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SMS_FINANCIAL_TRANSACTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier|role\"\n    },\n    \"android.permission.START_ACTIVITY_AS_CALLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITY_AS_CALLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_CROSS_PROFILE_ACTIVITIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_CROSS_PROFILE_ACTIVITIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier|role\"\n    },\n    \"android.permission.START_REVIEW_PERMISSION_DECISIONS\": {\n      \"description\": \"Allows the holder to start screen to review permission decisions. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_startReviewPermissionDecisions\",\n      \"label\": \"start view permission decisions\",\n      \"label_ptr\": \"permlab_startReviewPermissionDecisions\",\n      \"name\": \"android.permission.START_REVIEW_PERMISSION_DECISIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.START_VIEW_APP_FEATURES\": {\n      \"description\": \"Allows the holder to start viewing the features info for an app.\",\n      \"description_ptr\": \"permdesc_startViewAppFeatures\",\n      \"label\": \"start view app features\",\n      \"label_ptr\": \"permlab_startViewAppFeatures\",\n      \"name\": \"android.permission.START_VIEW_APP_FEATURES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.START_VIEW_PERMISSION_USAGE\": {\n      \"description\": \"Allows the holder to start the permission usage for an app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_startViewPermissionUsage\",\n      \"label\": \"start view permission usage\",\n      \"label_ptr\": \"permlab_startViewPermissionUsage\",\n      \"name\": \"android.permission.START_VIEW_PERMISSION_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.STATSCOMPANION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATSCOMPANION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_EXTERNAL_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_EXTERNAL_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUPPRESS_CLIPBOARD_ACCESS_NOTIFICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUPPRESS_CLIPBOARD_ACCESS_NOTIFICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUSPEND_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUSPEND_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|appop|installer|pre23|development\"\n    },\n    \"android.permission.SYSTEM_APPLICATION_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SYSTEM_APPLICATION_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role|installer\"\n    },\n    \"android.permission.SYSTEM_CAMERA\": {\n      \"description\": \"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well\",\n      \"description_ptr\": \"permdesc_systemCamera\",\n      \"label\": \"Allow an application or service access to system cameras to take pictures and videos\",\n      \"label_ptr\": \"permlab_systemCamera\",\n      \"name\": \"android.permission.SYSTEM_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"system|signature|role\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BLACKLISTED_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BLACKLISTED_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TIS_EXTENSION_INTERFACE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TIS_EXTENSION_INTERFACE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRIGGER_LOST_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_LOST_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.TRIGGER_SHELL_BUGREPORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_SHELL_BUGREPORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_TIME_ZONE_RULES_CHECK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TUNER_RESOURCE_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TUNER_RESOURCE_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.UNLIMITED_TOASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_TOASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer|role\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_FONTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_FONTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.UPDATE_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_ATTESTATION_VERIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_ATTESTATION_VERIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_BIOMETRIC\": {\n      \"description\": \"Allows the app to use biometric hardware for authentication\",\n      \"description_ptr\": \"permdesc_useBiometric\",\n      \"label\": \"use biometric hardware\",\n      \"label_ptr\": \"permlab_useBiometric\",\n      \"name\": \"android.permission.USE_BIOMETRIC\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_BIOMETRIC_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_BIOMETRIC_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_COLORIZED_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_COLORIZED_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|role\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_EXACT_ALARM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_EXACT_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FULL_SCREEN_INTENT\": {\n      \"description\": \"Allows the app to display notifications as full screen activities on a locked device\",\n      \"description_ptr\": \"permdesc_fullScreenIntent\",\n      \"label\": \"display notifications as full screen activities on a locked device\",\n      \"label_ptr\": \"permlab_fullScreenIntent\",\n      \"name\": \"android.permission.USE_FULL_SCREEN_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.USE_RESERVED_DISK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_RESERVED_DISK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UWB_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UWB_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UWB_RANGING\": {\n      \"description\": \"Allow the app to determine relative position between nearby Ultra-Wideband devices\",\n      \"description_ptr\": \"permdesc_uwb_ranging\",\n      \"label\": \"determine relative position between nearby Ultra-Wideband devices\",\n      \"label_ptr\": \"permlab_uwb_ranging\",\n      \"name\": \"android.permission.UWB_RANGING\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VERIFY_ATTESTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VERIFY_ATTESTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.VIBRATE_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIBRATE_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.VIRTUAL_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIRTUAL_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.WATCH_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WATCH_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to modify the data about your contacts stored on your phone.\\n      This permission allows apps to delete contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier|configurator\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_OBB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_OBB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role|installer\"\n    },\n    \"android.permission.WRITE_SECURITY_LOG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURITY_LOG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|role\"\n    },\n    \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.permission.INSTALL_EXISTING_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.INSTALL_EXISTING_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"com.android.permission.USE_INSTALLER_V2\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_INSTALLER_V2\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.permission.USE_SYSTEM_DATA_LOADERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_SYSTEM_DATA_LOADERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_34.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACTIVITY_RECOGNITION\": {\n      \"description\": \"access your physical activity\",\n      \"description_ptr\": \"permgroupdesc_activityRecognition\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5 .1 -.8 .1 l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_activity_recognition\",\n      \"label\": \"Physical activity\",\n      \"label_ptr\": \"permgrouplab_activityRecognition\",\n      \"name\": \"android.permission-group.ACTIVITY_RECOGNITION\"\n    },\n    \"android.permission-group.CALENDAR\": {\n      \"description\": \"access your calendar\",\n      \"description_ptr\": \"permgroupdesc_calendar\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99 0.9 -1.99 2L3 20c0 1.1 0.89 2 2 2h14c1.1 0 2-0.9 2-2V6c0-1.1-0.9-2-2-2zm0 16H5V10h14v10zm-4.5-7c-1.38 0-2.5 1.12-2.5 2.5s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_calendar\",\n      \"label\": \"Calendar\",\n      \"label_ptr\": \"permgrouplab_calendar\",\n      \"name\": \"android.permission-group.CALENDAR\"\n    },\n    \"android.permission-group.CALL_LOG\": {\n      \"description\": \"read and write phone call log\",\n      \"description_ptr\": \"permgroupdesc_calllog\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24.0\\\" height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\"><path d=\\\"M16.01,14.48l-2.62,2.62c-2.75,-1.49 -5.01,-3.75 -6.5,-6.5l2.62,-2.62c0.24,-0.24 0.34,-0.58 0.27,-0.9L9.13,3.82c-0.09,-0.47 -0.5,-0.8 -0.98,-0.8L4,3.01c-0.56,0 -1.03,0.47 -1,1.03c0.17,2.91 1.04,5.63 2.43,8.01c1.57,2.69 3.81,4.93 6.5,6.5c2.38,1.39 5.1,2.26 8.01,2.43c0.56,0.03 1.03,-0.44 1.03,-1v-4.15c0,-0.48 -0.34,-0.89 -0.8,-0.98l-3.26,-0.65C16.58,14.14 16.24,14.24 16.01,14.48z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,8h10V6H12V8zM12,4h10V2H12V4zM22,10H12v2h10V10z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_call_log\",\n      \"label\": \"Call logs\",\n      \"label_ptr\": \"permgrouplab_calllog\",\n      \"name\": \"android.permission-group.CALL_LOG\"\n    },\n    \"android.permission-group.CAMERA\": {\n      \"description\": \"take pictures and record video\",\n      \"description_ptr\": \"permgroupdesc_camera\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18,10.48L18,6c0,-1.1 -0.9,-2 -2,-2L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2v-4.48l4,3.98v-11l-4,3.98zM16,9.69L16,18L4,18L4,6h12v3.69z\\\" fill=\\\"@android:color/white\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_camera\",\n      \"label\": \"Camera\",\n      \"label_ptr\": \"permgrouplab_camera\",\n      \"name\": \"android.permission-group.CAMERA\"\n    },\n    \"android.permission-group.CONTACTS\": {\n      \"description\": \"access your contacts\",\n      \"description_ptr\": \"permgroupdesc_contacts\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4,1h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M4,21h16v2h-16z\\\" fill=\\\"#000000\\\"/><path d=\\\"M20,5H4C2.9,5 2,5.9 2,7v10c0,1.1 0.9,2 2,2h2h12h2c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM8.21,17c0.7,-0.47 2.46,-1 3.79,-1s3.09,0.53 3.79,1H8.21zM20,17h-2c0,-1.99 -4,-3 -6,-3s-6,1.01 -6,3H4V7h16V17z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,13.5c1.66,0 3,-1.34 3,-3c0,-1.66 -1.34,-3 -3,-3s-3,1.34 -3,3C9,12.16 10.34,13.5 12,13.5zM12,9.5c0.55,0 1,0.45 1,1s-0.45,1 -1,1s-1,-0.45 -1,-1S11.45,9.5 12,9.5z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_contacts\",\n      \"label\": \"Contacts\",\n      \"label_ptr\": \"permgrouplab_contacts\",\n      \"name\": \"android.permission-group.CONTACTS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"access this device's location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z\\\" fill=\\\"#000000\\\"/><path d=\\\"M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_location\",\n      \"label\": \"Location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MICROPHONE\": {\n      \"description\": \"record audio\",\n      \"description_ptr\": \"permgroupdesc_microphone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,14c1.66,0 3,-1.34 3,-3V5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6C9,12.66 10.34,14 12,14zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V5z\\\" fill=\\\"#000000\\\"/><path d=\\\"M17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5H5c0,3.53 2.61,6.43 6,6.92V21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92H17z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_microphone\",\n      \"label\": \"Microphone\",\n      \"label_ptr\": \"permgrouplab_microphone\",\n      \"name\": \"android.permission-group.MICROPHONE\"\n    },\n    \"android.permission-group.NEARBY_DEVICES\": {\n      \"description\": \"discover and connect to nearby devices\",\n      \"description_ptr\": \"permgroupdesc_nearby_devices\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,16.427L7.574,12 12,7.574 16.426,12zM10.58,2.59l-8,8c-0.78,0.78 -0.78,2.05 0,2.83l8,8c0.78,0.78 2.05,0.78 2.83,0l8,-8c0.78,-0.78 0.78,-2.05 0,-2.83l-8,-8c-0.78,-0.79 -2.04,-0.79 -2.83,0zM13.39,17.81L12,19.2l-1.39,-1.39 -4.42,-4.42L4.8,12l1.39,-1.39 4.42,-4.42L12,4.8l1.39,1.39 4.42,4.42L19.2,12l-1.39,1.39 -4.42,4.42z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_nearby_devices\",\n      \"label\": \"Nearby devices\",\n      \"label_ptr\": \"permgrouplab_nearby_devices\",\n      \"name\": \"android.permission-group.NEARBY_DEVICES\"\n    },\n    \"android.permission-group.NOTIFICATIONS\": {\n      \"description\": \"show notifications\",\n      \"description_ptr\": \"permgroupdesc_notifications\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24.0\\\" height=\\\"24.0\\\" viewBox=\\\"0 0 24.0 24.0\\\"><path d=\\\"M7.58 4.08L6.15 2.65C3.75 4.48 2.17 7.3 2.03 10.5h2c.15-2.65 1.51-4.97 3.55-6.42zm12.39 6.42h2c-.15-3.2-1.73-6.02-4.12-7.85l-1.42 1.43c2.02 1.45 3.39 3.77 3.54 6.42zM18 11c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2v-5zm-6 11c.14 0 .27-.01.4-.04.65-.14 1.18-.58 1.44-1.18.1-.24.15-.5.15-.78h-4c.01 1.1.9 2 2.01 2z\\\" fill=\\\"#FF000000\\\"/></svg>\",\n      \"icon_ptr\": \"ic_notifications_alerted\",\n      \"label\": \"Notifications\",\n      \"label_ptr\": \"permgrouplab_notifications\",\n      \"name\": \"android.permission-group.NOTIFICATIONS\"\n    },\n    \"android.permission-group.PHONE\": {\n      \"description\": \"make and manage phone calls\",\n      \"description_ptr\": \"permgroupdesc_phone\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12 .37 2.33 .57 3.57 .57 .55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55 .45 -1 1-1h3.5c.55 0 1 .45 1 1 0 1.25 .2 2.45 .57 3.57 .11 .35 .03 .74-.25 1.02l-2.2 2.2z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_phone_calls\",\n      \"label\": \"Phone\",\n      \"label_ptr\": \"permgrouplab_phone\",\n      \"name\": \"android.permission-group.PHONE\"\n    },\n    \"android.permission-group.READ_MEDIA_AURAL\": {\n      \"description\": \"access music and audio on your device\",\n      \"description_ptr\": \"permgroupdesc_readMediaAural\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M10,21q-1.65,0 -2.825,-1.175Q6,18.65 6,17q0,-1.65 1.175,-2.825Q8.35,13 10,13q0.575,0 1.063,0.137 0.487,0.138 0.937,0.413V3h6v4h-4v10q0,1.65 -1.175,2.825Q11.65,21 10,21z\\\" fill=\\\"@android:color/white\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_read_media_aural\",\n      \"label\": \"Music and audio\",\n      \"label_ptr\": \"permgrouplab_readMediaAural\",\n      \"name\": \"android.permission-group.READ_MEDIA_AURAL\"\n    },\n    \"android.permission-group.READ_MEDIA_VISUAL\": {\n      \"description\": \"access photos and videos on your device\",\n      \"description_ptr\": \"permgroupdesc_readMediaVisual\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M9,14h10l-3.45,-4.5 -2.3,3 -1.55,-2zM8,18q-0.825,0 -1.412,-0.587Q6,16.825 6,16L6,4q0,-0.825 0.588,-1.413Q7.175,2 8,2h12q0.825,0 1.413,0.587Q22,3.175 22,4v12q0,0.825 -0.587,1.413Q20.825,18 20,18zM8,16h12L20,4L8,4v12zM4,22q-0.825,0 -1.413,-0.587Q2,20.825 2,20L2,6h2v14h14v2zM8,4v12L8,4z\\\" fill=\\\"@android:color/white\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_read_media_visual\",\n      \"label\": \"Photos and videos\",\n      \"label_ptr\": \"permgrouplab_readMediaVisual\",\n      \"name\": \"android.permission-group.READ_MEDIA_VISUAL\"\n    },\n    \"android.permission-group.SENSORS\": {\n      \"description\": \"access sensor data about your vital signs\",\n      \"description_ptr\": \"permgroupdesc_sensors\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16.5,3c-1.74,0 -3.41,0.81 -4.5,2.09C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.42 2,                         8.5c0,3.78 3.4,6.86 8.55,11.54L12,21.35l1.45,-1.32C18.6,15.36 22,12.28 22,8.5C22,                         5.42 19.58,3 16.5,3zM12.1,18.55l-0.1,0.1l-0.1,-0.1C7.14,14.24 4,11.39 4,8.5C4,6.5 5.5,                         5 7.5,5c1.54,0 3.04,0.99 3.57,2.36h1.87C13.46,5.99 14.96,5 16.5,5c2,0 3.5,1.5 3.5,3.5C20,                         11.39 16.86,14.24 12.1,18.55z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sensors\",\n      \"label\": \"Body sensors\",\n      \"label_ptr\": \"permgrouplab_sensors\",\n      \"name\": \"android.permission-group.SENSORS\"\n    },\n    \"android.permission-group.SMS\": {\n      \"description\": \"send and view SMS messages\",\n      \"description_ptr\": \"permgroupdesc_sms\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,2H4C2.9,2 2,2.9 2,4v18l4.75,-4h14C21.1,18 22,17.1 22,16V4C22,2.9 21.1,2 20,2zM20,16H4V4h16V16zM9,11H7V9h2V11zM17,11h-2V9h2V11zM13,11h-2V9h2V11z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_sms\",\n      \"label\": \"SMS\",\n      \"label_ptr\": \"permgrouplab_sms\",\n      \"name\": \"android.permission-group.SMS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"access files on your device\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"<?xml version=\\\"1.0\\\" ?><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20,6h-8l-2,-2H4C2.9,4 2.01,4.9 2.01,6L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8C22,6.9 21.1,6 20,6zM20,18H4V8h16V18z\\\" fill=\\\"#000000\\\"/></svg>\",\n      \"icon_ptr\": \"perm_group_storage\",\n      \"label\": \"Files\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.UNDEFINED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission-group.UNDEFINED\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCEPT_HANDOVER\": {\n      \"description\": \"Allows the app to continue a call which was started in another app.\",\n      \"description_ptr\": \"permdesc_acceptHandovers\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCEPT_HANDOVER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_AMBIENT_CONTEXT_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_CONTEXT_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_AMBIENT_LIGHT_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_BACKGROUND_LOCATION\": {\n      \"description\": \"This app can access location at any time, even while the app is not in use.\",\n      \"description_ptr\": \"permdesc_accessBackgroundLocation\",\n      \"label\": \"access location in the background\",\n      \"label_ptr\": \"permlab_accessBackgroundLocation\",\n      \"name\": \"android.permission.ACCESS_BACKGROUND_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_BLOBS_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BLOBS_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_BROADCAST_RESPONSE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_BROADCAST_RESPONSE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"access approximate location only in the foreground\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CONTEXT_HUB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_CONTEXT_HUB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"access precise location only in the foreground\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACCESS_FM_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FM_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_FPS_COUNTER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_FPS_COUNTER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_GPU_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_GPU_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_IMS_CALL_SERVICE\": {\n      \"description\": \"Allows the app to use the IMS service to make calls without your intervention.\",\n      \"description_ptr\": \"permdesc_accessImsCallService\",\n      \"label\": \"access IMS call service\",\n      \"label_ptr\": \"permlab_accessImsCallService\",\n      \"name\": \"android.permission.ACCESS_IMS_CALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_INPUT_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INPUT_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier|role\"\n    },\n    \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Allows the app to access\\n        extra location provider commands.  This may allow the app to interfere\\n        with the operation of the GPS or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOCUS_ID_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_MEDIA_LOCATION\": {\n      \"description\": \"Allows the app to read locations from your media collection.\",\n      \"description_ptr\": \"permdesc_mediaLocation\",\n      \"label\": \"read locations from your media collection\",\n      \"label_ptr\": \"permlab_mediaLocation\",\n      \"name\": \"android.permission.ACCESS_MEDIA_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_MESSAGES_ON_ICC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MESSAGES_ON_ICC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_MTP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_MTP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_CONDITIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NETWORK_CONDITIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows the app to view\\n      information about network connections such as which networks exist and are\\n      connected.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network connections\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.ACCESS_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.ACCESS_NOTIFICATION_POLICY\": {\n      \"description\": \"Allows the app to read and write Do Not Disturb configuration.\",\n      \"description_ptr\": \"permdesc_access_notification_policy\",\n      \"label\": \"access Do Not Disturb\",\n      \"label_ptr\": \"permlab_access_notification_policy\",\n      \"name\": \"android.permission.ACCESS_NOTIFICATION_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_PDB_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_PDB_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ACCESS_SHARED_LIBRARIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHARED_LIBRARIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ACCESS_SHORTCUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SHORTCUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role|recents\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_TUNED_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TUNED_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_DESCRAMBLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_DESCRAMBLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_SHARED_FILTER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_SHARED_FILTER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_TV_TUNER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_TV_TUNER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_OPTIONS_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_UCE_PRESENCE_SERVICE\",\n      \"permissionGroup\": \"android.permission-group.PHONE\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_ULTRASOUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_ULTRASOUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VIBRATOR_STATE\": {\n      \"description\": \"Allows the app to access the vibrator state.\",\n      \"description_ptr\": \"permdesc_vibrator_state\",\n      \"label\": \"Allows the app to access the vibrator state.\",\n      \"label_ptr\": \"permdesc_vibrator_state\",\n      \"name\": \"android.permission.ACCESS_VIBRATOR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_VR_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCESS_VR_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows the app to view information\\n      about Wi-Fi networking, such as whether Wi-Fi is enabled and name of\\n      connected Wi-Fi devices.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi connections\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACTIVITY_EMBEDDING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACTIVITY_EMBEDDING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ACTIVITY_RECOGNITION\": {\n      \"description\": \"This app can recognize your physical activity.\",\n      \"description_ptr\": \"permdesc_activityRecognition\",\n      \"label\": \"recognize physical activity\",\n      \"label_ptr\": \"permlab_activityRecognition\",\n      \"name\": \"android.permission.ACTIVITY_RECOGNITION\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ACT_AS_PACKAGE_FOR_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ADD_TRUSTED_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADD_TRUSTED_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.ALLOCATE_AGGRESSIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOCATE_AGGRESSIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ALLOW_SLIPPERY_TOUCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ALLOW_SLIPPERY_TOUCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents|role\"\n    },\n    \"android.permission.AMBIENT_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AMBIENT_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.ANSWER_PHONE_CALLS\": {\n      \"description\": \"Allows the app to answer an incoming phone call.\",\n      \"description_ptr\": \"permdesc_answerPhoneCalls\",\n      \"label\": \"answer phone calls\",\n      \"label_ptr\": \"permlab_answerPhoneCalls\",\n      \"name\": \"android.permission.ANSWER_PHONE_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|runtime\"\n    },\n    \"android.permission.APPROVE_INCIDENT_REPORTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.APPROVE_INCIDENT_REPORTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|incidentReportApprover\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASSOCIATE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKGROUND_CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera at any time.\",\n      \"description_ptr\": \"permdesc_backgroundCamera\",\n      \"label\": \"take pictures and videos in the background\",\n      \"label_ptr\": \"permlab_backgroundCamera\",\n      \"name\": \"android.permission.BACKGROUND_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_PREDICTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_PREDICTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BIND_ACCESSIBILITY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ACCESSIBILITY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_ATTENTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ATTENTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ATTESTATION_VERIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ATTESTATION_VERIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_AUTOFILL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_AUTOFILL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CACHE_QUOTA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CACHE_QUOTA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_DIAGNOSTIC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CALL_REDIRECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_REDIRECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CALL_STREAMING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CALL_STREAMING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CARRIER_MESSAGING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CARRIER_SERVICES\": {\n      \"description\": \"Allows the holder to bind to carrier services. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_bindCarrierServices\",\n      \"label\": \"bind to carrier services\",\n      \"label_ptr\": \"permlab_bindCarrierServices\",\n      \"name\": \"android.permission.BIND_CARRIER_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CELL_BROADCAST_SERVICE\": {\n      \"description\": \"Allows the app to bind to the\\n        cell broadcast module in order to forward cell broadcast messages\\n        as they are received. Cell broadcast alerts are delivered in some\\n        locations to warn you of emergency situations. Malicious apps may\\n        interfere with the performance or operation of your device when an\\n        emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_bindCellBroadcastService\",\n      \"label\": \"Forward cell broadcast messages\",\n      \"label_ptr\": \"permlab_bindCellBroadcastService\",\n      \"name\": \"android.permission.BIND_CELL_BROADCAST_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CHOOSER_TARGET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CHOOSER_TARGET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_COMPANION_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_COMPANION_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONDITION_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_CAPTURE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_CREDENTIAL_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_CREDENTIAL_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.BIND_DIRECTORY_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DIRECTORY_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_DISPLAY_HASHING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DISPLAY_HASHING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DOMAIN_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DOMAIN_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_DREAM_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_DREAM_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EUICC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EUICC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_EXTERNAL_STORAGE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_FIELD_CLASSIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_FIELD_CLASSIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_GAME_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_GAME_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_GBA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_GBA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_HOTWORD_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_HOTWORD_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_IMS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_IMS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.BIND_INCALL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INCALL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INTENT_FILTER_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_INTENT_FILTER_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_JOB_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_JOB_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_KEYGUARD_APPWIDGET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_KEYGUARD_APPWIDGET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_MIDI_DEVICE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MIDI_DEVICE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_MUSIC_RECOGNITION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_MUSIC_RECOGNITION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NFC_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NFC_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PACKAGE_VERIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PACKAGE_VERIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_RECOMMENDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_PRINT_SPOOLER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_PRINT_SPOOLER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_QUICK_SETTINGS_TILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_QUICK_SETTINGS_TILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.BIND_REMOTEVIEWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTEVIEWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_REMOTE_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_REMOTE_LOCKSCREEN_VALIDATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_REMOTE_LOCKSCREEN_VALIDATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RESUME_ON_REBOOT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RESUME_ON_REBOOT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROTATION_RESOLVER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROTATION_RESOLVER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_ROUTE_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_ROUTE_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SATELLITE_GATEWAY_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SATELLITE_GATEWAY_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SATELLITE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SATELLITE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.BIND_SCREENING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SCREENING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_SELECTION_TOOLBAR_RENDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SELECTION_TOOLBAR_RENDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELECOM_CONNECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TELEPHONY_DATA_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_DATA_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TELEPHONY_NETWORK_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXTCLASSIFIER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TEXT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TEXT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRACE_REPORT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRACE_REPORT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRANSLATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRANSLATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_INTERACTIVE_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_INTERACTIVE_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_TV_REMOTE_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_TV_REMOTE_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VISUAL_QUERY_DETECTION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_QUERY_DETECTION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VISUAL_VOICEMAIL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_VOICE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VOICE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VPN_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VPN_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_VR_LISTENER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_VR_LISTENER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WEARABLE_SENSING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BIND_WEARABLE_SENSING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows the app to view the\\n      configuration of the Bluetooth on the phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"pair with Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows the app to configure\\n      the local Bluetooth phone, and to discover and pair with remote devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"access Bluetooth settings\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BLUETOOTH_ADVERTISE\": {\n      \"description\": \"Allows the app to advertise to nearby Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_advertise\",\n      \"label\": \"advertise to nearby Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_advertise\",\n      \"name\": \"android.permission.BLUETOOTH_ADVERTISE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_CONNECT\": {\n      \"description\": \"Allows the app to connect to paired Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_connect\",\n      \"label\": \"connect to paired Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_connect\",\n      \"name\": \"android.permission.BLUETOOTH_CONNECT\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.BLUETOOTH_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BLUETOOTH_SCAN\": {\n      \"description\": \"Allows the app to discover and pair nearby Bluetooth devices\",\n      \"description_ptr\": \"permdesc_bluetooth_scan\",\n      \"label\": \"discover and pair nearby Bluetooth devices\",\n      \"label_ptr\": \"permlab_bluetooth_scan\",\n      \"name\": \"android.permission.BLUETOOTH_SCAN\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BLUETOOTH_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.BODY_SENSORS\": {\n      \"description\": \"Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in use.\",\n      \"description_ptr\": \"permdesc_bodySensors\",\n      \"label\": \"Access body sensor data, like heart rate, while in use\",\n      \"label_ptr\": \"permlab_bodySensors\",\n      \"name\": \"android.permission.BODY_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BODY_SENSORS_BACKGROUND\": {\n      \"description\": \"Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in the background.\",\n      \"description_ptr\": \"permdesc_bodySensors_background\",\n      \"label\": \"Access body sensor data, like heart rate, while in the background\",\n      \"label_ptr\": \"permlab_bodySensors_background\",\n      \"name\": \"android.permission.BODY_SENSORS_BACKGROUND\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BRIGHTNESS_SLIDER_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BRIGHTNESS_SLIDER_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.BROADCAST_NETWORK_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_OPTION_INTERACTIVE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_OPTION_INTERACTIVE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows the app to\\n    send sticky broadcasts, which remain after the broadcast ends. Excessive\\n    use may make the phone slow or unstable by causing it to use too\\n    much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BYPASS_ROLE_QUALIFICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.BYPASS_ROLE_QUALIFICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.CACHE_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CACHE_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.CALL_AUDIO_INTERCEPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_AUDIO_INTERCEPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CALL_COMPANION_APP\": {\n      \"description\": \"Allows the app to see and control ongoing calls on the\\n        device. This includes information such as call numbers for calls and the state of the\\n        calls.\",\n      \"description_ptr\": \"permdesc_callCompanionApp\",\n      \"label\": \"see and control calls through the system.\",\n      \"label_ptr\": \"permlab_callCompanionApp\",\n      \"name\": \"android.permission.CALL_COMPANION_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the app to call phone numbers\\n      without your intervention. This may result in unexpected charges or calls.\\n      Note that this doesn't allow the app to call emergency numbers.\\n      Malicious apps may cost you money by making calls without your\\n      confirmation, or dial carrier codes which cause incoming calls to be\\n      automatically forwarded to another number.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"This app can take pictures and record videos using the camera while the app is in use.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_DISABLE_TRANSMIT_LED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_INJECT_EXTERNAL_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\": {\n      \"description\": \"This app can receive callbacks when any camera device is being opened (by what application) or closed.\",\n      \"description_ptr\": \"permdesc_cameraOpenCloseListener\",\n      \"label\": \"Allow an application or service to receive callbacks about camera devices being opened or closed.\",\n      \"label_ptr\": \"permlab_cameraOpenCloseListener\",\n      \"name\": \"android.permission.CAMERA_OPEN_CLOSE_LISTENER\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAMERA_SEND_SYSTEM_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_AUDIO_HOTWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_HOTWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_BLACKOUT_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_BLACKOUT_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|appop\"\n    },\n    \"android.permission.CAPTURE_MEDIA_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_MEDIA_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_TUNER_AUDIO_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TUNER_AUDIO_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_TV_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_TV_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CAPTURE_VIDEO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VIDEO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CARRIER_FILTER_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CARRIER_FILTER_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_ACCESSIBILITY_VOLUME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_APP_IDLE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_IDLE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_LOWPAN_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_LOWPAN_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows the app to change the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_OVERLAY_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHANGE_OVERLAY_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows the app to receive\\n      packets sent to all devices on a Wi-Fi network using multicast addresses,\\n      not just your phone.  It uses more power than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows the app to connect to and\\n      disconnect from Wi-Fi access points and to make changes to device\\n      configuration for Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"connect and disconnect from Wi-Fi\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CHECK_REMOTE_LOCKSCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CHECK_REMOTE_LOCKSCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.CLEAR_FREEZE_PERIOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CLEAR_FREEZE_PERIOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.CONFIGURE_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIGURE_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|knownSigner\"\n    },\n    \"android.permission.CONFIRM_FULL_BACKUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONFIRM_FULL_BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONNECTIVITY_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_ALWAYS_ON_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_ALWAYS_ON_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_AUTOMOTIVE_GNSS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_AUTOMOTIVE_GNSS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DEVICE_LIGHTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_LIGHTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DEVICE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DEVICE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_BRIGHTNESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_DISPLAY_SATURATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_DISPLAY_SATURATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_INCALL_EXPERIENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_INCALL_EXPERIENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.CONTROL_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_UI_TRACING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_UI_TRACING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.CONTROL_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.CONTROL_WIFI_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CONTROL_WIFI_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CREATE_VIRTUAL_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREATE_VIRTUAL_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CREDENTIAL_MANAGER_SET_ORIGIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CREDENTIAL_MANAGER_SET_ORIGIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.CRYPT_KEEPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.CRYPT_KEEPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.DELETE_STAGED_HEALTH_CONNECT_REMOTE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DELETE_STAGED_HEALTH_CONNECT_REMOTE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DELIVER_COMPANION_MESSAGES\": {\n      \"description\": \"Allows a companion app to deliver companion messages to other devices.\",\n      \"description_ptr\": \"permdesc_deliverCompanionMessages\",\n      \"label\": \"Deliver companion messages\",\n      \"label_ptr\": \"permlab_deliverCompanionMessages\",\n      \"name\": \"android.permission.DELIVER_COMPANION_MESSAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DETECT_SCREEN_CAPTURE\": {\n      \"description\": \"This app will get notified when a screenshot is taken while the app is in use.\",\n      \"description_ptr\": \"permdesc_detectScreenCapture\",\n      \"label\": \"detect screen captures of app windows\",\n      \"label_ptr\": \"permlab_detectScreenCapture\",\n      \"name\": \"android.permission.DETECT_SCREEN_CAPTURE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_HIDDEN_API_CHECKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_HIDDEN_API_CHECKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows the app to disable the\\n      keylock and any associated password security.  For example, the phone\\n      disables the keylock when receiving an incoming phone call, then\\n      re-enables the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable your screen lock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISABLE_SYSTEM_SOUND_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_NFC_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_NFC_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DISPATCH_PROVISIONING_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DISPATCH_PROVISIONING_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.DOMAIN_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DOMAIN_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|privileged\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.DVB_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.DVB_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.ENABLE_TEST_HARNESS_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENABLE_TEST_HARNESS_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ENFORCE_UPDATE_OWNERSHIP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENFORCE_UPDATE_OWNERSHIP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ENTER_CAR_MODE_PRIORITIZED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ENTER_CAR_MODE_PRIORITIZED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.EXECUTE_APP_ACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.EXECUTE_APP_ACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\": {\n      \"description\": \"Exempt the app from restrictions to record audio.\",\n      \"description_ptr\": \"permdesc_exemptFromAudioRecordRestrictions\",\n      \"label\": \"exempt from audio record restrictions\",\n      \"label_ptr\": \"permlab_exemptFromAudioRecordRestrictions\",\n      \"name\": \"android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows the app to expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FILTER_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FILTER_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.FOREGROUND_SERVICE\": {\n      \"description\": \"Allows the app to make use of foreground services.\",\n      \"description_ptr\": \"permdesc_foregroundService\",\n      \"label\": \"run foreground service\",\n      \"label_ptr\": \"permlab_foregroundService\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_CAMERA\": {\n      \"description\": \"Allows the app to make use of foreground services with the type camera\",\n      \"description_ptr\": \"permdesc_foregroundServiceCamera\",\n      \"label\": \"run foreground service with the type camera\",\n      \"label_ptr\": \"permlab_foregroundServiceCamera\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE\": {\n      \"description\": \"Allows the app to make use of foreground services with the type connectedDevice\",\n      \"description_ptr\": \"permdesc_foregroundServiceConnectedDevice\",\n      \"label\": \"run foreground service with the type connectedDevice\",\n      \"label_ptr\": \"permlab_foregroundServiceConnectedDevice\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_DATA_SYNC\": {\n      \"description\": \"Allows the app to make use of foreground services with the type dataSync\",\n      \"description_ptr\": \"permdesc_foregroundServiceDataSync\",\n      \"label\": \"run foreground service with the type dataSync\",\n      \"label_ptr\": \"permlab_foregroundServiceDataSync\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_DATA_SYNC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT\": {\n      \"description\": \"Allows the app to make use of foreground services with the type fileManagement\",\n      \"description_ptr\": \"permdesc_foregroundServiceFileManagement\",\n      \"label\": \"run foreground service with the type fileManagement\",\n      \"label_ptr\": \"permlab_foregroundServiceFileManagement\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_HEALTH\": {\n      \"description\": \"Allows the app to make use of foreground services with the type health\",\n      \"description_ptr\": \"permdesc_foregroundServiceHealth\",\n      \"label\": \"run foreground service with the type health\",\n      \"label_ptr\": \"permlab_foregroundServiceHealth\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_HEALTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_LOCATION\": {\n      \"description\": \"Allows the app to make use of foreground services with the type location\",\n      \"description_ptr\": \"permdesc_foregroundServiceLocation\",\n      \"label\": \"run foreground service with the type location\",\n      \"label_ptr\": \"permlab_foregroundServiceLocation\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK\": {\n      \"description\": \"Allows the app to make use of foreground services with the type mediaPlayback\",\n      \"description_ptr\": \"permdesc_foregroundServiceMediaPlayback\",\n      \"label\": \"run foreground service with the type mediaPlayback\",\n      \"label_ptr\": \"permlab_foregroundServiceMediaPlayback\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION\": {\n      \"description\": \"Allows the app to make use of foreground services with the type mediaProjection\",\n      \"description_ptr\": \"permdesc_foregroundServiceMediaProjection\",\n      \"label\": \"run foreground service with the type mediaProjection\",\n      \"label_ptr\": \"permlab_foregroundServiceMediaProjection\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_MICROPHONE\": {\n      \"description\": \"Allows the app to make use of foreground services with the type microphone\",\n      \"description_ptr\": \"permdesc_foregroundServiceMicrophone\",\n      \"label\": \"run foreground service with the type microphone\",\n      \"label_ptr\": \"permlab_foregroundServiceMicrophone\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_MICROPHONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_PHONE_CALL\": {\n      \"description\": \"Allows the app to make use of foreground services with the type phoneCall\",\n      \"description_ptr\": \"permdesc_foregroundServicePhoneCall\",\n      \"label\": \"run foreground service with the type phoneCall\",\n      \"label_ptr\": \"permlab_foregroundServicePhoneCall\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_PHONE_CALL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING\": {\n      \"description\": \"Allows the app to make use of foreground services with the type remoteMessaging\",\n      \"description_ptr\": \"permdesc_foregroundServiceRemoteMessaging\",\n      \"label\": \"run foreground service with the type remoteMessaging\",\n      \"label_ptr\": \"permlab_foregroundServiceRemoteMessaging\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_SPECIAL_USE\": {\n      \"description\": \"Allows the app to make use of foreground services with the type specialUse\",\n      \"description_ptr\": \"permdesc_foregroundServiceSpecialUse\",\n      \"label\": \"run foreground service with the type specialUse\",\n      \"label_ptr\": \"permlab_foregroundServiceSpecialUse\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_SPECIAL_USE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|appop|instant\"\n    },\n    \"android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED\": {\n      \"description\": \"Allows the app to make use of foreground services with the type systemExempted\",\n      \"description_ptr\": \"permdesc_foregroundServiceSystemExempted\",\n      \"label\": \"run foreground service with the type systemExempted\",\n      \"label_ptr\": \"permlab_foregroundServiceSystemExempted\",\n      \"name\": \"android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.FRAME_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FRAME_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FREEZE_SCREEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.FREEZE_SCREEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows the app to get\\n      the list of accounts known by the phone.  This may include any accounts\\n      created by applications you have installed.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"find accounts on the device\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GET_ACCOUNTS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ACCOUNTS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GET_ANY_PROVIDER_TYPE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_ANY_PROVIDER_TYPE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_APP_METADATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_METADATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.GET_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_DETAILED_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_DETAILED_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_HISTORICAL_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_HISTORICAL_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.GET_INTENT_SENDER_INTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_INTENT_SENDER_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows the app to retrieve its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure app storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_PEOPLE_TILE_PREVIEW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PEOPLE_TILE_PREVIEW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.GET_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows the app to retrieve information\\n       about currently and recently running tasks.  This may allow the app to\\n       discover information about which applications are used on the device.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running apps\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TOP_ACTIVITY_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GET_TOP_ACTIVITY_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HANDLE_CAR_MODE_CHANGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HANDLE_CAR_MODE_CHANGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.HANDLE_QUERY_PACKAGE_RESTART\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HANDLE_QUERY_PACKAGE_RESTART\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HDMI_CEC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HDMI_CEC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.HIDE_OVERLAY_WINDOWS\": {\n      \"description\": \"This app can request that the system hides overlays originating from apps from being shown on top of it.\",\n      \"description_ptr\": \"permdesc_hideOverlayWindows\",\n      \"label\": \"hide other apps overlays\",\n      \"label_ptr\": \"permlab_hideOverlayWindows\",\n      \"name\": \"android.permission.HIDE_OVERLAY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.HIGH_SAMPLING_RATE_SENSORS\": {\n      \"description\": \"Allows the app to sample sensor data at a rate greater than 200 Hz\",\n      \"description_ptr\": \"permdesc_highSamplingRateSensors\",\n      \"label\": \"access sensor data at a high sampling rate\",\n      \"label_ptr\": \"permlab_highSamplingRateSensors\",\n      \"name\": \"android.permission.HIGH_SAMPLING_RATE_SENSORS\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INPUT_CONSUMER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INPUT_CONSUMER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_DPC_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_DPC_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.INSTALL_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_PACKAGE_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_PACKAGE_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_SELF_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_SELF_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INSTALL_TEST_ONLY_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTALL_TEST_ONLY_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INSTANT_APP_FOREGROUND_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|development|instant|appop\"\n    },\n    \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.INTERACT_ACROSS_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.INTERACT_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|role\"\n    },\n    \"android.permission.INTERNAL_DELETE_CACHE_FILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|module\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows the app to create\\n     network sockets and use custom network protocols. The browser and other\\n     applications provide means to send data to the internet, so this\\n     permission is not required to send data to the internet.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"have full network access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.INVOKE_CARRIER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.INVOKE_CARRIER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KEEP_UNINSTALLED_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEEP_UNINSTALLED_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KEYPHRASE_ENROLLMENT_APPLICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_ALL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_ALL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.KILL_UID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.KILL_UID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|role\"\n    },\n    \"android.permission.LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.LAUNCH_CREDENTIAL_SELECTOR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_CREDENTIAL_SELECTOR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.LAUNCH_DEVICE_MANAGER_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_DEVICE_MANAGER_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LAUNCH_TRUST_AGENT_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.LIST_ENABLED_CREDENTIAL_PROVIDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LIST_ENABLED_CREDENTIAL_PROVIDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOADER_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOADER_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.LOCAL_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCAL_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_BYPASS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_BYPASS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOCATION_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCATION_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.LOCK_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOCK_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOG_COMPAT_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOG_COMPAT_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.LOG_FOREGROUND_RESOURCE_USE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOG_FOREGROUND_RESOURCE_USE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|module\"\n    },\n    \"android.permission.LOOP_RADIO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.LOOP_RADIO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MAKE_UID_VISIBLE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MAKE_UID_VISIBLE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|recents|role\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_STACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_STACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ACTIVITY_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ACTIVITY_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.MANAGE_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_APP_HIBERNATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_HIBERNATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_OPS_MODES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_MODES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier|role\"\n    },\n    \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_APP_PREDICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_PREDICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUDIO_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUDIO_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_AUTO_FILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_AUTO_FILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIND_INSTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIND_INSTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BIOMETRIC_DIALOG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BIOMETRIC_DIALOG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CA_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CA_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_CLIPBOARD_ACCESS_NOTIFICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CLIPBOARD_ACCESS_NOTIFICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_CLOUDSEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CLOUDSEARCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_COMPANION_DEVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_COMPANION_DEVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"module|signature|role\"\n    },\n    \"android.permission.MANAGE_CONTENT_CAPTURE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_CAPTURE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CONTENT_SUGGESTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CONTENT_SUGGESTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CRATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CRATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_DEBUGGING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEBUGGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_DEFAULT_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEFAULT_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_ADMINS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_ADMINS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_LOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_LOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_AIRPLANE_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_AIRPLANE_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_APPS_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_APPS_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_APP_EXEMPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_APP_EXEMPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_APP_RESTRICTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_APP_RESTRICTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_APP_USER_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_AUDIO_OUTPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_AUDIO_OUTPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_AUTOFILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_AUTOFILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_BACKUP_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_BACKUP_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_BLUETOOTH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_BLUETOOTH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_BUGREPORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_BUGREPORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_CALLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_CAMERA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_CAMERA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_DEFAULT_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_DEFAULT_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_DEVICE_IDENTIFIERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_DEVICE_IDENTIFIERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_DISPLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_DISPLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_FACTORY_RESET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_FACTORY_RESET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_FUN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_FUN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_INPUT_METHODS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_INPUT_METHODS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_KEEP_UNINSTALLED_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_KEEP_UNINSTALLED_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_KEYGUARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_KEYGUARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_LOCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_LOCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_LOCK_TASK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_LOCK_TASK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_METERED_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_METERED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_MICROPHONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_MICROPHONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_MOBILE_NETWORK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_MOBILE_NETWORK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_MODIFY_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_MODIFY_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_MTE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_MTE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_NETWORK_LOGGING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_NETWORK_LOGGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_OVERRIDE_APN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_OVERRIDE_APN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_PACKAGE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_PACKAGE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_PRINTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_PRINTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_PROFILE_INTERACTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_PROFILE_INTERACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_PROXY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_PROXY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_QUERY_SYSTEM_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_QUERY_SYSTEM_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_RESET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_RESET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SAFE_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SAFE_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SCREEN_CAPTURE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SCREEN_CAPTURE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SCREEN_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SCREEN_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SECURITY_LOGGING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SECURITY_LOGGING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SUSPEND_PERSONAL_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SUSPEND_PERSONAL_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_UPDATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_SYSTEM_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_VPN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_VPN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_WALLPAPER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_WIFI\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_WIFI\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_WINDOWS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_WINDOWS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DEVICE_POLICY_WIPE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DEVICE_POLICY_WIPE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.MANAGE_DOCUMENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DOCUMENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_DYNAMIC_SYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_DYNAMIC_SYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_ETHERNET_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ETHERNET_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_EXTERNAL_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_FACE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FACE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FACTORY_RESET_PROTECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_FINGERPRINT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_FINGERPRINT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_GAME_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_GAME_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_GAME_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_GAME_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_HOTWORD_DETECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_HOTWORD_DETECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|preinstalled\"\n    },\n    \"android.permission.MANAGE_IPSEC_TUNNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_IPSEC_TUNNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_LOWPAN_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOWPAN_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_LOW_POWER_STANDBY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_LOW_POWER_STANDBY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_MEDIA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop|preinstalled\"\n    },\n    \"android.permission.MANAGE_MEDIA_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MEDIA_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_MUSIC_RECOGNITION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_MUSIC_RECOGNITION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_NOTIFICATION_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_NOTIFICATION_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ONGOING_CALLS\": {\n      \"description\": \"Allows an app to see details about ongoing calls\\n         on your device and to control these calls.\",\n      \"description_ptr\": \"permdesc_manageOngoingCalls\",\n      \"label\": \"Manage ongoing calls\",\n      \"label_ptr\": \"permlab_manageOngoingCalls\",\n      \"name\": \"android.permission.MANAGE_ONGOING_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.MANAGE_OWN_CALLS\": {\n      \"description\": \"Allows the app to route its calls through the system in\\n        order to improve the calling experience.\",\n      \"description_ptr\": \"permdesc_manageOwnCalls\",\n      \"label\": \"route calls through the system\",\n      \"label_ptr\": \"permlab_manageOwnCalls\",\n      \"name\": \"android.permission.MANAGE_OWN_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\": {\n      \"description\": \"Allows apps to set the profile owners and the device owner.\",\n      \"description_ptr\": \"permdesc_manageProfileAndDeviceOwners\",\n      \"label\": \"manage profile and device owners\",\n      \"label_ptr\": \"permlab_manageProfileAndDeviceOwners\",\n      \"name\": \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_ROTATION_RESOLVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_ROTATION_RESOLVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SAFETY_CENTER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SAFETY_CENTER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|installer|role\"\n    },\n    \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SEARCH_UI\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SEARCH_UI\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MANAGE_SENSORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role|installer\"\n    },\n    \"android.permission.MANAGE_SLICE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SLICE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SMARTSPACE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SMARTSPACE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SOUND_TRIGGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SOUND_TRIGGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_SPEECH_RECOGNITION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SPEECH_RECOGNITION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_PLANS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_PLANS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_TEST_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TEST_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_TIME_AND_ZONE_DETECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TIME_AND_ZONE_DETECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_TOAST_RATE_LIMITING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_TOAST_RATE_LIMITING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_UI_TRANSLATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_UI_TRANSLATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MANAGE_USB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_USER_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_VOICE_KEYPHRASES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_VOICE_KEYPHRASES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WEAK_ESCROW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WEAK_ESCROW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WEARABLE_SENSING_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WEARABLE_SENSING_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MANAGE_WIFI_COUNTRY_CODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_COUNTRY_CODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MANAGE_WIFI_INTERFACES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_INTERFACES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|knownSigner\"\n    },\n    \"android.permission.MANAGE_WIFI_NETWORK_SELECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MANAGE_WIFI_NETWORK_SELECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|knownSigner\"\n    },\n    \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MARK_DEVICE_ORGANIZATION_OWNED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MEDIA_CONTENT_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_CONTENT_CONTROL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MEDIA_RESOURCE_OVERRIDE_PID\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.MIGRATE_HEALTH_CONNECT_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MIGRATE_HEALTH_CONNECT_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|knownSigner\"\n    },\n    \"android.permission.MODIFY_ACCESSIBILITY_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_ACCESSIBILITY_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_AUDIO_ROUTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_ROUTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows the app to modify global audio settings such as volume and which speaker is used for output.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_CELL_BROADCASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_CELL_BROADCASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DAY_NIGHT_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DAY_NIGHT_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_HDR_CONVERSION_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_HDR_CONVERSION_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_NETWORK_ACCOUNTING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PARENTAL_CONTROLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PARENTAL_CONTROLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.MODIFY_QUIET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_QUIET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role\"\n    },\n    \"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.MODIFY_THEME_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_THEME_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_TOUCH_MODE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_TOUCH_MODE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEFAULT_SMS_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_DEVICE_CONFIG_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MONITOR_INPUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_INPUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.MONITOR_KEYBOARD_BACKLIGHT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MONITOR_KEYBOARD_BACKLIGHT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NEARBY_WIFI_DEVICES\": {\n      \"description\": \"Allows the app to advertise, connect, and determine the relative position of nearby Wiu2011Fi devices\",\n      \"description_ptr\": \"permdesc_nearby_wifi_devices\",\n      \"label\": \"interact with nearby Wiu2011Fi devices\",\n      \"label_ptr\": \"permlab_nearby_wifi_devices\",\n      \"name\": \"android.permission.NEARBY_WIFI_DEVICES\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.NETWORK_AIRPLANE_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_AIRPLANE_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_BYPASS_PRIVATE_DNS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_CARRIER_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_CARRIER_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_FACTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_FACTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.NETWORK_MANAGED_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_MANAGED_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.NETWORK_SCAN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SCAN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_SETUP_WIZARD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SETUP_WIZARD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NETWORK_STACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NETWORK_STATS_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NETWORK_STATS_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.NET_ADMIN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.NET_TUNNELING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NET_TUNNELING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows the app to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_HANDOVER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_HANDOVER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_PREFERRED_PAYMENT_INFO\": {\n      \"description\": \"Allows the app to get preferred nfc payment service information like\\n      registered aids and route destination.\",\n      \"description_ptr\": \"permdesc_preferredPaymentInfo\",\n      \"label\": \"Preferred NFC Payment Service Information\",\n      \"label_ptr\": \"permlab_preferredPaymentInfo\",\n      \"name\": \"android.permission.NFC_PREFERRED_PAYMENT_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_SET_CONTROLLER_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NFC_TRANSACTION_EVENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NFC_TRANSACTION_EVENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.NOTIFICATION_DURING_SETUP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFICATION_DURING_SETUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.NOTIFY_TV_INPUTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.NOTIFY_TV_INPUTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_APP_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_APP_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OBSERVE_NETWORK_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_NETWORK_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OBSERVE_ROLE_HOLDERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_ROLE_HOLDERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OBSERVE_SENSOR_PRIVACY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OBSERVE_SENSOR_PRIVACY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role|installer\"\n    },\n    \"android.permission.OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.OVERRIDE_WIFI_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.OVERRIDE_WIFI_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|knownSigner\"\n    },\n    \"android.permission.PACKAGE_ROLLBACK_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_ROLLBACK_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|appop|retailDemo\"\n    },\n    \"android.permission.PACKAGE_VERIFICATION_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PACKET_KEEPALIVE_OFFLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PACKET_KEEPALIVE_OFFLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PEEK_DROPBOX_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEEK_DROPBOX_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PEERS_MAC_ADDRESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PEERS_MAC_ADDRESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|role\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.PERFORM_IMS_SINGLE_REGISTRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_IMS_SINGLE_REGISTRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.PERFORM_SIM_ACTIVATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PERFORM_SIM_ACTIVATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows the app to make parts of itself persistent in memory.  This can limit memory available to other apps slowing down the phone.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make app always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.POST_NOTIFICATIONS\": {\n      \"description\": \"Allows the app to show notifications\",\n      \"description_ptr\": \"permdesc_postNotification\",\n      \"label\": \"show notifications\",\n      \"label_ptr\": \"permlab_postNotification\",\n      \"name\": \"android.permission.POST_NOTIFICATIONS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.POWER_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.POWER_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows the app to see the\\n        number being dialed during an outgoing call with the option to redirect\\n        the call to a different number or abort the call altogether.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"reroute outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.PROVIDE_REMOTE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_REMOTE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_RESOLVER_RANKER_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVIDE_TRUST_AGENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVIDE_TRUST_AGENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.PROVISION_DEMO_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.PROVISION_DEMO_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|knownSigner\"\n    },\n    \"android.permission.QUERY_ADMIN_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_ADMIN_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.QUERY_ALL_PACKAGES\": {\n      \"description\": \"Allows an app to see all installed packages.\",\n      \"description_ptr\": \"permdesc_queryAllPackages\",\n      \"label\": \"query all packages\",\n      \"label_ptr\": \"permlab_queryAllPackages\",\n      \"name\": \"android.permission.QUERY_ALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.QUERY_AUDIO_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_AUDIO_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.QUERY_CLONED_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_CLONED_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.QUERY_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.QUERY_USERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.QUERY_USERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RADIO_SCAN_WITHOUT_LOCATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|companion\"\n    },\n    \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_ACTIVE_EMERGENCY_SESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_APP_SPECIFIC_LOCALES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_APP_SPECIFIC_LOCALES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.READ_ASSISTANT_APP_SEARCH_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_ASSISTANT_APP_SEARCH_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.READ_BASIC_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the basic telephony\\n        features of the device.\",\n      \"description_ptr\": \"permdesc_readBasicPhoneState\",\n      \"label\": \"read basic telephony status and identity \",\n      \"label_ptr\": \"permlab_readBasicPhoneState\",\n      \"name\": \"android.permission.READ_BASIC_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"This app can read all calendar events stored on your phone and share or save your calendar data.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"Read calendar events and details\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALL_LOG\": {\n      \"description\": \"This app can read your call history.\",\n      \"description_ptr\": \"permdesc_readCallLog\",\n      \"label\": \"read call log\",\n      \"label_ptr\": \"permlab_readCallLog\",\n      \"name\": \"android.permission.READ_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CARRIER_APP_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CARRIER_APP_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_CELL_BROADCASTS\": {\n      \"description\": \"Allows the app to read\\n        cell broadcast messages received by your device. Cell broadcast alerts\\n        are delivered in some locations to warn you of emergency situations.\\n        Malicious apps may interfere with the performance or operation of your\\n        device when an emergency cell broadcast is received.\",\n      \"description_ptr\": \"permdesc_readCellBroadcasts\",\n      \"label\": \"read cell broadcast messages\",\n      \"label_ptr\": \"permlab_readCellBroadcasts\",\n      \"name\": \"android.permission.READ_CELL_BROADCASTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CLIPBOARD_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.READ_COMPAT_CHANGE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_COMPAT_CHANGE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows the app to read data about your contacts stored on your phone.\\n      Apps will also have access to the accounts on your phone that have created contacts.\\n      This may include accounts created by apps you have installed.\\n      This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read your contacts\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTENT_RATING_SYSTEMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_CONTENT_RATING_SYSTEMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_DREAM_SUPPRESSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_DREAM_SUPPRESSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to read the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardRead\",\n      \"label\": \"read the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardRead\",\n      \"name\": \"android.permission.READ_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.READ_GLOBAL_APP_SEARCH_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_GLOBAL_APP_SEARCH_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.READ_HOME_APP_SEARCH_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_HOME_APP_SEARCH_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INSTALLED_SESSION_PATHS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_INSTALLED_SESSION_PATHS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.READ_INSTALL_SESSIONS\": {\n      \"description\": \"Allows an application to read install sessions. This allows it to see details about active package installations.\",\n      \"description_ptr\": \"permdesc_readInstallSessions\",\n      \"label\": \"read install sessions\",\n      \"label_ptr\": \"permlab_readInstallSessions\",\n      \"name\": \"android.permission.READ_INSTALL_SESSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.READ_LOWPAN_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_LOWPAN_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_MEDIA_AUDIO\": {\n      \"description\": \"Allows the app to read audio files from your shared storage.\",\n      \"description_ptr\": \"permdesc_readMediaAudio\",\n      \"label\": \"read audio files from shared storage\",\n      \"label_ptr\": \"permlab_readMediaAudio\",\n      \"name\": \"android.permission.READ_MEDIA_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_MEDIA_IMAGES\": {\n      \"description\": \"Allows the app to read image files from your shared storage.\",\n      \"description_ptr\": \"permdesc_readMediaImages\",\n      \"label\": \"read image files from shared storage\",\n      \"label_ptr\": \"permlab_readMediaImages\",\n      \"name\": \"android.permission.READ_MEDIA_IMAGES\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_MEDIA_VIDEO\": {\n      \"description\": \"Allows the app to read video files from your shared storage.\",\n      \"description_ptr\": \"permdesc_readMediaVideo\",\n      \"label\": \"read video files from shared storage\",\n      \"label_ptr\": \"permlab_readMediaVideo\",\n      \"name\": \"android.permission.READ_MEDIA_VIDEO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_MEDIA_VISUAL_USER_SELECTED\": {\n      \"description\": \"Allows the app to read image and video files that you select from your shared storage.\",\n      \"description_ptr\": \"permdesc_readVisualUserSelect\",\n      \"label\": \"read user selected image and video files from shared storage\",\n      \"label_ptr\": \"permlab_readVisualUserSelect\",\n      \"name\": \"android.permission.READ_MEDIA_VISUAL_USER_SELECTED\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_NEARBY_STREAMING_POLICY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NEARBY_STREAMING_POLICY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_NETWORK_USAGE_HISTORY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_NETWORK_USAGE_HISTORY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_OEM_UNLOCK_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_OEM_UNLOCK_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PEOPLE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PEOPLE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role\"\n    },\n    \"android.permission.READ_PHONE_NUMBERS\": {\n      \"description\": \"Allows the app to access the phone numbers of the device.\",\n      \"description_ptr\": \"permdesc_readPhoneNumbers\",\n      \"label\": \"read phone numbers\",\n      \"label_ptr\": \"permlab_readPhoneNumbers\",\n      \"name\": \"android.permission.READ_PHONE_NUMBERS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the app to access the phone\\n      features of the device.  This permission allows the app to determine the\\n      phone number and device IDs, whether a call is active, and the remote number\\n      connected by a call.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone status and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PRECISE_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRECISE_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_PRINT_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.READ_PRIVILEGED_PHONE_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PRIVILEGED_PHONE_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.READ_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_PROJECTION_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_PROJECTION_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_RESTRICTED_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_RESTRICTED_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|privileged\"\n    },\n    \"android.permission.READ_RUNTIME_PROFILES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_RUNTIME_PROFILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SAFETY_CENTER_STATUS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SAFETY_CENTER_STATUS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SEARCH_INDEXABLES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SEARCH_INDEXABLES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"This app can read all SMS (text) messages stored on your phone.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read your text messages (SMS or MMS)\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced. \",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYSTEM_UPDATE_INFO\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_SYSTEM_UPDATE_INFO\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_WALLPAPER_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WALLPAPER_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WIFI_CREDENTIAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WIFI_CREDENTIAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.READ_WRITE_SYNC_DISABLED_MODE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.READ_WRITE_SYNC_DISABLED_MODE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier|configurator\"\n    },\n    \"android.permission.REAL_GET_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REAL_GET_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BLUETOOTH_MAP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_BLUETOOTH_MAP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows the app to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        app to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"run at startup\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DATA_ACTIVITY_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RECEIVE_EMERGENCY_BROADCAST\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_EMERGENCY_BROADCAST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_MEDIA_RESOURCE_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows the app to receive and process MMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive text messages (MMS)\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows the app to receive and process SMS\\n      messages. This means the app could monitor or delete messages sent to your\\n      device without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive text messages (SMS)\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_STK_COMMANDS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_STK_COMMANDS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows the app to receive and process\\n     WAP messages.  This permission includes the ability to monitor or delete\\n     messages sent to you without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive text messages (WAP)\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone while the app is in use.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous|instant\"\n    },\n    \"android.permission.RECORD_BACKGROUND_AUDIO\": {\n      \"description\": \"This app can record audio using the microphone at any time.\",\n      \"description_ptr\": \"permdesc_recordBackgroundAudio\",\n      \"label\": \"record audio in the background\",\n      \"label_ptr\": \"permlab_recordBackgroundAudio\",\n      \"name\": \"android.permission.RECORD_BACKGROUND_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.RECOVERY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVERY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RECOVER_KEYSTORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RECOVER_KEYSTORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CALL_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CALL_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_CONNECTION_MANAGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_CONNECTION_MANAGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_SIM_SUBSCRIPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_SIM_SUBSCRIPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_STATS_PULL_ATOM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_STATS_PULL_ATOM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMAP_MODIFIER_KEYS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMAP_MODIFIER_KEYS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_AUDIO_PLAYBACK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_AUDIO_PLAYBACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REMOTE_DISPLAY_PROVIDER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOTE_DISPLAY_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_DRM_CERTIFICATES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_DRM_CERTIFICATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REMOVE_TASKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REMOVE_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role\"\n    },\n    \"android.permission.RENOUNCE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RENOUNCE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows the app to move tasks to the\\n      foreground and background.  The app may do this without your input.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running apps\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_COMPUTER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_COMPUTER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_GLASSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_GLASSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_NEARBY_DEVICE_STREAMING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_NEARBY_DEVICE_STREAMING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_COMPANION_PROFILE_WATCH\": {\n      \"description\": \"Allows a companion app to manage watches.\",\n      \"description_ptr\": \"permdesc_companionProfileWatch\",\n      \"label\": \"Companion Watch profile permission to manage watches\",\n      \"label_ptr\": \"permlab_companionProfileWatch\",\n      \"name\": \"android.permission.REQUEST_COMPANION_PROFILE_WATCH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_SELF_MANAGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_COMPANION_SELF_MANAGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND\": {\n      \"description\": \"Allows a companion app to start foreground services from background.\",\n      \"description_ptr\": \"permdesc_startForegroundServicesFromBackground\",\n      \"label\": \"Start foreground services from background\",\n      \"label_ptr\": \"permlab_startForegroundServicesFromBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to request deletion of packages.\",\n      \"description_ptr\": \"permdesc_requestDeletePackages\",\n      \"label\": \"request delete packages\",\n      \"label_ptr\": \"permlab_requestDeletePackages\",\n      \"name\": \"android.permission.REQUEST_DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\": {\n      \"description\": \"Allows an app to ask for permission to ignore battery optimizations for that app.\",\n      \"description_ptr\": \"permdesc_requestIgnoreBatteryOptimizations\",\n      \"label\": \"ask to ignore battery optimizations\",\n      \"label_ptr\": \"permlab_requestIgnoreBatteryOptimizations\",\n      \"name\": \"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_INCIDENT_REPORT_APPROVAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.REQUEST_INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to request installation of packages.\",\n      \"description_ptr\": \"permdesc_requestInstallPackages\",\n      \"label\": \"request install packages\",\n      \"label_ptr\": \"permlab_requestInstallPackages\",\n      \"name\": \"android.permission.REQUEST_INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.REQUEST_NETWORK_SCORES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NETWORK_SCORES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE\": {\n      \"description\": \"Allows a companion app to observe companion device presence when the devices are nearby or far-away.\",\n      \"description_ptr\": \"permdesc_observeCompanionDevicePresence\",\n      \"label\": \"Observe companion device presence\",\n      \"label_ptr\": \"permlab_observeCompanionDevicePresence\",\n      \"name\": \"android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_PASSWORD_COMPLEXITY\": {\n      \"description\": \"Allows the app to learn the screen\\n        lock complexity level (high, medium, low or none), which indicates the possible range of\\n        length and type of the screen lock. The app can also suggest to users that they update the\\n        screen lock to a certain level but users can freely ignore and navigate away. Note that the\\n        screen lock is not stored in plaintext so the app does not know the exact password.\\n    \",\n      \"description_ptr\": \"permdesc_requestPasswordComplexity\",\n      \"label\": \"request screen lock complexity\",\n      \"label_ptr\": \"permlab_requestPasswordComplexity\",\n      \"name\": \"android.permission.REQUEST_PASSWORD_COMPLEXITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.REQUEST_UNIQUE_ID_ATTESTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REQUEST_UNIQUE_ID_ATTESTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_APP_ERRORS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_APP_ERRORS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_FINGERPRINT_LOCKOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_FINGERPRINT_LOCKOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESET_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows the app to end\\n      background processes of other apps.  This may cause other apps to stop\\n      running.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"close other apps\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RESTART_WIFI_SUBSYSTEM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTART_WIFI_SUBSYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RESTORE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTORE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RESTRICTED_VR_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RESTRICTED_VR_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_CONTENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_CONTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.RETRIEVE_WINDOW_TOKEN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RETRIEVE_WINDOW_TOKEN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVIEW_ACCESSIBILITY_SERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.REVOKE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.ROTATE_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.ROTATE_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.RUN_IN_BACKGROUND\": {\n      \"description\": \"This app can run in the background. This may drain battery faster.\",\n      \"description_ptr\": \"permdesc_runInBackground\",\n      \"label\": \"run in the background\",\n      \"label_ptr\": \"permlab_runInBackground\",\n      \"name\": \"android.permission.RUN_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RUN_USER_INITIATED_JOBS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.RUN_USER_INITIATED_JOBS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SATELLITE_COMMUNICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SATELLITE_COMMUNICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"role|signature|privileged\"\n    },\n    \"android.permission.SCHEDULE_EXACT_ALARM\": {\n      \"description\": \"This app can schedule work to happen at a desired time in the future. This also means that the app can run when youu2019re not actively using the device.\",\n      \"description_ptr\": \"permdesc_schedule_exact_alarm\",\n      \"label\": \"Schedule precisely timed actions\",\n      \"label_ptr\": \"permlab_schedule_exact_alarm\",\n      \"name\": \"android.permission.SCHEDULE_EXACT_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.SCHEDULE_PRIORITIZED_ALARM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCHEDULE_PRIORITIZED_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SCORE_NETWORKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SCORE_NETWORKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_DEVICE_CUSTOMIZATION_READY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_EMBMS_INTENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_EMBMS_INTENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_RESPOND_VIA_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SEND_SAFETY_CENTER_UPDATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SAFETY_CENTER_UPDATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|privileged\"\n    },\n    \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows the app to send SMS messages.\\n     This may result in unexpected charges. Malicious apps may cost you money by\\n     sending messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send and view SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS_NO_CONFIRMATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SERIAL_PORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SERIAL_PORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_APP_SPECIFIC_LOCALECONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_APP_SPECIFIC_LOCALECONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_CLIP_SOURCE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_CLIP_SOURCE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.SET_DISPLAY_OFFSET\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_DISPLAY_OFFSET\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_GAME_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_GAME_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_HARMFUL_APP_WARNINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_HARMFUL_APP_WARNINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier\"\n    },\n    \"android.permission.SET_INITIAL_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INITIAL_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.SET_INPUT_CALIBRATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_INPUT_CALIBRATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_KEYBOARD_LAYOUT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_KEYBOARD_LAYOUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_LOW_POWER_STANDBY_PORTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_LOW_POWER_STANDBY_PORTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_MEDIA_KEY_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_MEDIA_KEY_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.SET_POINTER_SPEED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_POINTER_SPEED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|verifier\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_SCREEN_COMPATIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SCREEN_COMPATIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_SYSTEM_AUDIO_CAPTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_SYSTEM_AUDIO_CAPTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows the app to change the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.SET_UNRESTRICTED_GESTURE_EXCLUSION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_UNRESTRICTED_GESTURE_EXCLUSION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the app to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_DIM_AMOUNT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_DIM_AMOUNT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the app to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"adjust your wallpaper size\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHOW_KEYGUARD_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHOW_KEYGUARD_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.SIGNAL_REBOOT_READINESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SIGNAL_REBOOT_READINESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SMS_FINANCIAL_TRANSACTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SMS_FINANCIAL_TRANSACTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SOUNDTRIGGER_DELEGATE_IDENTITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.STAGE_HEALTH_CONNECT_REMOTE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STAGE_HEALTH_CONNECT_REMOTE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|knownSigner\"\n    },\n    \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITIES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier|role\"\n    },\n    \"android.permission.START_ACTIVITY_AS_CALLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ACTIVITY_AS_CALLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_ANY_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_ANY_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.START_CROSS_PROFILE_ACTIVITIES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_CROSS_PROFILE_ACTIVITIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged|oem|verifier|role\"\n    },\n    \"android.permission.START_REVIEW_PERMISSION_DECISIONS\": {\n      \"description\": \"Allows the holder to start screen to review permission decisions. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_startReviewPermissionDecisions\",\n      \"label\": \"start view permission decisions\",\n      \"label_ptr\": \"permlab_startReviewPermissionDecisions\",\n      \"name\": \"android.permission.START_REVIEW_PERMISSION_DECISIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.START_TASKS_FROM_RECENTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.START_TASKS_FROM_RECENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.START_VIEW_APP_FEATURES\": {\n      \"description\": \"Allows the holder to start viewing the features info for an app.\",\n      \"description_ptr\": \"permdesc_startViewAppFeatures\",\n      \"label\": \"start view app features\",\n      \"label_ptr\": \"permlab_startViewAppFeatures\",\n      \"name\": \"android.permission.START_VIEW_APP_FEATURES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.START_VIEW_PERMISSION_USAGE\": {\n      \"description\": \"Allows the holder to start the permission usage for an app. Should never be needed for normal apps.\",\n      \"description_ptr\": \"permdesc_startViewPermissionUsage\",\n      \"label\": \"start view permission usage\",\n      \"label_ptr\": \"permlab_startViewPermissionUsage\",\n      \"name\": \"android.permission.START_VIEW_PERMISSION_USAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer|module\"\n    },\n    \"android.permission.STATSCOMPANION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATSCOMPANION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|recents\"\n    },\n    \"android.permission.STORAGE_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.STORAGE_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_EXTERNAL_TIME\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_EXTERNAL_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_MANUAL_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUPPRESS_CLIPBOARD_ACCESS_NOTIFICATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUPPRESS_CLIPBOARD_ACCESS_NOTIFICATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUSPEND_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SUSPEND_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"This app can appear on top of other apps\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|appop|installer|pre23|development\"\n    },\n    \"android.permission.SYSTEM_APPLICATION_OVERLAY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SYSTEM_APPLICATION_OVERLAY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents|role|installer\"\n    },\n    \"android.permission.SYSTEM_CAMERA\": {\n      \"description\": \"This privileged or system app can take pictures and record videos using a system camera at any time. Requires the android.permission.CAMERA permission to be held by the app as well\",\n      \"description_ptr\": \"permdesc_systemCamera\",\n      \"label\": \"Allow an application or service access to system cameras to take pictures and videos\",\n      \"label_ptr\": \"permlab_systemCamera\",\n      \"name\": \"android.permission.SYSTEM_CAMERA\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"system|signature|role\"\n    },\n    \"android.permission.TABLET_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TABLET_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEMPORARY_ENABLE_ACCESSIBILITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BIOMETRIC\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BIOMETRIC\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_BLACKLISTED_PASSWORD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_BLACKLISTED_PASSWORD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_INPUT_METHOD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TEST_MANAGE_ROLLBACKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TEST_MANAGE_ROLLBACKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TETHER_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TETHER_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.TIS_EXTENSION_INTERFACE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TIS_EXTENSION_INTERFACE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TOGGLE_AUTOMOTIVE_PROJECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"internal|role\"\n    },\n    \"android.permission.TRANSMIT_IR\": {\n      \"description\": \"Allows the app to use the phone's infrared transmitter.\",\n      \"description_ptr\": \"permdesc_transmitIr\",\n      \"label\": \"transmit infrared\",\n      \"label_ptr\": \"permlab_transmitIr\",\n      \"name\": \"android.permission.TRANSMIT_IR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.TRIGGER_LOST_MODE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_LOST_MODE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.TRIGGER_SHELL_BUGREPORT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_SHELL_BUGREPORT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRIGGER_SHELL_PROFCOLLECT_UPLOAD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TRUST_LISTENER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TRUST_LISTENER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.TUNER_RESOURCE_ACCESS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TUNER_RESOURCE_ACCESS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TURN_SCREEN_ON\": {\n      \"description\": \"Allows the app to turn on the screen.\",\n      \"description_ptr\": \"permdesc_turnScreenOn\",\n      \"label\": \"turn on the screen\",\n      \"label_ptr\": \"permlab_turnScreenOn\",\n      \"name\": \"android.permission.TURN_SCREEN_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|appop\"\n    },\n    \"android.permission.TV_INPUT_HARDWARE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_INPUT_HARDWARE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|vendorPrivileged\"\n    },\n    \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.TV_VIRTUAL_REMOTE_CONTROLLER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_SHORTCUTS_API_CALLS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.UNLIMITED_TOASTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UNLIMITED_TOASTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_APP_OPS_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_APP_OPS_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|installer|role\"\n    },\n    \"android.permission.UPDATE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.UPDATE_FONTS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_FONTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPDATE_LOCK_TASK_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_LOCK_TASK_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup\"\n    },\n    \"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION\": {\n      \"description\": \"Allows the holder to update the app it previously installed without user action\",\n      \"description_ptr\": \"permdesc_updatePackagesWithoutUserAction\",\n      \"label\": \"update app without user action\",\n      \"label_ptr\": \"permlab_updatePackagesWithoutUserAction\",\n      \"name\": \"android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.UPDATE_TIME_ZONE_RULES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPDATE_TIME_ZONE_RULES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UPGRADE_RUNTIME_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USER_ACTIVITY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USER_ACTIVITY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_ATTESTATION_VERIFICATION_SERVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_ATTESTATION_VERIFICATION_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_BIOMETRIC\": {\n      \"description\": \"Allows the app to use biometric hardware for authentication\",\n      \"description_ptr\": \"permdesc_useBiometric\",\n      \"label\": \"use biometric hardware\",\n      \"label_ptr\": \"permlab_useBiometric\",\n      \"name\": \"android.permission.USE_BIOMETRIC\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_BIOMETRIC_INTERNAL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_BIOMETRIC_INTERNAL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_COLORIZED_NOTIFICATIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_COLORIZED_NOTIFICATIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|setup|role\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_DATA_IN_BACKGROUND\": {\n      \"description\": \"This app can use data in the background. This may increase data usage.\",\n      \"description_ptr\": \"permdesc_useDataInBackground\",\n      \"label\": \"use data in the background\",\n      \"label_ptr\": \"permlab_useDataInBackground\",\n      \"name\": \"android.permission.USE_DATA_IN_BACKGROUND\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_EXACT_ALARM\": {\n      \"description\": \"This app can schedule actions like alarms and reminders to notify you at a desired time in the future.\",\n      \"description_ptr\": \"permdesc_use_exact_alarm\",\n      \"label\": \"Schedule alarms or event reminders\",\n      \"label_ptr\": \"permlab_use_exact_alarm\",\n      \"name\": \"android.permission.USE_EXACT_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FINGERPRINT\": {\n      \"description\": \"Allows the app to use fingerprint hardware for authentication\",\n      \"description_ptr\": \"permdesc_useFingerprint\",\n      \"label\": \"use fingerprint hardware\",\n      \"label_ptr\": \"permlab_useFingerprint\",\n      \"name\": \"android.permission.USE_FINGERPRINT\",\n      \"permissionGroup\": \"android.permission-group.SENSORS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.USE_FULL_SCREEN_INTENT\": {\n      \"description\": \"Allows the app to display notifications as full screen activities on a locked device\",\n      \"description_ptr\": \"permdesc_fullScreenIntent\",\n      \"label\": \"display notifications as full screen activities on a locked device\",\n      \"label_ptr\": \"permlab_fullScreenIntent\",\n      \"name\": \"android.permission.USE_FULL_SCREEN_INTENT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|appop\"\n    },\n    \"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|appop\"\n    },\n    \"android.permission.USE_RESERVED_DISK\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.USE_RESERVED_DISK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows the app to make and receive SIP calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive SIP calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UWB_PRIVILEGED\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.UWB_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.UWB_RANGING\": {\n      \"description\": \"Allow the app to determine relative position between nearby Ultra-Wideband devices\",\n      \"description_ptr\": \"permdesc_uwb_ranging\",\n      \"label\": \"determine relative position between nearby Ultra-Wideband devices\",\n      \"label_ptr\": \"permlab_uwb_ranging\",\n      \"name\": \"android.permission.UWB_RANGING\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VERIFY_ATTESTATION\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VERIFY_ATTESTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the app to control the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibration\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.VIBRATE_ALWAYS_ON\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIBRATE_ALWAYS_ON\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.VIEW_INSTANT_APPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIEW_INSTANT_APPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled\"\n    },\n    \"android.permission.VIRTUAL_INPUT_DEVICE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.VIRTUAL_INPUT_DEVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WAKEUP_SURFACE_FLINGER\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WAKEUP_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|recents\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows the app to prevent the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal|instant\"\n    },\n    \"android.permission.WATCH_APPOPS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WATCH_APPOPS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WHITELIST_RESTRICTED_PERMISSIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|installer\"\n    },\n    \"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_SET_DEVICE_MOBILITY_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|role\"\n    },\n    \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_ALLOWLISTED_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_ALLOWLISTED_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier|configurator\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_BLOCKED_NUMBERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_BLOCKED_NUMBERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests without owners' knowledge\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALL_LOG\": {\n      \"description\": \"Allows the app to modify your phone's call log, including data about incoming and outgoing calls.\\n        Malicious apps may use this to erase or modify your call log.\",\n      \"description_ptr\": \"permdesc_writeCallLog\",\n      \"label\": \"write call log\",\n      \"label_ptr\": \"permlab_writeCallLog\",\n      \"name\": \"android.permission.WRITE_CALL_LOG\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows the app to modify the data about your contacts stored on your phone.\\n      This permission allows apps to delete contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"modify your contacts\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_DEVICE_CONFIG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DEVICE_CONFIG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|verifier|configurator\"\n    },\n    \"android.permission.WRITE_DREAM_STATE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_DREAM_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows the app to write the contents of your shared storage.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify or delete the contents of your shared storage\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_MEDIA_STORAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_MEDIA_STORAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_OBB\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_OBB\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_PROFILE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_PROFILE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|development|role|installer\"\n    },\n    \"android.permission.WRITE_SECURITY_LOG\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SECURITY_LOG\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows the app to modify the\\n        system's settings data. Malicious apps may corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|preinstalled|appop|pre23|role\"\n    },\n    \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SETTINGS_HOMEPAGE_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SOCIAL_STREAM\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_SOCIAL_STREAM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an app to modify the sync settings for an account.  For example, this can be used to enable sync of the People app with an account.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"toggle sync on and off\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the app to set an alarm in\\n        an installed alarm clock app. Some alarm clock apps may\\n        not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set an alarm\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.INSTALL_SHORTCUT\": {\n      \"description\": \"Allows an application to add\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_install_shortcut\",\n      \"label\": \"install shortcuts\",\n      \"label_ptr\": \"permlab_install_shortcut\",\n      \"name\": \"com.android.launcher.permission.INSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.launcher.permission.UNINSTALL_SHORTCUT\": {\n      \"description\": \"Allows the application to remove\\n        Homescreen shortcuts without user intervention.\",\n      \"description_ptr\": \"permdesc_uninstall_shortcut\",\n      \"label\": \"uninstall shortcuts\",\n      \"label_ptr\": \"permlab_uninstall_shortcut\",\n      \"name\": \"com.android.launcher.permission.UNINSTALL_SHORTCUT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.permission.INSTALL_EXISTING_PACKAGES\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.INSTALL_EXISTING_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"com.android.permission.USE_INSTALLER_V2\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_INSTALLER_V2\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged\"\n    },\n    \"com.android.permission.USE_SYSTEM_DATA_LOADERS\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.permission.USE_SYSTEM_DATA_LOADERS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"com.android.voicemail.permission.ADD_VOICEMAIL\": {\n      \"description\": \"Allows the app to add messages\\n      to your voicemail inbox.\",\n      \"description_ptr\": \"permdesc_addVoicemail\",\n      \"label\": \"add voicemail\",\n      \"label_ptr\": \"permlab_addVoicemail\",\n      \"name\": \"com.android.voicemail.permission.ADD_VOICEMAIL\",\n      \"permissionGroup\": \"android.permission-group.UNDEFINED\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.voicemail.permission.READ_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.READ_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    },\n    \"com.android.voicemail.permission.WRITE_VOICEMAIL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"com.android.voicemail.permission.WRITE_VOICEMAIL\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature|privileged|role\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_4.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available Google accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your Google accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all\\n        of the calendar events stored on your phone. Malicious applications\\n        can use this to send your calendar events to other people.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar data\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to use\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, but they should\\n        not contain any personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read system log files\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_OWNER_DATA\": {\n      \"description\": \"Allows an application read the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to read phone owner data.\",\n      \"description_ptr\": \"permdesc_readOwnerData\",\n      \"label\": \"read owner data\",\n      \"label_ptr\": \"permlab_readOwnerData\",\n      \"name\": \"android.permission.READ_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly restart other applications.\",\n      \"description_ptr\": \"permdesc_restartPackages\",\n      \"label\": \"restart other applications\",\n      \"label_ptr\": \"permlab_restartPackages\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        phone usage.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen of the phone.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to modify the APN\\n        settings, such as Proxy and Port of any APN.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"write Access Point Name settings\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to modify the\\n        calendar events stored on your phone. Malicious\\n        applications can use this to erase or modify your calendar data.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"write calendar data\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_OWNER_DATA\": {\n      \"description\": \"Allows an application to modify the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to erase or modify owner data.\",\n      \"description_ptr\": \"permdesc_writeOwnerData\",\n      \"label\": \"write owner data\",\n      \"label_ptr\": \"permlab_writeOwnerData\",\n      \"name\": \"android.permission.WRITE_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_5.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BACKUP_DATA\": {\n      \"description\": \"Allows the application to participate in the system's backup and restore mechanism.\",\n      \"description_ptr\": \"permdesc_backup_data\",\n      \"label\": \"back up and restore the application's data\",\n      \"label_ptr\": \"permlab_backup_data\",\n      \"name\": \"android.permission.BACKUP_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all\\n        of the calendar events stored on your phone. Malicious applications\\n        can use this to send your calendar events to other people.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar data\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, but they should\\n        not contain any personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read system log files\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_OWNER_DATA\": {\n      \"description\": \"Allows an application read the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to read phone owner data.\",\n      \"description_ptr\": \"permdesc_readOwnerData\",\n      \"label\": \"read owner data\",\n      \"label_ptr\": \"permlab_readOwnerData\",\n      \"name\": \"android.permission.READ_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly restart other applications.\",\n      \"description_ptr\": \"permdesc_restartPackages\",\n      \"label\": \"restart other applications\",\n      \"label_ptr\": \"permlab_restartPackages\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        phone usage.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen of the phone.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to modify the APN\\n        settings, such as Proxy and Port of any APN.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"write Access Point Name settings\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to modify the\\n        calendar events stored on your phone. Malicious\\n        applications can use this to erase or modify your calendar data.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"write calendar data\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_OWNER_DATA\": {\n      \"description\": \"Allows an application to modify the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to erase or modify owner data.\",\n      \"description_ptr\": \"permdesc_writeOwnerData\",\n      \"label\": \"write owner data\",\n      \"label_ptr\": \"permlab_writeOwnerData\",\n      \"name\": \"android.permission.WRITE_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_6.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BACKUP_DATA\": {\n      \"description\": \"Allows the application to participate in the system's backup and restore mechanism.\",\n      \"description_ptr\": \"permdesc_backup_data\",\n      \"label\": \"back up and restore the application's data\",\n      \"label_ptr\": \"permlab_backup_data\",\n      \"name\": \"android.permission.BACKUP_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all\\n        of the calendar events stored on your phone. Malicious applications\\n        can use this to send your calendar events to other people.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar data\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, but they should\\n        not contain any personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read system log files\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_OWNER_DATA\": {\n      \"description\": \"Allows an application read the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to read phone owner data.\",\n      \"description_ptr\": \"permdesc_readOwnerData\",\n      \"label\": \"read owner data\",\n      \"label_ptr\": \"permlab_readOwnerData\",\n      \"name\": \"android.permission.READ_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly restart other applications.\",\n      \"description_ptr\": \"permdesc_restartPackages\",\n      \"label\": \"restart other applications\",\n      \"label_ptr\": \"permlab_restartPackages\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        phone usage.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen of the phone.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to modify the APN\\n        settings, such as Proxy and Port of any APN.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"write Access Point Name settings\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to modify the\\n        calendar events stored on your phone. Malicious\\n        applications can use this to erase or modify your calendar data.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"write calendar data\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_OWNER_DATA\": {\n      \"description\": \"Allows an application to modify the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to erase or modify owner data.\",\n      \"description_ptr\": \"permdesc_writeOwnerData\",\n      \"label\": \"write owner data\",\n      \"label_ptr\": \"permlab_writeOwnerData\",\n      \"name\": \"android.permission.WRITE_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_7.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BACKUP_DATA\": {\n      \"description\": \"Allows the application to participate in the system's backup and restore mechanism.\",\n      \"description_ptr\": \"permdesc_backup_data\",\n      \"label\": \"back up and restore the application's data\",\n      \"label_ptr\": \"permlab_backup_data\",\n      \"name\": \"android.permission.BACKUP_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all\\n        of the calendar events stored on your phone. Malicious applications\\n        can use this to send your calendar events to other people.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar data\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, but they should\\n        not contain any personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read system log files\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_OWNER_DATA\": {\n      \"description\": \"Allows an application read the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to read phone owner data.\",\n      \"description_ptr\": \"permdesc_readOwnerData\",\n      \"label\": \"read owner data\",\n      \"label_ptr\": \"permlab_readOwnerData\",\n      \"name\": \"android.permission.READ_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly restart other applications.\",\n      \"description_ptr\": \"permdesc_restartPackages\",\n      \"label\": \"restart other applications\",\n      \"label_ptr\": \"permlab_restartPackages\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        phone usage.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen of the phone.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to modify the APN\\n        settings, such as Proxy and Port of any APN.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"write Access Point Name settings\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to modify the\\n        calendar events stored on your phone. Malicious\\n        applications can use this to erase or modify your calendar data.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"write calendar data\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.WRITE_OWNER_DATA\": {\n      \"description\": \"Allows an application to modify the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to erase or modify owner data.\",\n      \"description_ptr\": \"permdesc_writeOwnerData\",\n      \"label\": \"write owner data\",\n      \"label_ptr\": \"permlab_writeOwnerData\",\n      \"name\": \"android.permission.WRITE_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_8.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows an application to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the application to get information on secure storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on secure storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the application to create secure storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create secure storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the application to destroy secure storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy secure storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the application to mount / unmount secure storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount / unmount secure storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the application to rename secure storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename secure storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly stop other applications.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other applications\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows an application to move application resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"Move application resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all\\n        of the calendar events stored on your phone. Malicious applications\\n        can use this to send your calendar events to other people.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, but they should\\n        not contain any personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read system log files\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_OWNER_DATA\": {\n      \"description\": \"Allows an application read the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to read phone owner data.\",\n      \"description_ptr\": \"permdesc_readOwnerData\",\n      \"label\": \"read owner data\",\n      \"label_ptr\": \"permlab_readOwnerData\",\n      \"name\": \"android.permission.READ_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        phone usage.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows an application to change\\n        the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen of the phone.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to modify the APN\\n        settings, such as Proxy and Port of any APN.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"write Access Point Name settings\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to add or change the \\n        events on your calendar, which may send email to guests. Malicious applications can use this \\n        to erase or modify your calendar events or to send email to guests.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_OWNER_DATA\": {\n      \"description\": \"Allows an application to modify the\\n        phone owner data stored on your phone. Malicious\\n        applications can use this to erase or modify owner data.\",\n      \"description_ptr\": \"permdesc_writeOwnerData\",\n      \"label\": \"write owner data\",\n      \"label_ptr\": \"permlab_writeOwnerData\",\n      \"name\": \"android.permission.WRITE_OWNER_DATA\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/aosp_permissions/permissions_9.json",
    "content": "{\n  \"groups\": {\n    \"android.permission-group.ACCOUNTS\": {\n      \"description\": \"Access the available accounts.\",\n      \"description_ptr\": \"permgroupdesc_accounts\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your accounts\",\n      \"label_ptr\": \"permgrouplab_accounts\",\n      \"name\": \"android.permission-group.ACCOUNTS\"\n    },\n    \"android.permission-group.COST_MONEY\": {\n      \"description\": \"Allow applications to do things\\n        that can cost you money.\",\n      \"description_ptr\": \"permgroupdesc_costMoney\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Services that cost you money\",\n      \"label_ptr\": \"permgrouplab_costMoney\",\n      \"name\": \"android.permission-group.COST_MONEY\"\n    },\n    \"android.permission-group.DEVELOPMENT_TOOLS\": {\n      \"description\": \"Features only needed for\\n        application developers.\",\n      \"description_ptr\": \"permgroupdesc_developmentTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Development tools\",\n      \"label_ptr\": \"permgrouplab_developmentTools\",\n      \"name\": \"android.permission-group.DEVELOPMENT_TOOLS\"\n    },\n    \"android.permission-group.HARDWARE_CONTROLS\": {\n      \"description\": \"Direct access to hardware on\\n        the handset.\",\n      \"description_ptr\": \"permgroupdesc_hardwareControls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Hardware controls\",\n      \"label_ptr\": \"permgrouplab_hardwareControls\",\n      \"name\": \"android.permission-group.HARDWARE_CONTROLS\"\n    },\n    \"android.permission-group.LOCATION\": {\n      \"description\": \"Monitor your physical location\",\n      \"description_ptr\": \"permgroupdesc_location\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your location\",\n      \"label_ptr\": \"permgrouplab_location\",\n      \"name\": \"android.permission-group.LOCATION\"\n    },\n    \"android.permission-group.MESSAGES\": {\n      \"description\": \"Read and write your SMS,\\n        e-mail, and other messages.\",\n      \"description_ptr\": \"permgroupdesc_messages\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your messages\",\n      \"label_ptr\": \"permgrouplab_messages\",\n      \"name\": \"android.permission-group.MESSAGES\"\n    },\n    \"android.permission-group.NETWORK\": {\n      \"description\": \"Allow applications to access\\n        various network features.\",\n      \"description_ptr\": \"permgroupdesc_network\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Network communication\",\n      \"label_ptr\": \"permgrouplab_network\",\n      \"name\": \"android.permission-group.NETWORK\"\n    },\n    \"android.permission-group.PERSONAL_INFO\": {\n      \"description\": \"Direct access to your contacts\\n        and calendar stored on the phone.\",\n      \"description_ptr\": \"permgroupdesc_personalInfo\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Your personal information\",\n      \"label_ptr\": \"permgrouplab_personalInfo\",\n      \"name\": \"android.permission-group.PERSONAL_INFO\"\n    },\n    \"android.permission-group.PHONE_CALLS\": {\n      \"description\": \"Monitor, record, and process\\n        phone calls.\",\n      \"description_ptr\": \"permgroupdesc_phoneCalls\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Phone calls\",\n      \"label_ptr\": \"permgrouplab_phoneCalls\",\n      \"name\": \"android.permission-group.PHONE_CALLS\"\n    },\n    \"android.permission-group.STORAGE\": {\n      \"description\": \"Access the SD card.\",\n      \"description_ptr\": \"permgroupdesc_storage\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"Storage\",\n      \"label_ptr\": \"permgrouplab_storage\",\n      \"name\": \"android.permission-group.STORAGE\"\n    },\n    \"android.permission-group.SYSTEM_TOOLS\": {\n      \"description\": \"Lower-level access and control\\n        of the system.\",\n      \"description_ptr\": \"permgroupdesc_systemTools\",\n      \"icon\": \"\",\n      \"icon_ptr\": \"\",\n      \"label\": \"System tools\",\n      \"label_ptr\": \"permgrouplab_systemTools\",\n      \"name\": \"android.permission-group.SYSTEM_TOOLS\"\n    }\n  },\n  \"permissions\": {\n    \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_CACHE_FILESYSTEM\": {\n      \"description\": \"Allows an application to read and write the cache filesystem.\",\n      \"description_ptr\": \"permdesc_cache_filesystem\",\n      \"label\": \"access the cache filesystem\",\n      \"label_ptr\": \"permlab_cache_filesystem\",\n      \"name\": \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_CHECKIN_PROPERTIES\": {\n      \"description\": \"Allows read/write access to\\n        properties uploaded by the checkin service.  Not for use by normal\\n        applications.\",\n      \"description_ptr\": \"permdesc_checkinProperties\",\n      \"label\": \"access checkin properties\",\n      \"label_ptr\": \"permlab_checkinProperties\",\n      \"name\": \"android.permission.ACCESS_CHECKIN_PROPERTIES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_COARSE_LOCATION\": {\n      \"description\": \"Access coarse location sources such as the cellular\\n        network database to determine an approximate phone location, where available. Malicious\\n        applications can use this to determine approximately where you are.\",\n      \"description_ptr\": \"permdesc_accessCoarseLocation\",\n      \"label\": \"coarse (network-based) location\",\n      \"label_ptr\": \"permlab_accessCoarseLocation\",\n      \"name\": \"android.permission.ACCESS_COARSE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_FINE_LOCATION\": {\n      \"description\": \"Access fine location sources such as the\\n        Global Positioning System on the phone, where available.\\n        Malicious applications can use this to determine where you are, and may\\n        consume additional battery power.\",\n      \"description_ptr\": \"permdesc_accessFineLocation\",\n      \"label\": \"fine (GPS) location\",\n      \"label_ptr\": \"permlab_accessFineLocation\",\n      \"name\": \"android.permission.ACCESS_FINE_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\": {\n      \"description\": \"Access extra location provider commands.\\n        Malicious applications could use this to interfere with the operation of the GPS\\n        or other location sources.\",\n      \"description_ptr\": \"permdesc_accessLocationExtraCommands\",\n      \"label\": \"access extra location provider commands\",\n      \"label_ptr\": \"permlab_accessLocationExtraCommands\",\n      \"name\": \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_MOCK_LOCATION\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers.\",\n      \"description_ptr\": \"permdesc_accessMockLocation\",\n      \"label\": \"mock location sources for testing\",\n      \"label_ptr\": \"permlab_accessMockLocation\",\n      \"name\": \"android.permission.ACCESS_MOCK_LOCATION\",\n      \"permissionGroup\": \"android.permission-group.LOCATION\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.ACCESS_NETWORK_STATE\": {\n      \"description\": \"Allows an application to view\\n      the state of all networks.\",\n      \"description_ptr\": \"permdesc_accessNetworkState\",\n      \"label\": \"view network state\",\n      \"label_ptr\": \"permlab_accessNetworkState\",\n      \"name\": \"android.permission.ACCESS_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCESS_SURFACE_FLINGER\": {\n      \"description\": \"Allows application to use\\n        SurfaceFlinger low-level features.\",\n      \"description_ptr\": \"permdesc_accessSurfaceFlinger\",\n      \"label\": \"access SurfaceFlinger\",\n      \"label_ptr\": \"permlab_accessSurfaceFlinger\",\n      \"name\": \"android.permission.ACCESS_SURFACE_FLINGER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ACCESS_USB\": {\n      \"description\": \"Allows the application to access USB devices.\",\n      \"description_ptr\": \"permdesc_accessUsb\",\n      \"label\": \"access USB devices\",\n      \"label_ptr\": \"permlab_accessUsb\",\n      \"name\": \"android.permission.ACCESS_USB\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.ACCESS_WIFI_STATE\": {\n      \"description\": \"Allows an application to view\\n      the information about the state of Wi-Fi.\",\n      \"description_ptr\": \"permdesc_accessWifiState\",\n      \"label\": \"view Wi-Fi state\",\n      \"label_ptr\": \"permlab_accessWifiState\",\n      \"name\": \"android.permission.ACCESS_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.ACCOUNT_MANAGER\": {\n      \"description\": \"Allows an\\n    application to make calls to AccountAuthenticators\",\n      \"description_ptr\": \"permdesc_accountManagerService\",\n      \"label\": \"act as the AccountManagerService\",\n      \"label_ptr\": \"permlab_accountManagerService\",\n      \"name\": \"android.permission.ACCOUNT_MANAGER\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_ACCESS\": {\n      \"description\": \"Allows the application to get information on internal storage.\",\n      \"description_ptr\": \"permdesc_asec_access\",\n      \"label\": \"get information on internal storage\",\n      \"label_ptr\": \"permlab_asec_access\",\n      \"name\": \"android.permission.ASEC_ACCESS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_CREATE\": {\n      \"description\": \"Allows the application to create internal storage.\",\n      \"description_ptr\": \"permdesc_asec_create\",\n      \"label\": \"create internal storage\",\n      \"label_ptr\": \"permlab_asec_create\",\n      \"name\": \"android.permission.ASEC_CREATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_DESTROY\": {\n      \"description\": \"Allows the application to destroy internal storage.\",\n      \"description_ptr\": \"permdesc_asec_destroy\",\n      \"label\": \"destroy internal storage\",\n      \"label_ptr\": \"permlab_asec_destroy\",\n      \"name\": \"android.permission.ASEC_DESTROY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_MOUNT_UNMOUNT\": {\n      \"description\": \"Allows the application to mount / unmount internal storage.\",\n      \"description_ptr\": \"permdesc_asec_mount_unmount\",\n      \"label\": \"mount / unmount internal storage\",\n      \"label_ptr\": \"permlab_asec_mount_unmount\",\n      \"name\": \"android.permission.ASEC_MOUNT_UNMOUNT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.ASEC_RENAME\": {\n      \"description\": \"Allows the application to rename internal storage.\",\n      \"description_ptr\": \"permdesc_asec_rename\",\n      \"label\": \"rename internal storage\",\n      \"label_ptr\": \"permlab_asec_rename\",\n      \"name\": \"android.permission.ASEC_RENAME\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.AUTHENTICATE_ACCOUNTS\": {\n      \"description\": \"Allows an application\\n    to use the account authenticator capabilities of the\\n    AccountManager, including creating accounts and getting and\\n    setting their passwords.\",\n      \"description_ptr\": \"permdesc_authenticateAccounts\",\n      \"label\": \"act as an account authenticator\",\n      \"label_ptr\": \"permlab_authenticateAccounts\",\n      \"name\": \"android.permission.AUTHENTICATE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BACKUP\": {\n      \"description\": \"Allows the application to control the system's backup and restore mechanism.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_backup\",\n      \"label\": \"control system backup and restore\",\n      \"label_ptr\": \"permlab_backup\",\n      \"name\": \"android.permission.BACKUP\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BATTERY_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.BATTERY_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BIND_APPWIDGET\": {\n      \"description\": \"Allows the application to tell the system\\n        which widgets can be used by which application.  With this permission,\\n        applications can give access to personal data to other applications.\\n        Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_bindGadget\",\n      \"label\": \"choose widgets\",\n      \"label_ptr\": \"permlab_bindGadget\",\n      \"name\": \"android.permission.BIND_APPWIDGET\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BIND_DEVICE_ADMIN\": {\n      \"description\": \"Allows the holder to send intents to\\n        a device administrator. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindDeviceAdmin\",\n      \"label\": \"interact with a device admin\",\n      \"label_ptr\": \"permlab_bindDeviceAdmin\",\n      \"name\": \"android.permission.BIND_DEVICE_ADMIN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_INPUT_METHOD\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of an input method. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindInputMethod\",\n      \"label\": \"bind to an input method\",\n      \"label_ptr\": \"permlab_bindInputMethod\",\n      \"name\": \"android.permission.BIND_INPUT_METHOD\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BIND_WALLPAPER\": {\n      \"description\": \"Allows the holder to bind to the top-level\\n        interface of a wallpaper. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_bindWallpaper\",\n      \"label\": \"bind to a wallpaper\",\n      \"label_ptr\": \"permlab_bindWallpaper\",\n      \"name\": \"android.permission.BIND_WALLPAPER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.BLUETOOTH\": {\n      \"description\": \"Allows an application to view\\n      configuration of the local Bluetooth phone, and to make and accept\\n      connections with paired devices.\",\n      \"description_ptr\": \"permdesc_bluetooth\",\n      \"label\": \"create Bluetooth connections\",\n      \"label_ptr\": \"permlab_bluetooth\",\n      \"name\": \"android.permission.BLUETOOTH\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BLUETOOTH_ADMIN\": {\n      \"description\": \"Allows an application to configure\\n      the local Bluetooth phone, and to discover and pair with remote\\n      devices.\",\n      \"description_ptr\": \"permdesc_bluetoothAdmin\",\n      \"label\": \"bluetooth administration\",\n      \"label_ptr\": \"permlab_bluetoothAdmin\",\n      \"name\": \"android.permission.BLUETOOTH_ADMIN\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.BRICK\": {\n      \"description\": \"Allows the application to\\n        disable the entire phone permanently. This is very dangerous.\",\n      \"description_ptr\": \"permdesc_brick\",\n      \"label\": \"permanently disable phone\",\n      \"label_ptr\": \"permlab_brick\",\n      \"name\": \"android.permission.BRICK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_PACKAGE_REMOVED\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an application package has been removed.\\n        Malicious applications may use this to kill any other running\\n        application.\",\n      \"description_ptr\": \"permdesc_broadcastPackageRemoved\",\n      \"label\": \"send package removed broadcast\",\n      \"label_ptr\": \"permlab_broadcastPackageRemoved\",\n      \"name\": \"android.permission.BROADCAST_PACKAGE_REMOVED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_SMS\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that an SMS message has been received.\\n        Malicious applications may use this to forge incoming SMS messages.\",\n      \"description_ptr\": \"permdesc_broadcastSmsReceived\",\n      \"label\": \"send SMS-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastSmsReceived\",\n      \"name\": \"android.permission.BROADCAST_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.BROADCAST_STICKY\": {\n      \"description\": \"Allows an application to send\\n        sticky broadcasts, which remain after the broadcast ends.\\n        Malicious applications can make the phone slow or unstable by causing it\\n        to use too much memory.\",\n      \"description_ptr\": \"permdesc_broadcastSticky\",\n      \"label\": \"send sticky broadcast\",\n      \"label_ptr\": \"permlab_broadcastSticky\",\n      \"name\": \"android.permission.BROADCAST_STICKY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.BROADCAST_WAP_PUSH\": {\n      \"description\": \"Allows an application to\\n        broadcast a notification that a WAP PUSH message has been received.\\n        Malicious applications may use this to forge MMS message receipt or to\\n        silently replace the content of any web page with malicious variants.\",\n      \"description_ptr\": \"permdesc_broadcastWapPush\",\n      \"label\": \"send WAP-PUSH-received broadcast\",\n      \"label_ptr\": \"permlab_broadcastWapPush\",\n      \"name\": \"android.permission.BROADCAST_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CALL_PHONE\": {\n      \"description\": \"Allows the application to call\\n        phone numbers without your intervention. Malicious applications may\\n        cause unexpected calls on your phone bill. Note that this does not\\n        allow the application to call emergency numbers.\",\n      \"description_ptr\": \"permdesc_callPhone\",\n      \"label\": \"directly call phone numbers\",\n      \"label_ptr\": \"permlab_callPhone\",\n      \"name\": \"android.permission.CALL_PHONE\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CALL_PRIVILEGED\": {\n      \"description\": \"Allows the application to call\\n        any phone number, including emergency numbers, without your intervention.\\n        Malicious applications may place unnecessary and illegal calls to emergency\\n        services.\",\n      \"description_ptr\": \"permdesc_callPrivileged\",\n      \"label\": \"directly call any phone numbers\",\n      \"label_ptr\": \"permlab_callPrivileged\",\n      \"name\": \"android.permission.CALL_PRIVILEGED\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.CAMERA\": {\n      \"description\": \"Allows application to take pictures and videos\\n        with the camera. This allows the application at any time to collect\\n        images the camera is seeing.\",\n      \"description_ptr\": \"permdesc_camera\",\n      \"label\": \"take pictures and videos\",\n      \"label_ptr\": \"permlab_camera\",\n      \"name\": \"android.permission.CAMERA\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\": {\n      \"description\": \"Allows an application to change\\n      the background data usage setting.\",\n      \"description_ptr\": \"permdesc_changeBackgroundDataSetting\",\n      \"label\": \"change background data usage setting\",\n      \"label_ptr\": \"permlab_changeBackgroundDataSetting\",\n      \"name\": \"android.permission.CHANGE_BACKGROUND_DATA_SETTING\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\": {\n      \"description\": \"Allows an application to change whether a\\n        component of another application is enabled or not. Malicious applications can use this\\n        to disable important phone capabilities. Care must be used with permission, as it is\\n        possible to get application components into an unusable, inconsistent, or unstable state.\\n    \",\n      \"description_ptr\": \"permdesc_changeComponentState\",\n      \"label\": \"enable or disable application components\",\n      \"label_ptr\": \"permlab_changeComponentState\",\n      \"name\": \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CHANGE_CONFIGURATION\": {\n      \"description\": \"Allows an application to\\n        change the current configuration, such as the locale or overall font\\n        size.\",\n      \"description_ptr\": \"permdesc_changeConfiguration\",\n      \"label\": \"change your UI settings\",\n      \"label_ptr\": \"permlab_changeConfiguration\",\n      \"name\": \"android.permission.CHANGE_CONFIGURATION\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_NETWORK_STATE\": {\n      \"description\": \"Allows an application to change\\n      the state of network connectivity.\",\n      \"description_ptr\": \"permdesc_changeNetworkState\",\n      \"label\": \"change network connectivity\",\n      \"label_ptr\": \"permlab_changeNetworkState\",\n      \"name\": \"android.permission.CHANGE_NETWORK_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_MULTICAST_STATE\": {\n      \"description\": \"Allows an application to\\n      receive packets not directly addressed to your device.  This can be\\n      useful when discovering services offered near by.  It uses more power\\n      than the non-multicast mode.\",\n      \"description_ptr\": \"permdesc_changeWifiMulticastState\",\n      \"label\": \"allow Wi-Fi Multicast\\n      reception\",\n      \"label_ptr\": \"permlab_changeWifiMulticastState\",\n      \"name\": \"android.permission.CHANGE_WIFI_MULTICAST_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CHANGE_WIFI_STATE\": {\n      \"description\": \"Allows an application to connect\\n      to and disconnect from Wi-Fi access points, and to make changes to\\n      configured Wi-Fi networks.\",\n      \"description_ptr\": \"permdesc_changeWifiState\",\n      \"label\": \"change Wi-Fi state\",\n      \"label_ptr\": \"permlab_changeWifiState\",\n      \"name\": \"android.permission.CHANGE_WIFI_STATE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_CACHE\": {\n      \"description\": \"Allows an application to free phone storage\\n        by deleting files in application cache directory. Access is very\\n        restricted usually to system process.\",\n      \"description_ptr\": \"permdesc_clearAppCache\",\n      \"label\": \"delete all application cache data\",\n      \"label_ptr\": \"permlab_clearAppCache\",\n      \"name\": \"android.permission.CLEAR_APP_CACHE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.CLEAR_APP_USER_DATA\": {\n      \"description\": \"Allows an application to clear user data.\",\n      \"description_ptr\": \"permdesc_clearAppUserData\",\n      \"label\": \"delete other applications' data\",\n      \"label_ptr\": \"permlab_clearAppUserData\",\n      \"name\": \"android.permission.CLEAR_APP_USER_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.CONTROL_LOCATION_UPDATES\": {\n      \"description\": \"Allows enabling/disabling location\\n        update notifications from the radio.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_locationUpdates\",\n      \"label\": \"control location update notifications\",\n      \"label_ptr\": \"permlab_locationUpdates\",\n      \"name\": \"android.permission.CONTROL_LOCATION_UPDATES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.COPY_PROTECTED_DATA\": {\n      \"description\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"description_ptr\": \"permlab_copyProtectedData\",\n      \"label\": \"Allows to invoke default container service to copy content. Not for use by normal applications.\",\n      \"label_ptr\": \"permlab_copyProtectedData\",\n      \"name\": \"android.permission.COPY_PROTECTED_DATA\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DELETE_CACHE_FILES\": {\n      \"description\": \"Allows an application to delete\\n        cache files.\",\n      \"description_ptr\": \"permdesc_deleteCacheFiles\",\n      \"label\": \"delete other applications' caches\",\n      \"label_ptr\": \"permlab_deleteCacheFiles\",\n      \"name\": \"android.permission.DELETE_CACHE_FILES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DELETE_PACKAGES\": {\n      \"description\": \"Allows an application to delete\\n        Android packages. Malicious applications can use this to delete important applications.\",\n      \"description_ptr\": \"permdesc_deletePackages\",\n      \"label\": \"delete applications\",\n      \"label_ptr\": \"permlab_deletePackages\",\n      \"name\": \"android.permission.DELETE_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.DEVICE_POWER\": {\n      \"description\": \"Allows the application to turn the\\n        phone on or off.\",\n      \"description_ptr\": \"permdesc_devicePower\",\n      \"label\": \"power phone on or off\",\n      \"label_ptr\": \"permlab_devicePower\",\n      \"name\": \"android.permission.DEVICE_POWER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DIAGNOSTIC\": {\n      \"description\": \"Allows an application to read and write to\\n    any resource owned by the diag group; for example, files in /dev. This could\\n    potentially affect system stability and security. This should be ONLY be used\\n    for hardware-specific diagnostics by the manufacturer or operator.\",\n      \"description_ptr\": \"permdesc_diagnostic\",\n      \"label\": \"read/write to resources owned by diag\",\n      \"label_ptr\": \"permlab_diagnostic\",\n      \"name\": \"android.permission.DIAGNOSTIC\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.DISABLE_KEYGUARD\": {\n      \"description\": \"Allows an application to disable\\n      the keylock and any associated password security. A legitimate example of\\n      this is the phone disabling the keylock when receiving an incoming phone call,\\n      then re-enabling the keylock when the call is finished.\",\n      \"description_ptr\": \"permdesc_disableKeyguard\",\n      \"label\": \"disable keylock\",\n      \"label_ptr\": \"permlab_disableKeyguard\",\n      \"name\": \"android.permission.DISABLE_KEYGUARD\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.DUMP\": {\n      \"description\": \"Allows application to retrieve\\n        internal state of the system. Malicious applications may retrieve\\n        a wide variety of private and secure information that they should\\n        never normally need.\",\n      \"description_ptr\": \"permdesc_dump\",\n      \"label\": \"retrieve system internal state\",\n      \"label_ptr\": \"permlab_dump\",\n      \"name\": \"android.permission.DUMP\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.EXPAND_STATUS_BAR\": {\n      \"description\": \"Allows application to\\n        expand or collapse the status bar.\",\n      \"description_ptr\": \"permdesc_expandStatusBar\",\n      \"label\": \"expand/collapse status bar\",\n      \"label_ptr\": \"permlab_expandStatusBar\",\n      \"name\": \"android.permission.EXPAND_STATUS_BAR\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FACTORY_TEST\": {\n      \"description\": \"Run as a low-level manufacturer test,\\n        allowing complete access to the phone hardware. Only available\\n        when a phone is running in manufacturer test mode.\",\n      \"description_ptr\": \"permdesc_factoryTest\",\n      \"label\": \"run in factory test mode\",\n      \"label_ptr\": \"permlab_factoryTest\",\n      \"name\": \"android.permission.FACTORY_TEST\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FLASHLIGHT\": {\n      \"description\": \"Allows the application to control\\n        the flashlight.\",\n      \"description_ptr\": \"permdesc_flashlight\",\n      \"label\": \"control flashlight\",\n      \"label_ptr\": \"permlab_flashlight\",\n      \"name\": \"android.permission.FLASHLIGHT\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.FORCE_BACK\": {\n      \"description\": \"Allows an application to force any\\n        activity that is in the foreground to close and go back.\\n        Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_forceBack\",\n      \"label\": \"force application to close\",\n      \"label_ptr\": \"permlab_forceBack\",\n      \"name\": \"android.permission.FORCE_BACK\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.FORCE_STOP_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        forcibly stop other applications.\",\n      \"description_ptr\": \"permdesc_forceStopPackages\",\n      \"label\": \"force stop other applications\",\n      \"label_ptr\": \"permlab_forceStopPackages\",\n      \"name\": \"android.permission.FORCE_STOP_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.GET_ACCOUNTS\": {\n      \"description\": \"Allows an application to get\\n      the list of accounts known by the phone.\",\n      \"description_ptr\": \"permdesc_getAccounts\",\n      \"label\": \"discover known accounts\",\n      \"label_ptr\": \"permlab_getAccounts\",\n      \"name\": \"android.permission.GET_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_PACKAGE_SIZE\": {\n      \"description\": \"Allows an application to retrieve\\n        its code, data, and cache sizes\",\n      \"description_ptr\": \"permdesc_getPackageSize\",\n      \"label\": \"measure application storage space\",\n      \"label_ptr\": \"permlab_getPackageSize\",\n      \"name\": \"android.permission.GET_PACKAGE_SIZE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.GET_TASKS\": {\n      \"description\": \"Allows application to retrieve\\n        information about currently and recently running tasks. May allow\\n        malicious applications to discover private information about other applications.\",\n      \"description_ptr\": \"permdesc_getTasks\",\n      \"label\": \"retrieve running applications\",\n      \"label_ptr\": \"permlab_getTasks\",\n      \"name\": \"android.permission.GET_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.GLOBAL_SEARCH\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.GLOBAL_SEARCH_CONTROL\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.GLOBAL_SEARCH_CONTROL\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.HARDWARE_TEST\": {\n      \"description\": \"Allows the application to control\\n        various peripherals for the purpose of hardware testing.\",\n      \"description_ptr\": \"permdesc_hardware_test\",\n      \"label\": \"test hardware\",\n      \"label_ptr\": \"permlab_hardware_test\",\n      \"name\": \"android.permission.HARDWARE_TEST\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INJECT_EVENTS\": {\n      \"description\": \"Allows an application to deliver\\n        its own input events (key presses, etc.) to other applications. Malicious\\n        applications can use this to take over the phone.\",\n      \"description_ptr\": \"permdesc_injectEvents\",\n      \"label\": \"press keys and control buttons\",\n      \"label_ptr\": \"permlab_injectEvents\",\n      \"name\": \"android.permission.INJECT_EVENTS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INSTALL_LOCATION_PROVIDER\": {\n      \"description\": \"Create mock location sources for testing.\\n        Malicious applications can use this to override the location and/or status returned by real\\n        location sources such as GPS or Network providers or monitor and report your location to an external source.\",\n      \"description_ptr\": \"permdesc_installLocationProvider\",\n      \"label\": \"permission to install a location provider\",\n      \"label_ptr\": \"permlab_installLocationProvider\",\n      \"name\": \"android.permission.INSTALL_LOCATION_PROVIDER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INSTALL_PACKAGES\": {\n      \"description\": \"Allows an application to install new or updated\\n        Android packages. Malicious applications can use this to add new applications with arbitrarily\\n        powerful permissions.\",\n      \"description_ptr\": \"permdesc_installPackages\",\n      \"label\": \"directly install applications\",\n      \"label_ptr\": \"permlab_installPackages\",\n      \"name\": \"android.permission.INSTALL_PACKAGES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.INTERNAL_SYSTEM_WINDOW\": {\n      \"description\": \"Allows the creation of\\n        windows that are intended to be used by the internal system\\n        user interface. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_internalSystemWindow\",\n      \"label\": \"display unauthorized windows\",\n      \"label_ptr\": \"permlab_internalSystemWindow\",\n      \"name\": \"android.permission.INTERNAL_SYSTEM_WINDOW\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.INTERNET\": {\n      \"description\": \"Allows an application to\\n      create network sockets.\",\n      \"description_ptr\": \"permdesc_createNetworkSockets\",\n      \"label\": \"full Internet access\",\n      \"label_ptr\": \"permlab_createNetworkSockets\",\n      \"name\": \"android.permission.INTERNET\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.KILL_BACKGROUND_PROCESSES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.KILL_BACKGROUND_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.MANAGE_ACCOUNTS\": {\n      \"description\": \"Allows an application to\\n    perform operations like adding, and removing accounts and deleting\\n    their password.\",\n      \"description_ptr\": \"permdesc_manageAccounts\",\n      \"label\": \"manage the accounts list\",\n      \"label_ptr\": \"permlab_manageAccounts\",\n      \"name\": \"android.permission.MANAGE_ACCOUNTS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MANAGE_APP_TOKENS\": {\n      \"description\": \"Allows applications to\\n        create and manage their own tokens, bypassing their normal\\n        Z-ordering. Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_manageAppTokens\",\n      \"label\": \"manage application tokens\",\n      \"label_ptr\": \"permlab_manageAppTokens\",\n      \"name\": \"android.permission.MANAGE_APP_TOKENS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.MASTER_CLEAR\": {\n      \"description\": \"Allows an application to completely\\n        reset the system to its factory settings, erasing all data,\\n        configuration, and installed applications.\",\n      \"description_ptr\": \"permdesc_masterClear\",\n      \"label\": \"reset system to factory defaults\",\n      \"label_ptr\": \"permlab_masterClear\",\n      \"name\": \"android.permission.MASTER_CLEAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MODIFY_AUDIO_SETTINGS\": {\n      \"description\": \"Allows application to modify\\n        global audio settings such as volume and routing.\",\n      \"description_ptr\": \"permdesc_modifyAudioSettings\",\n      \"label\": \"change your audio settings\",\n      \"label_ptr\": \"permlab_modifyAudioSettings\",\n      \"name\": \"android.permission.MODIFY_AUDIO_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MODIFY_PHONE_STATE\": {\n      \"description\": \"Allows the application to control the\\n        phone features of the device. An application with this permission can switch\\n        networks, turn the phone radio on and off and the like without ever notifying\\n        you.\",\n      \"description_ptr\": \"permdesc_modifyPhoneState\",\n      \"label\": \"modify phone state\",\n      \"label_ptr\": \"permlab_modifyPhoneState\",\n      \"name\": \"android.permission.MODIFY_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.MOUNT_FORMAT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to format removable storage.\",\n      \"description_ptr\": \"permdesc_mount_format_filesystems\",\n      \"label\": \"format external storage\",\n      \"label_ptr\": \"permlab_mount_format_filesystems\",\n      \"name\": \"android.permission.MOUNT_FORMAT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\": {\n      \"description\": \"Allows the application to mount and\\n        unmount filesystems for removable storage.\",\n      \"description_ptr\": \"permdesc_mount_unmount_filesystems\",\n      \"label\": \"mount and unmount filesystems\",\n      \"label_ptr\": \"permlab_mount_unmount_filesystems\",\n      \"name\": \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.MOVE_PACKAGE\": {\n      \"description\": \"Allows an application to move application resources from internal to external media and vice versa.\",\n      \"description_ptr\": \"permdesc_movePackage\",\n      \"label\": \"Move application resources\",\n      \"label_ptr\": \"permlab_movePackage\",\n      \"name\": \"android.permission.MOVE_PACKAGE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.NFC\": {\n      \"description\": \"Allows an application to communicate\\n      with Near Field Communication (NFC) tags, cards, and readers.\",\n      \"description_ptr\": \"permdesc_nfc\",\n      \"label\": \"control Near Field Communication\",\n      \"label_ptr\": \"permlab_nfc\",\n      \"name\": \"android.permission.NFC\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PACKAGE_USAGE_STATS\": {\n      \"description\": \"Allows the modification of collected component usage statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_pkgUsageStats\",\n      \"label\": \"update component usage statistics\",\n      \"label_ptr\": \"permlab_pkgUsageStats\",\n      \"name\": \"android.permission.PACKAGE_USAGE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.PERFORM_CDMA_PROVISIONING\": {\n      \"description\": \"Allows the application to start CDMA provisioning.\\n        Malicious applications may unnecessarily start CDMA provisioning\",\n      \"description_ptr\": \"permdesc_performCdmaProvisioning\",\n      \"label\": \"directly start CDMA phone setup\",\n      \"label_ptr\": \"permlab_performCdmaProvisioning\",\n      \"name\": \"android.permission.PERFORM_CDMA_PROVISIONING\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.PERSISTENT_ACTIVITY\": {\n      \"description\": \"Allows an application to make\\n        parts of itself persistent, so the system can't use it for other\\n        applications.\",\n      \"description_ptr\": \"permdesc_persistentActivity\",\n      \"label\": \"make application always run\",\n      \"label_ptr\": \"permlab_persistentActivity\",\n      \"name\": \"android.permission.PERSISTENT_ACTIVITY\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.PROCESS_OUTGOING_CALLS\": {\n      \"description\": \"Allows application to\\n        process outgoing calls and change the number to be dialed.  Malicious\\n        applications may monitor, redirect, or prevent outgoing calls.\",\n      \"description_ptr\": \"permdesc_processOutgoingCalls\",\n      \"label\": \"intercept outgoing calls\",\n      \"label_ptr\": \"permlab_processOutgoingCalls\",\n      \"name\": \"android.permission.PROCESS_OUTGOING_CALLS\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CALENDAR\": {\n      \"description\": \"Allows an application to read all\\n        of the calendar events stored on your phone. Malicious applications\\n        can use this to send your calendar events to other people.\",\n      \"description_ptr\": \"permdesc_readCalendar\",\n      \"label\": \"read calendar events\",\n      \"label_ptr\": \"permlab_readCalendar\",\n      \"name\": \"android.permission.READ_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_CONTACTS\": {\n      \"description\": \"Allows an application to read all\\n        of the contact (address) data stored on your phone. Malicious applications\\n        can use this to send your data to other people.\",\n      \"description_ptr\": \"permdesc_readContacts\",\n      \"label\": \"read contact data\",\n      \"label_ptr\": \"permlab_readContacts\",\n      \"name\": \"android.permission.READ_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_FRAME_BUFFER\": {\n      \"description\": \"Allows application to\\n        read the content of the frame buffer.\",\n      \"description_ptr\": \"permdesc_readFrameBuffer\",\n      \"label\": \"read frame buffer\",\n      \"label_ptr\": \"permlab_readFrameBuffer\",\n      \"name\": \"android.permission.READ_FRAME_BUFFER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_INPUT_STATE\": {\n      \"description\": \"Allows applications to watch the\\n        keys you press even when interacting with another application (such\\n        as entering a password). Should never be needed for normal applications.\",\n      \"description_ptr\": \"permdesc_readInputState\",\n      \"label\": \"record what you type and actions you take\",\n      \"label_ptr\": \"permlab_readInputState\",\n      \"name\": \"android.permission.READ_INPUT_STATE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.READ_LOGS\": {\n      \"description\": \"Allows an application to read from the\\n        system's various log files.  This allows it to discover general\\n        information about what you are doing with the phone, potentially\\n        including personal or private information.\",\n      \"description_ptr\": \"permdesc_readLogs\",\n      \"label\": \"read sensitive log data\",\n      \"label_ptr\": \"permlab_readLogs\",\n      \"name\": \"android.permission.READ_LOGS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_PHONE_STATE\": {\n      \"description\": \"Allows the application to access the phone\\n        features of the device.  An application with this permission can determine the phone\\n        number and serial number of this phone, whether a call is active, the number that call\\n        is connected to and the like.\",\n      \"description_ptr\": \"permdesc_readPhoneState\",\n      \"label\": \"read phone state and identity\",\n      \"label_ptr\": \"permlab_readPhoneState\",\n      \"name\": \"android.permission.READ_PHONE_STATE\",\n      \"permissionGroup\": \"android.permission-group.PHONE_CALLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SMS\": {\n      \"description\": \"Allows application to read\\n      SMS messages stored on your phone or SIM card. Malicious applications\\n      may read your confidential messages.\",\n      \"description_ptr\": \"permdesc_readSms\",\n      \"label\": \"read SMS or MMS\",\n      \"label_ptr\": \"permlab_readSms\",\n      \"name\": \"android.permission.READ_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.READ_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to read the sync settings,\\n        such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_readSyncSettings\",\n      \"label\": \"read sync settings\",\n      \"label_ptr\": \"permlab_readSyncSettings\",\n      \"name\": \"android.permission.READ_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_SYNC_STATS\": {\n      \"description\": \"Allows an application to read the sync stats; e.g., the\\n        history of syncs that have occurred.\",\n      \"description_ptr\": \"permdesc_readSyncStats\",\n      \"label\": \"read sync statistics\",\n      \"label_ptr\": \"permlab_readSyncStats\",\n      \"name\": \"android.permission.READ_SYNC_STATS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.READ_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to read any private\\n      words, names and phrases that the user may have stored in the user dictionary.\",\n      \"description_ptr\": \"permdesc_readDictionary\",\n      \"label\": \"read user defined dictionary\",\n      \"label_ptr\": \"permlab_readDictionary\",\n      \"name\": \"android.permission.READ_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REBOOT\": {\n      \"description\": \"Allows the application to\\n        force the phone to reboot.\",\n      \"description_ptr\": \"permdesc_reboot\",\n      \"label\": \"force phone reboot\",\n      \"label_ptr\": \"permlab_reboot\",\n      \"name\": \"android.permission.REBOOT\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.RECEIVE_BOOT_COMPLETED\": {\n      \"description\": \"Allows an application to\\n        have itself started as soon as the system has finished booting.\\n        This can make it take longer to start the phone and allow the\\n        application to slow down the overall phone by always running.\",\n      \"description_ptr\": \"permdesc_receiveBootCompleted\",\n      \"label\": \"automatically start at boot\",\n      \"label_ptr\": \"permlab_receiveBootCompleted\",\n      \"name\": \"android.permission.RECEIVE_BOOT_COMPLETED\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.RECEIVE_MMS\": {\n      \"description\": \"Allows application to receive\\n      and process MMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveMms\",\n      \"label\": \"receive MMS\",\n      \"label_ptr\": \"permlab_receiveMms\",\n      \"name\": \"android.permission.RECEIVE_MMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_SMS\": {\n      \"description\": \"Allows application to receive\\n      and process SMS messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveSms\",\n      \"label\": \"receive SMS\",\n      \"label_ptr\": \"permlab_receiveSms\",\n      \"name\": \"android.permission.RECEIVE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECEIVE_WAP_PUSH\": {\n      \"description\": \"Allows application to receive\\n      and process WAP messages. Malicious applications may monitor\\n      your messages or delete them without showing them to you.\",\n      \"description_ptr\": \"permdesc_receiveWapPush\",\n      \"label\": \"receive WAP\",\n      \"label_ptr\": \"permlab_receiveWapPush\",\n      \"name\": \"android.permission.RECEIVE_WAP_PUSH\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RECORD_AUDIO\": {\n      \"description\": \"Allows application to access\\n        the audio record path.\",\n      \"description_ptr\": \"permdesc_recordAudio\",\n      \"label\": \"record audio\",\n      \"label_ptr\": \"permlab_recordAudio\",\n      \"name\": \"android.permission.RECORD_AUDIO\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.REORDER_TASKS\": {\n      \"description\": \"Allows an application to move\\n        tasks to the foreground and background. Malicious applications can force\\n        themselves to the front without your control.\",\n      \"description_ptr\": \"permdesc_reorderTasks\",\n      \"label\": \"reorder running applications\",\n      \"label_ptr\": \"permlab_reorderTasks\",\n      \"name\": \"android.permission.REORDER_TASKS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.RESTART_PACKAGES\": {\n      \"description\": \"Allows an application to\\n        kill background processes of other applications, even if memory\\n        isn't low.\",\n      \"description_ptr\": \"permdesc_killBackgroundProcesses\",\n      \"label\": \"kill background processes\",\n      \"label_ptr\": \"permlab_killBackgroundProcesses\",\n      \"name\": \"android.permission.RESTART_PACKAGES\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SEND_SMS\": {\n      \"description\": \"Allows application to send SMS\\n      messages. Malicious applications may cost you money by sending\\n      messages without your confirmation.\",\n      \"description_ptr\": \"permdesc_sendSms\",\n      \"label\": \"send SMS messages\",\n      \"label_ptr\": \"permlab_sendSms\",\n      \"name\": \"android.permission.SEND_SMS\",\n      \"permissionGroup\": \"android.permission-group.COST_MONEY\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ACTIVITY_WATCHER\": {\n      \"description\": \"Allows an application to\\n        monitor and control how the system launches activities.\\n        Malicious applications may completely compromise the system. This\\n        permission is only needed for development, never for normal\\n        phone usage.\",\n      \"description_ptr\": \"permdesc_runSetActivityWatcher\",\n      \"label\": \"monitor and control all application launching\",\n      \"label_ptr\": \"permlab_runSetActivityWatcher\",\n      \"name\": \"android.permission.SET_ACTIVITY_WATCHER\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_ALWAYS_FINISH\": {\n      \"description\": \"Allows an application\\n        to control whether activities are always finished as soon as they\\n        go to the background. Never needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setAlwaysFinish\",\n      \"label\": \"make all background applications close\",\n      \"label_ptr\": \"permlab_setAlwaysFinish\",\n      \"name\": \"android.permission.SET_ALWAYS_FINISH\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ANIMATION_SCALE\": {\n      \"description\": \"Allows an application to change\\n        the global animation speed (faster or slower animations) at any time.\",\n      \"description_ptr\": \"permdesc_setAnimationScale\",\n      \"label\": \"modify global animation speed\",\n      \"label_ptr\": \"permlab_setAnimationScale\",\n      \"name\": \"android.permission.SET_ANIMATION_SCALE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_DEBUG_APP\": {\n      \"description\": \"Allows an application to turn\\n        on debugging for another application. Malicious applications can use this\\n        to kill other applications.\",\n      \"description_ptr\": \"permdesc_setDebugApp\",\n      \"label\": \"enable application debugging\",\n      \"label_ptr\": \"permlab_setDebugApp\",\n      \"name\": \"android.permission.SET_DEBUG_APP\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_ORIENTATION\": {\n      \"description\": \"Allows an application to change\\n        the rotation of the screen at any time. Should never be needed for\\n        normal applications.\",\n      \"description_ptr\": \"permdesc_setOrientation\",\n      \"label\": \"change screen orientation\",\n      \"label_ptr\": \"permlab_setOrientation\",\n      \"name\": \"android.permission.SET_ORIENTATION\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PREFERRED_APPLICATIONS\": {\n      \"description\": \"Allows an application to\\n        modify your preferred applications. This can allow malicious applications\\n        to silently change the applications that are run, spoofing your\\n        existing applications to collect private data from you.\",\n      \"description_ptr\": \"permdesc_setPreferredApplications\",\n      \"label\": \"set preferred applications\",\n      \"label_ptr\": \"permlab_setPreferredApplications\",\n      \"name\": \"android.permission.SET_PREFERRED_APPLICATIONS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SET_PROCESS_LIMIT\": {\n      \"description\": \"Allows an application\\n        to control the maximum number of processes that will run. Never\\n        needed for normal applications.\",\n      \"description_ptr\": \"permdesc_setProcessLimit\",\n      \"label\": \"limit number of running processes\",\n      \"label_ptr\": \"permlab_setProcessLimit\",\n      \"name\": \"android.permission.SET_PROCESS_LIMIT\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_TIME\": {\n      \"description\": \"Allows an application to change\\n        the phone's clock time.\",\n      \"description_ptr\": \"permdesc_setTime\",\n      \"label\": \"set time\",\n      \"label_ptr\": \"permlab_setTime\",\n      \"name\": \"android.permission.SET_TIME\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_TIME_ZONE\": {\n      \"description\": \"Allows an application to change\\n        the phone's time zone.\",\n      \"description_ptr\": \"permdesc_setTimeZone\",\n      \"label\": \"set time zone\",\n      \"label_ptr\": \"permlab_setTimeZone\",\n      \"name\": \"android.permission.SET_TIME_ZONE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SET_WALLPAPER\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper.\",\n      \"description_ptr\": \"permdesc_setWallpaper\",\n      \"label\": \"set wallpaper\",\n      \"label_ptr\": \"permlab_setWallpaper\",\n      \"name\": \"android.permission.SET_WALLPAPER\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SET_WALLPAPER_COMPONENT\": {\n      \"description\": \"\",\n      \"description_ptr\": \"\",\n      \"label\": \"\",\n      \"label_ptr\": \"\",\n      \"name\": \"android.permission.SET_WALLPAPER_COMPONENT\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.SET_WALLPAPER_HINTS\": {\n      \"description\": \"Allows the application\\n        to set the system wallpaper size hints.\",\n      \"description_ptr\": \"permdesc_setWallpaperHints\",\n      \"label\": \"set wallpaper size hints\",\n      \"label_ptr\": \"permlab_setWallpaperHints\",\n      \"name\": \"android.permission.SET_WALLPAPER_HINTS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SHUTDOWN\": {\n      \"description\": \"Puts the activity manager into a shutdown\\n        state.  Does not perform a complete shutdown.\",\n      \"description_ptr\": \"permdesc_shutdown\",\n      \"label\": \"partial shutdown\",\n      \"label_ptr\": \"permlab_shutdown\",\n      \"name\": \"android.permission.SHUTDOWN\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SIGNAL_PERSISTENT_PROCESSES\": {\n      \"description\": \"Allows application to request that the\\n        supplied signal be sent to all persistent processes.\",\n      \"description_ptr\": \"permdesc_signalPersistentProcesses\",\n      \"label\": \"send Linux signals to applications\",\n      \"label_ptr\": \"permlab_signalPersistentProcesses\",\n      \"name\": \"android.permission.SIGNAL_PERSISTENT_PROCESSES\",\n      \"permissionGroup\": \"android.permission-group.DEVELOPMENT_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.STATUS_BAR\": {\n      \"description\": \"Allows application to disable\\n        the status bar or add and remove system icons.\",\n      \"description_ptr\": \"permdesc_statusBar\",\n      \"label\": \"disable or modify status bar\",\n      \"label_ptr\": \"permlab_statusBar\",\n      \"name\": \"android.permission.STATUS_BAR\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.STATUS_BAR_SERVICE\": {\n      \"description\": \"Allows the application to be the status bar.\",\n      \"description_ptr\": \"permdesc_statusBarService\",\n      \"label\": \"status bar\",\n      \"label_ptr\": \"permlab_statusBarService\",\n      \"name\": \"android.permission.STATUS_BAR_SERVICE\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.STOP_APP_SWITCHES\": {\n      \"description\": \"Prevents the user from switching to\\n        another application.\",\n      \"description_ptr\": \"permdesc_stopAppSwitches\",\n      \"label\": \"prevent app switches\",\n      \"label_ptr\": \"permlab_stopAppSwitches\",\n      \"name\": \"android.permission.STOP_APP_SWITCHES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signature\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_READ\": {\n      \"description\": \"Allows an application to get details about the currently synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsRead\",\n      \"label\": \"read subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsRead\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_READ\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.SUBSCRIBED_FEEDS_WRITE\": {\n      \"description\": \"Allows an application to modify\\n      your currently synced feeds. This could allow a malicious application to\\n      change your synced feeds.\",\n      \"description_ptr\": \"permdesc_subscribedFeedsWrite\",\n      \"label\": \"write subscribed feeds\",\n      \"label_ptr\": \"permlab_subscribedFeedsWrite\",\n      \"name\": \"android.permission.SUBSCRIBED_FEEDS_WRITE\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.SYSTEM_ALERT_WINDOW\": {\n      \"description\": \"Allows an application to\\n        show system alert windows. Malicious applications can take over the\\n        entire screen of the phone.\",\n      \"description_ptr\": \"permdesc_systemAlertWindow\",\n      \"label\": \"display system-level alerts\",\n      \"label_ptr\": \"permlab_systemAlertWindow\",\n      \"name\": \"android.permission.SYSTEM_ALERT_WINDOW\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.UPDATE_DEVICE_STATS\": {\n      \"description\": \"Allows the modification of\\n        collected battery statistics. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_batteryStats\",\n      \"label\": \"modify battery statistics\",\n      \"label_ptr\": \"permlab_batteryStats\",\n      \"name\": \"android.permission.UPDATE_DEVICE_STATS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.USE_CREDENTIALS\": {\n      \"description\": \"Allows an application to\\n    request authentication tokens.\",\n      \"description_ptr\": \"permdesc_useCredentials\",\n      \"label\": \"use the authentication\\n    credentials of an account\",\n      \"label_ptr\": \"permlab_useCredentials\",\n      \"name\": \"android.permission.USE_CREDENTIALS\",\n      \"permissionGroup\": \"android.permission-group.ACCOUNTS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.USE_SIP\": {\n      \"description\": \"Allows an application to use the SIP service to make/receive Internet calls.\",\n      \"description_ptr\": \"permdesc_use_sip\",\n      \"label\": \"make/receive Internet calls\",\n      \"label_ptr\": \"permlab_use_sip\",\n      \"name\": \"android.permission.USE_SIP\",\n      \"permissionGroup\": \"android.permission-group.NETWORK\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.VIBRATE\": {\n      \"description\": \"Allows the application to control\\n        the vibrator.\",\n      \"description_ptr\": \"permdesc_vibrate\",\n      \"label\": \"control vibrator\",\n      \"label_ptr\": \"permlab_vibrate\",\n      \"name\": \"android.permission.VIBRATE\",\n      \"permissionGroup\": \"android.permission-group.HARDWARE_CONTROLS\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"android.permission.WAKE_LOCK\": {\n      \"description\": \"Allows an application to prevent\\n        the phone from going to sleep.\",\n      \"description_ptr\": \"permdesc_wakeLock\",\n      \"label\": \"prevent phone from sleeping\",\n      \"label_ptr\": \"permlab_wakeLock\",\n      \"name\": \"android.permission.WAKE_LOCK\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_APN_SETTINGS\": {\n      \"description\": \"Allows an application to modify the APN\\n        settings, such as Proxy and Port of any APN.\",\n      \"description_ptr\": \"permdesc_writeApnSettings\",\n      \"label\": \"write Access Point Name settings\",\n      \"label_ptr\": \"permlab_writeApnSettings\",\n      \"name\": \"android.permission.WRITE_APN_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CALENDAR\": {\n      \"description\": \"Allows an application to add or change the \\n        events on your calendar, which may send email to guests. Malicious applications can use this \\n        to erase or modify your calendar events or to send email to guests.\",\n      \"description_ptr\": \"permdesc_writeCalendar\",\n      \"label\": \"add or modify calendar events and send email to guests\",\n      \"label_ptr\": \"permlab_writeCalendar\",\n      \"name\": \"android.permission.WRITE_CALENDAR\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_CONTACTS\": {\n      \"description\": \"Allows an application to modify the\\n        contact (address) data stored on your phone. Malicious\\n        applications can use this to erase or modify your contact data.\",\n      \"description_ptr\": \"permdesc_writeContacts\",\n      \"label\": \"write contact data\",\n      \"label_ptr\": \"permlab_writeContacts\",\n      \"name\": \"android.permission.WRITE_CONTACTS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_EXTERNAL_STORAGE\": {\n      \"description\": \"Allows an application to write to the SD card.\",\n      \"description_ptr\": \"permdesc_sdcardWrite\",\n      \"label\": \"modify/delete SD card contents\",\n      \"label_ptr\": \"permlab_sdcardWrite\",\n      \"name\": \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"permissionGroup\": \"android.permission-group.STORAGE\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_GSERVICES\": {\n      \"description\": \"Allows an application to modify the\\n        Google services map.  Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeGservices\",\n      \"label\": \"modify the Google services map\",\n      \"label_ptr\": \"permlab_writeGservices\",\n      \"name\": \"android.permission.WRITE_GSERVICES\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SECURE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's secure settings data. Not for use by normal applications.\",\n      \"description_ptr\": \"permdesc_writeSecureSettings\",\n      \"label\": \"modify secure system settings\",\n      \"label_ptr\": \"permlab_writeSecureSettings\",\n      \"name\": \"android.permission.WRITE_SECURE_SETTINGS\",\n      \"permissionGroup\": \"\",\n      \"protectionLevel\": \"signatureOrSystem\"\n    },\n    \"android.permission.WRITE_SETTINGS\": {\n      \"description\": \"Allows an application to modify the\\n        system's settings data. Malicious applications can corrupt your system's\\n        configuration.\",\n      \"description_ptr\": \"permdesc_writeSettings\",\n      \"label\": \"modify global system settings\",\n      \"label_ptr\": \"permlab_writeSettings\",\n      \"name\": \"android.permission.WRITE_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SMS\": {\n      \"description\": \"Allows application to write\\n      to SMS messages stored on your phone or SIM card. Malicious applications\\n      may delete your messages.\",\n      \"description_ptr\": \"permdesc_writeSms\",\n      \"label\": \"edit SMS or MMS\",\n      \"label_ptr\": \"permlab_writeSms\",\n      \"name\": \"android.permission.WRITE_SMS\",\n      \"permissionGroup\": \"android.permission-group.MESSAGES\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_SYNC_SETTINGS\": {\n      \"description\": \"Allows an application to modify the sync\\n        settings, such as whether sync is enabled for Contacts.\",\n      \"description_ptr\": \"permdesc_writeSyncSettings\",\n      \"label\": \"write sync settings\",\n      \"label_ptr\": \"permlab_writeSyncSettings\",\n      \"name\": \"android.permission.WRITE_SYNC_SETTINGS\",\n      \"permissionGroup\": \"android.permission-group.SYSTEM_TOOLS\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"android.permission.WRITE_USER_DICTIONARY\": {\n      \"description\": \"Allows an application to write new words into the\\n      user dictionary.\",\n      \"description_ptr\": \"permdesc_writeDictionary\",\n      \"label\": \"write to user defined dictionary\",\n      \"label_ptr\": \"permlab_writeDictionary\",\n      \"name\": \"android.permission.WRITE_USER_DICTIONARY\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.alarm.permission.SET_ALARM\": {\n      \"description\": \"Allows the application to set an alarm in\\n      an installed alarm clock application. Some alarm clock applications may\\n      not implement this feature.\",\n      \"description_ptr\": \"permdesc_setAlarm\",\n      \"label\": \"set alarm in alarm clock\",\n      \"label_ptr\": \"permlab_setAlarm\",\n      \"name\": \"com.android.alarm.permission.SET_ALARM\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"normal\"\n    },\n    \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows the application to read all\\n        the URLs that the Browser has visited, and all of the Browser's bookmarks.\",\n      \"description_ptr\": \"permdesc_readHistoryBookmarks\",\n      \"label\": \"read Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_readHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.READ_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    },\n    \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\": {\n      \"description\": \"Allows an application to modify the\\n        Browser's history or bookmarks stored on your phone. Malicious applications\\n        can use this to erase or modify your Browser's data.\",\n      \"description_ptr\": \"permdesc_writeHistoryBookmarks\",\n      \"label\": \"write Browser's history and bookmarks\",\n      \"label_ptr\": \"permlab_writeHistoryBookmarks\",\n      \"name\": \"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\",\n      \"permissionGroup\": \"android.permission-group.PERSONAL_INFO\",\n      \"protectionLevel\": \"dangerous\"\n    }\n  }\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_16.json",
    "content": "{\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-addAccount-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-addAcount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-confirmCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V\": [\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Landroid/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Landroid/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Landroid/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Landroid/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-registerMediaButtonEventReceiverForCalls-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-unregisterMediaButtonEventReceiverForCalls-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-allowIncomingConnect-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-connectSinkInternal-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-disconnectSinkInternal-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-resumeSink-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothA2dpService;-suspendSink-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-addRfcommServiceRecord-(Ljava/lang/String; Landroid/os/ParcelUuid; I Landroid/os/IBinder;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-allowIncomingProfileConnect-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-cancelBondProcess-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-cancelPairingUserInput-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-changeApplicationBluetoothState-(Z Landroid/bluetooth/IBluetoothStateChangeCallback; Landroid/os/IBinder;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-connectHeadset-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-connectInputDevice-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-connectPanDevice-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-createBond-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-createBondOutOfBand-(Ljava/lang/String; [B [B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-disconnectHeadset-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-disconnectInputDevice-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-disconnectPanDevice-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-fetchRemoteUuids-(Ljava/lang/String; Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getBluetoothState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getBondState-(Ljava/lang/String;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getConnectedHealthDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getConnectedInputDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getConnectedPanDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getDiscoverableTimeout-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getInputDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getInputDevicePriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getInputDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getPanDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getPanDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getRemoteAlias-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getRemoteClass-(Ljava/lang/String;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getRemoteName-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getRemoteServiceChannel-(Ljava/lang/String; Landroid/os/ParcelUuid;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getRemoteUuids-(Ljava/lang/String;)[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getTrustState-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-isTetheringOn-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-listBonds-()[Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-readOutOfBandData-()[B\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-removeBond-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-removeServiceRecord-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-setBluetoothTethering-(Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-setDeviceOutOfBandData-(Ljava/lang/String; [B [B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-setDiscoverableTimeout-(I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-setInputDevicePriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-setPairingConfirmation-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-setPasskey-(Ljava/lang/String; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-setPin-(Ljava/lang/String; [B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-setRemoteAlias-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/server/BluetoothService;-setRemoteOutOfBandData-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-setScanMode-(I I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Landroid/server/BluetoothService;-setTrust-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/server/BluetoothService;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/email/provider/AttachmentProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"com.android.email.permission.ACCESS_PROVIDER\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\",\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\",\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendData-(Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendData-(Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceSvn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIccSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1AlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getMsisdn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-copyMessageToIccEf-(I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-getAllMessagesFromIccEf-()Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-updateMessageOnIccEf-(I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-copyMessageToIccEf-(I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-disableCellBroadcast-(I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-disableCellBroadcastRange-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-enableCellBroadcast-(I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-enableCellBroadcastRange-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-getAllMessagesFromIccEf-()Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-updateMessageOnIccEf-(I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-authenticate-(Ljava/lang/String; [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-close-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getCardEmulationRoute-(Ljava/lang/String;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-open-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-setCardEmulationRoute-(Ljava/lang/String; I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-transceive-(Ljava/lang/String; [B)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-getNfcAdapterExtrasInterface-(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setNdefPushCallback-(Landroid/nfc/INdefPushCallback;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-close-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-cancelMissedCallsNotification-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableApnType-(Ljava/lang/String;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableApnType-(Ljava/lang/String;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-silenceRinger-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/AbstractContactsProvider;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I\": [\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/AbstractContactsProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/AbstractContactsProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/AbstractContactsProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/CallLogProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/CallLogProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/CallLogProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-call-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Landroid/os/Bundle;\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.READ_SOCIAL_STREAM\",\n        \"android.permission.WRITE_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.READ_SOCIAL_STREAM\",\n        \"android.permission.WRITE_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.READ_SOCIAL_STREAM\",\n        \"android.permission.WRITE_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ProfileProvider;-openAssetFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;\": [\n        \"android.permission.READ_PROFILE\",\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/VoicemailContentProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/VoicemailContentProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/VoicemailContentProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/VoicemailContentProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/downloads/DownloadProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_ALL_DOWNLOADS\"\n    ],\n    \"Lcom/android/providers/downloads/DownloadProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n        \"android.permission.ACCESS_DOWNLOAD_MANAGER\",\n        \"android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED\",\n        \"android.permission.DOWNLOAD_CACHE_NON_PURGEABLE\",\n        \"android.permission.DOWNLOAD_WITHOUT_NOTIFICATION\",\n        \"android.permission.INTERNET\",\n        \"android.permission.WRITE_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/providers/downloads/DownloadProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.ACCESS_ALL_DOWNLOADS\"\n    ],\n    \"Lcom/android/providers/downloads/DownloadProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_ALL_DOWNLOADS\"\n    ],\n    \"Lcom/android/providers/drm/DrmProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_DRM\"\n    ],\n    \"Lcom/android/providers/drm/DrmProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.INSTALL_DRM\"\n    ],\n    \"Lcom/android/providers/drm/DrmProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_DRM\"\n    ],\n    \"Lcom/android/providers/media/MediaProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.WRITE_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-openAssetFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;\": [\n        \"android.permission.ACCESS_DRM\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.ACCESS_DRM\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/telephony/TelephonyProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_APN_SETTINGS\"\n    ],\n    \"Lcom/android/providers/telephony/TelephonyProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_APN_SETTINGS\"\n    ],\n    \"Lcom/android/providers/telephony/TelephonyProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_APN_SETTINGS\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-setTime-(J)V\": [\n        \"android.permission.SET_TIME\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-setTimeZone-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_TIME_ZONE\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindAppWidgetId-(I Landroid/content/ComponentName;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindAppWidgetIdIfAllowed-(Ljava/lang/String; I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindRemoteViewsService-(I Landroid/content/Intent; Landroid/os/IBinder;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-deleteAppWidgetId-(I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetInfo-(I)Landroid/appwidget/AppWidgetProviderInfo;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetOptions-(I)Landroid/os/Bundle;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetViews-(I)Landroid/widget/RemoteViews;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-hasBindAppWidgetPermission-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-notifyAppWidgetViewDataChanged-([I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-partiallyUpdateAppWidgetIds-([I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-setBindAppWidgetPermission-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-unbindRemoteViewsService-(I Landroid/content/Intent;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetIds-([I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetOptions-(I Landroid/os/Bundle;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetProvider-(Landroid/content/ComponentName; Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-backupNow-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-clearBackupData-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z [Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-hasBackupPassword-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-isBackupEnabled-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-listAllTransports-()[Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setAutoRestore-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupEnabled-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupProvisioned-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileDataEnabled-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkPreference-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfacePairs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetworkTransitionWakelock-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyProperties;)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setMobileDataEnabled-(Z)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setNetworkPreference-(I)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setRadio-(I Z)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setRadios-(Z)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startUsingNetworkFeature-(I Ljava/lang/String; Landroid/os/IBinder;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-stopUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback;)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-reportFailedPasswordAttempt-()V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-()V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\"\n    ],\n    \"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;\": [\n        \"android.permission.READ_LOGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener;)Z\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderInfo-(Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-isProviderEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Ljava/lang/String; Landroid/location/Criteria; J F Z Landroid/location/ILocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdatesPI-(Ljava/lang/String; Landroid/location/Criteria; J F Z Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushDefaultDnsCache-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushInterfaceDnsCache-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceRxThrottle-(Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceTxThrottle-(Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-([Ljava/lang/String;)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultInterfaceForDns-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForInterface-(Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceThrottle-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-acquireWakeLock-(I Landroid/os/IBinder; Ljava/lang/String; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-clearUserActivityTimeout-(J J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-goToSleep-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-goToSleepWithReason-(J I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-preventScreenOn-(Z)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-reboot-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-setAutoBrightnessAdjustment-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-setBacklightBrightness-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-setMaximumScreenOffTimeount-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-setPokeLock-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-setStayOnSetting-(I)V\": [\n        \"android.permission.WRITE_SETTINGS\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-userActivity-(J Z)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/PowerManagerService;-userActivityWithForce-(J Z Z)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-collapse-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-expand-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onClearAllNotifications-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onPanelRevealed-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; Ljava/util/List; Ljava/util/List; [I Ljava/util/List;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setSystemUiVisibility-(I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-topAppWindowChanged-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Landroid/telephony/CellInfo;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/LinkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceState-(Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getByteCount-(Ljava/lang/String; I I I)J\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getCliffLevel-(Ljava/lang/String; I)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getCliffThreshold-(Ljava/lang/String; I)J\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getHelpUri-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getPeriodStartTime-(Ljava/lang/String;)J\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getResetTime-(Ljava/lang/String;)J\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getThrottle-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(J Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-([J I Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setDimensionHints-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/WifiService;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/WifiService;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-addToBlacklist-(Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-clearBlacklist-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-disconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getConfigFile-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getFrequencyBand-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiApEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiServiceMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiStateMachineMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-initializeMulticastFiltering-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-isMulticastEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-reassociate-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-reconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-releaseMulticastLock-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-releaseWifiLock-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/WifiService;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setCountryCode-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setFrequencyBand-(I Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-startScan-(Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-startWifi-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-stopWifi-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activitySlept-(Landroid/os/IBinder;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activityStopped-(Landroid/os/IBinder; Landroid/os/Bundle; Landroid/graphics/Bitmap; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z\": [\n        \"android.permission.BACKUP\",\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dismissKeyguardOnNextActivity-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.FORCE_STOP_PACKAGES\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishReceiver-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/Bundle; Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnails-(I)Landroid/app/ActivityManager$TaskThumbnails;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I Landroid/app/IThumbnailReceiver;)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-goingToSleep-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-handleApplicationCrash-(Landroid/os/IBinder; Landroid/app/ApplicationErrorReport$CrashInfo;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-handleApplicationWtf-(Landroid/os/IBinder; Ljava/lang/String; Landroid/app/ApplicationErrorReport$CrashInfo;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.KILL_BACKGROUND_PROCESSES\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeSubTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_SCREEN_COMPATIBILITY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_SCREEN_COMPATIBILITY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_PROCESS_LIMIT\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_PROCESS_LIMIT\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setRequestedOrientation-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SHUTDOWN\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivitiesInPackage-(I [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityInPackage-(I Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startRunning-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-switchUser-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unregisterReceiver-(Landroid/content/IIntentReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-wakingUp-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInputEvent-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScanWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScanWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScanWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScanWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-getAllPkgUsageStats-()[Lcom/android/internal/os/PkgUsageStats;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-getPkgUsageStats-(Landroid/content/ComponentName;)Lcom/android/internal/os/PkgUsageStats;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-noteLaunchTime-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-notePauseComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-noteResumeComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getAppPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getAppsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setAppPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I)V\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackage-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerification-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/net/Uri; Landroid/content/pm/ManifestDigest; Landroid/content/pm/ContainerEncryptionParams;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String;)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppToken-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToBottom-(Ljava/util/List;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToTop-(Ljava/util/List;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/ti/server/StubFmService;-resumeFm-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxChangeAudioTarget-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxChangeDigitalTargetConfiguration-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxCompleteScan_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisable-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableAudioRouting-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableRds_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnable-()Z\": [\n        \"ti.permission.FMRX\",\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableAudioRouting-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableRds_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetBand-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetBand_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetChannelSpacing-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetChannelSpacing_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetFMState-()I\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetFwVersion-()D\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMuteMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMuteMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask-()J\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsSystem-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsSystem_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssi-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssiThreshold-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssiThreshold_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssi_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetTunedFrequency-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetTunedFrequency_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetVolume-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetVolume_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsEnabled-()Z\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsFMPaused-()Z\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsValidChannel-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSeek_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetBand-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetBand_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetChannelSpacing-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetChannelSpacing_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMuteMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsSystem-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsSystem_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRssiThreshold-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRssiThreshold_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetVolume-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopCompleteScan-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopCompleteScan_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopSeek-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopSeek_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxTune_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txChangeAudioSource-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txChangeDigitalSourceConfiguration-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txDisable-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txDisableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txEnable-()Z\": [\n        \"ti.permission.FMRX\",\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txEnableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txGetFMState-()I\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetMonoStereoMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetPowerLevel-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetPreEmphasisFilter-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsAfCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsECC-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsMusicSpeechFlag-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPiCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPsDisplayMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPsScrollSpeed-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPtyCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextPsMsg-(Ljava/lang/String;)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextRepertoire-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextRtMsg-(I Ljava/lang/String; I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTrafficCodes-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTransmissionMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTransmittedGroupsMask-(J)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txStartTransmission-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txStopTransmission-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txTune-(J)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txWriteRdsRawData-(Ljava/lang/String;)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-removeOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-moveTaskToBack-(Z)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-navigateUpTo-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-navigateUpToFromChild-(Landroid/app/Activity; Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-onMenuItemSelected-(I Landroid/view/MenuItem;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-onNavigateUp-()Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-onNavigateUpFromChild-(Landroid/app/Activity;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setRequestedOrientation-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AlarmManager;-setTimeZone-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_TIME_ZONE\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBondState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothSocket;-connect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/content/BroadcastReceiver$PendingResult;-finish-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-isProviderEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkPreference-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-setNetworkPreference-(I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-stopUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-close-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-endCall-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-startAudio-()V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getWifiState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reassociate-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startScan-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-increment-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-restore-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transfer-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-([J I)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(J)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/ZoomButtonsController;-setVisible-(Z)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_17.json",
    "content": "{\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-addAccount-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-addAcount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V\": [\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Landroid/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Landroid/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Landroid/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Landroid/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Landroid/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-registerMediaButtonEventReceiverForCalls-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-unregisterMediaButtonEventReceiverForCalls-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-roamChanged-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/email/provider/AttachmentProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"com.android.email.permission.ACCESS_PROVIDER\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\",\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\",\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendData-(Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendData-(Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceSvn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIccSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1AlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getMsisdn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-copyMessageToIccEf-(I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-getAllMessagesFromIccEf-()Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-updateMessageOnIccEf-(I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-authenticate-(Ljava/lang/String; [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-close-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getCardEmulationRoute-(Ljava/lang/String;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getDriverName-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-open-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-setCardEmulationRoute-(Ljava/lang/String; I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-transceive-(Ljava/lang/String; [B)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-getNfcAdapterExtrasInterface-(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setNdefPushCallback-(Landroid/nfc/INdefPushCallback;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-close-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-cancelMissedCallsNotification-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableApnType-(Ljava/lang/String;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableApnType-(Ljava/lang/String;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-silenceRinger-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/AbstractContactsProvider;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I\": [\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/AbstractContactsProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/AbstractContactsProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/AbstractContactsProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/CallLogProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/CallLogProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/CallLogProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-call-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Landroid/os/Bundle;\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.READ_SOCIAL_STREAM\",\n        \"android.permission.WRITE_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.READ_SOCIAL_STREAM\",\n        \"android.permission.WRITE_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.READ_SOCIAL_STREAM\",\n        \"android.permission.WRITE_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/providers/contacts/ProfileProvider;-openAssetFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;\": [\n        \"android.permission.READ_PROFILE\",\n        \"android.permission.WRITE_PROFILE\"\n    ],\n    \"Lcom/android/providers/contacts/VoicemailContentProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/VoicemailContentProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/VoicemailContentProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/contacts/VoicemailContentProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"com.android.voicemail.permission.ADD_VOICEMAIL\"\n    ],\n    \"Lcom/android/providers/downloads/DownloadProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_ALL_DOWNLOADS\"\n    ],\n    \"Lcom/android/providers/downloads/DownloadProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n        \"android.permission.ACCESS_DOWNLOAD_MANAGER\",\n        \"android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED\",\n        \"android.permission.DOWNLOAD_CACHE_NON_PURGEABLE\",\n        \"android.permission.DOWNLOAD_WITHOUT_NOTIFICATION\",\n        \"android.permission.INTERNET\",\n        \"android.permission.WRITE_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/providers/downloads/DownloadProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.ACCESS_ALL_DOWNLOADS\"\n    ],\n    \"Lcom/android/providers/downloads/DownloadProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_ALL_DOWNLOADS\"\n    ],\n    \"Lcom/android/providers/drm/DrmProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_DRM\"\n    ],\n    \"Lcom/android/providers/drm/DrmProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.INSTALL_DRM\"\n    ],\n    \"Lcom/android/providers/drm/DrmProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_DRM\"\n    ],\n    \"Lcom/android/providers/media/MediaProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.ACCESS_CACHE_FILESYSTEM\",\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.WRITE_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-bulkInsert-(Landroid/net/Uri; [Landroid/content/ContentValues;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-call-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-openAssetFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;\": [\n        \"android.permission.ACCESS_DRM\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-openFile-(Landroid/net/Uri; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.ACCESS_DRM\"\n    ],\n    \"Lcom/android/providers/settings/SettingsProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/providers/telephony/TelephonyProvider;-delete-(Landroid/net/Uri; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_APN_SETTINGS\"\n    ],\n    \"Lcom/android/providers/telephony/TelephonyProvider;-insert-(Landroid/net/Uri; Landroid/content/ContentValues;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_APN_SETTINGS\"\n    ],\n    \"Lcom/android/providers/telephony/TelephonyProvider;-update-(Landroid/net/Uri; Landroid/content/ContentValues; Ljava/lang/String; [Ljava/lang/String;)I\": [\n        \"android.permission.WRITE_APN_SETTINGS\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-setTime-(J)V\": [\n        \"android.permission.SET_TIME\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-setTimeZone-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_TIME_ZONE\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindAppWidgetId-(I Landroid/content/ComponentName; Landroid/os/Bundle;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindAppWidgetIdIfAllowed-(Ljava/lang/String; I Landroid/content/ComponentName; Landroid/os/Bundle;)Z\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindRemoteViewsService-(I Landroid/content/Intent; Landroid/os/IBinder; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-deleteAppWidgetId-(I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetInfo-(I)Landroid/appwidget/AppWidgetProviderInfo;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetOptions-(I)Landroid/os/Bundle;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetViews-(I)Landroid/widget/RemoteViews;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-hasBindAppWidgetPermission-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-notifyAppWidgetViewDataChanged-([I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-partiallyUpdateAppWidgetIds-([I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-setBindAppWidgetPermission-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-unbindRemoteViewsService-(I Landroid/content/Intent; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetIds-([I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetOptions-(I Landroid/os/Bundle;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetProvider-(Landroid/content/ComponentName; Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-backupNow-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-clearBackupData-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z [Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-hasBackupPassword-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-isBackupEnabled-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-listAllTransports-()[Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setAutoRestore-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupEnabled-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupProvisioned-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileDataEnabled-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkPreference-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfacePairs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetworkTransitionWakelock-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyProperties;)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setMobileDataEnabled-(Z)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setNetworkPreference-(I)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setRadio-(I Z)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setRadios-(Z)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startUsingNetworkFeature-(I Ljava/lang/String; Landroid/os/IBinder;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-stopUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-lockNow-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-wipeData-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;\": [\n        \"android.permission.READ_LOGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Landroid/view/inputmethod/InputMethodInfo; Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-isProviderEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;\": [\n        \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushDefaultDnsCache-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushInterfaceDnsCache-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceRxThrottle-(Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceTxThrottle-(Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-([Ljava/lang/String;)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultInterfaceForDns-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForInterface-(Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceThrottle-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startReverseTethering-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopReverseTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-collapsePanels-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-expandNotificationsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-expandSettingsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onClearAllNotifications-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onPanelRevealed-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; Ljava/util/List; Ljava/util/List; [I Ljava/util/List;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setSystemUiVisibility-(I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-topAppWindowChanged-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/LinkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceState-(Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getByteCount-(Ljava/lang/String; I I I)J\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getCliffLevel-(Ljava/lang/String; I)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getCliffThreshold-(Ljava/lang/String; I)J\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getHelpUri-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getPeriodStartTime-(Ljava/lang/String;)J\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getResetTime-(Ljava/lang/String;)J\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ThrottleService;-getThrottle-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(J Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-([J I Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setDimensionHints-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/WifiService;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/WifiService;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-addToBlacklist-(Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-captivePortalCheckComplete-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/WifiService;-clearBlacklist-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-disconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getConfigFile-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getFrequencyBand-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiApEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiServiceMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-getWifiStateMachineMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-initializeMulticastFiltering-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-isMulticastEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-reassociate-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-reconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-releaseMulticastLock-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-releaseWifiLock-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/WifiService;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setCountryCode-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setFrequencyBand-(I Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-startScan-(Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/WifiService;-startWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/WifiService;-stopWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/WifiService;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByViewId-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V\": [\n        \"temporaryEnableAccessibilityStateUntilKeyguardRemoved\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activitySlept-(Landroid/os/IBinder;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activityStopped-(Landroid/os/IBinder; Landroid/os/Bundle; Landroid/graphics/Bitmap; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z\": [\n        \"android.permission.BACKUP\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I I)I\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dismissKeyguardOnNextActivity-()V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishReceiver-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/Bundle; Z)V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnails-(I)Landroid/app/ActivityManager$TaskThumbnails;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskTopThumbnail-(I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I Landroid/app/IThumbnailReceiver;)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-goingToSleep-()V\": [\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-handleApplicationCrash-(Landroid/os/IBinder; Landroid/app/ApplicationErrorReport$CrashInfo;)V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-handleApplicationWtf-(Landroid/os/IBinder; Ljava/lang/String; Landroid/app/ApplicationErrorReport$CrashInfo;)Z\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z)J\": [\n        \"android.permission.FILTER_EVENTS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeSubTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V\": [\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setRequestedOrientation-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.SHUTDOWN\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startRunning-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-switchUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unregisterReceiver-(Landroid/content/IIntentReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-wakingUp-()V\": [\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInputEvent-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-getAllPkgUsageStats-()[Lcom/android/internal/os/PkgUsageStats;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-getPkgUsageStats-(Landroid/content/ComponentName;)Lcom/android/internal/os/PkgUsageStats;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-noteLaunchTime-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-notePauseComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-noteResumeComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceAdded-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceLinkStateChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceStatusChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-connectWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-forgetWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-awaken-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-dream-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-getDefaultDreamComponent-()Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-getDreamComponents-()[Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-isDreaming-()Z\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-setDreamComponents-([Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-testDream-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\",\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I)V\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I Ljava/lang/String; I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installExistingPackage-(Ljava/lang/String;)I\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackage-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerification-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/net/Uri; Landroid/content/pm/ManifestDigest; Landroid/content/pm/ContainerEncryptionParams;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerificationAndEncryption-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Landroid/content/pm/ContainerEncryptionParams;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-goToSleep-(J I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-nap-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-reboot-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setStayOnSetting-(I)V\": [\n        \"android.permission.WRITE_SETTINGS\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenBrightnessSettingOverride-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-shutdown-(Z Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-userActivity-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-wakeUp-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I I Landroid/view/IApplicationToken; I I Z Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addDisplayContentChangeListener-(I Landroid/view/IDisplayContentChangeListener;)V\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getFocusedWindowToken-()Landroid/os/IBinder;\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getVisibleWindowsForDisplay-(I Ljava/util/List;)V\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowCompatibilityScale-(Landroid/os/IBinder;)F\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowInfo-(Landroid/os/IBinder;)Landroid/view/WindowInfo;\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-magnifyDisplay-(I F F F)V\": [\n        \"android.permission.MAGNIFY_DISPLAY\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppToken-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToBottom-(Ljava/util/List;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToTop-(Ljava/util/List;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeDisplayContentChangeListener-(I Landroid/view/IDisplayContentChangeListener;)V\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setInputFilter-(Landroid/view/IInputFilter;)V\": [\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-showAssistant-()V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/ti/server/StubFmService;-resumeFm-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxChangeAudioTarget-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxChangeDigitalTargetConfiguration-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxCompleteScan_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisable-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableAudioRouting-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableRds_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnable-()Z\": [\n        \"ti.permission.FMRX\",\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableAudioRouting-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableRds_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetBand-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetBand_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetChannelSpacing-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetChannelSpacing_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetFMState-()I\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetFwVersion-()D\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMuteMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMuteMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask-()J\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsSystem-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsSystem_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssi-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssiThreshold-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssiThreshold_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssi_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetTunedFrequency-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetTunedFrequency_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetVolume-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetVolume_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsEnabled-()Z\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsFMPaused-()Z\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsValidChannel-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSeek_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetBand-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetBand_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetChannelSpacing-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetChannelSpacing_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMuteMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsSystem-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsSystem_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRssiThreshold-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRssiThreshold_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetVolume-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopCompleteScan-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopCompleteScan_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopSeek-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopSeek_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxTune_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txChangeAudioSource-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txChangeDigitalSourceConfiguration-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txDisable-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txDisableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txEnable-()Z\": [\n        \"ti.permission.FMRX\",\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txEnableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txGetFMState-()I\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetMonoStereoMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetPowerLevel-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetPreEmphasisFilter-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsAfCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsECC-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsMusicSpeechFlag-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPiCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPsDisplayMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPsScrollSpeed-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPtyCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextPsMsg-(Ljava/lang/String;)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextRepertoire-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextRtMsg-(I Ljava/lang/String; I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTrafficCodes-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTransmissionMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTransmittedGroupsMask-(J)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txStartTransmission-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txStopTransmission-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txTune-(J)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txWriteRdsRawData-(Ljava/lang/String;)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-removeOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setRequestedOrientation-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AlarmManager;-setTimeZone-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_TIME_ZONE\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-finalize-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBondState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothSocket;-connect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-isProviderEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkPreference-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-setNetworkPreference-(I)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-stopUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-close-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-endCall-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-startAudio-()V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getWifiState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reassociate-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startScan-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-increment-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-restore-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transfer-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-([J I)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(J)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/service/dreams/DreamService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/ZoomButtonsController;-setVisible-(Z)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_18.json",
    "content": "{\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/media/AudioService;-registerMediaButtonEventReceiverForCalls-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-unregisterMediaButtonEventReceiverForCalls-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pService;-setMiracastMode-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScanWithUuids-(I Z [Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Landroid/os/ParcelUuid; I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-roamChanged-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\",\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\",\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-copyMessageToIccEf-(Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-getAllMessagesFromIccEf-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendData-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManager;-updateMessageOnIccEf-(Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-copyMessageToIccEf-(Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-getAllMessagesFromIccEf-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendData-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/IccSmsInterfaceManagerProxy;-updateMessageOnIccEf-(Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceSvn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIccSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1AlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getMsisdn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-disableCellBroadcast-(I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-disableCellBroadcastRange-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-enableCellBroadcast-(I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/cdma/RuimSmsInterfaceManager;-enableCellBroadcastRange-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-disableCellBroadcast-(I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-disableCellBroadcastRange-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-enableCellBroadcast-(I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager;-enableCellBroadcastRange-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-authenticate-(Ljava/lang/String; [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-close-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getCardEmulationRoute-(Ljava/lang/String;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getDriverName-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-open-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-setCardEmulationRoute-(Ljava/lang/String; I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-transceive-(Ljava/lang/String; [B)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-getNfcAdapterExtrasInterface-(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setNdefPushCallback-(Landroid/nfc/INdefPushCallback;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-close-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-cancelMissedCallsNotification-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableApnType-(Ljava/lang/String;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableApnType-(Ljava/lang/String;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-silenceRinger-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-setTime-(J)V\": [\n        \"android.permission.SET_TIME\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-setTimeZone-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_TIME_ZONE\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-finishOperation-(I I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-resetAllModes-()V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-startOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindAppWidgetId-(I Landroid/content/ComponentName; Landroid/os/Bundle; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindAppWidgetIdIfAllowed-(Ljava/lang/String; I Landroid/content/ComponentName; Landroid/os/Bundle; I)Z\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindRemoteViewsService-(I Landroid/content/Intent; Landroid/os/IBinder; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-deleteAppWidgetId-(I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetInfo-(I I)Landroid/appwidget/AppWidgetProviderInfo;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetOptions-(I I)Landroid/os/Bundle;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetViews-(I I)Landroid/widget/RemoteViews;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-notifyAppWidgetViewDataChanged-([I I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-partiallyUpdateAppWidgetIds-([I Landroid/widget/RemoteViews; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-setBindAppWidgetPermission-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-unbindRemoteViewsService-(I Landroid/content/Intent; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetIds-([I Landroid/widget/RemoteViews; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetOptions-(I Landroid/os/Bundle; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetProvider-(Landroid/content/ComponentName; Landroid/widget/RemoteViews; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-backupNow-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-clearBackupData-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z [Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-hasBackupPassword-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-isBackupEnabled-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-listAllTransports-()[Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setAutoRestore-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupEnabled-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupProvisioned-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-captivePortalCheckComplete-(Landroid/net/NetworkInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-findConnectionTypeForIface-(Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileDataEnabled-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkPreference-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfacePairs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetworkTransitionWakelock-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyProperties;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setMobileDataEnabled-(Z)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setNetworkPreference-(I)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setRadio-(I Z)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setRadios-(Z)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startUsingNetworkFeature-(I Ljava/lang/String; Landroid/os/IBinder;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-stopUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-supplyMessenger-(I Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-lockNow-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-wipeData-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;\": [\n        \"android.permission.READ_LOGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Landroid/view/inputmethod/InputMethodInfo; Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-isProviderEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;\": [\n        \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDnsInterfaceForPid-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushDefaultDnsCache-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushInterfaceDnsCache-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-([Ljava/lang/String;)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isClatdStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultInterfaceForDns-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsInterfaceForPid-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForInterface-(Ljava/lang/String; [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopClatd-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NotificationManagerService;-getActiveNotifications-(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;\": [\n        \"android.permission.ACCESS_NOTIFICATIONS\"\n    ],\n    \"Lcom/android/server/NotificationManagerService;-getHistoricalNotifications-(Ljava/lang/String; I)[Landroid/service/notification/StatusBarNotification;\": [\n        \"android.permission.ACCESS_NOTIFICATIONS\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-collapsePanels-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-expandNotificationsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-expandSettingsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onClearAllNotifications-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onPanelRevealed-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; Ljava/util/List; Ljava/util/List; [I Ljava/util/List;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setSystemUiVisibility-(I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-topAppWindowChanged-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/LinkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceState-(Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setDimensionHints-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V\": [\n        \"temporaryEnableAccessibilityStateUntilKeyguardRemoved\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V\": [\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activitySlept-(Landroid/os/IBinder;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activityStopped-(Landroid/os/IBinder; Landroid/os/Bundle; Landroid/graphics/Bitmap; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z\": [\n        \"android.permission.BACKUP\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I I)I\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dismissKeyguardOnNextActivity-()V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishReceiver-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/Bundle; Z)V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnails-(I)Landroid/app/ActivityManager$TaskThumbnails;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskTopThumbnail-(I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I Landroid/app/IThumbnailReceiver;)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTopActivityExtras-(I)Landroid/os/Bundle;\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-goingToSleep-()V\": [\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-handleApplicationCrash-(Landroid/os/IBinder; Landroid/app/ApplicationErrorReport$CrashInfo;)V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-handleApplicationWtf-(Landroid/os/IBinder; Ljava/lang/String; Landroid/app/ApplicationErrorReport$CrashInfo;)Z\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z)J\": [\n        \"android.permission.FILTER_EVENTS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killUid-(I Ljava/lang/String;)V\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeSubTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V\": [\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setRequestedOrientation-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.SHUTDOWN\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startRunning-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-switchUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unregisterReceiver-(Landroid/content/IIntentReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-wakingUp-()V\": [\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInputEvent-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-getAllPkgUsageStats-()[Lcom/android/internal/os/PkgUsageStats;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-getPkgUsageStats-(Landroid/content/ComponentName;)Lcom/android/internal/os/PkgUsageStats;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-noteLaunchTime-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-notePauseComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-noteResumeComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-connectWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-forgetWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-awaken-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-dream-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-getDefaultDreamComponent-()Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-getDreamComponents-()[Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-isDreaming-()Z\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-setDreamComponents-([Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-testDream-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackage-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerification-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/net/Uri; Landroid/content/pm/ManifestDigest; Landroid/content/pm/ContainerEncryptionParams;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerificationAndEncryption-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Landroid/content/pm/ContainerEncryptionParams;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetPreferredActivities-(I)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-goToSleep-(J I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-nap-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-reboot-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setStayOnSetting-(I)V\": [\n        \"android.permission.WRITE_SETTINGS\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenBrightnessSettingOverride-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-shutdown-(Z Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-userActivity-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-wakeUp-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-addToBlacklist-(Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-captivePortalCheckComplete-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-clearBlacklist-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-disconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getConfigFile-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getFrequencyBand-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiApEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiServiceMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiStateMachineMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-initializeMulticastFiltering-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-isMulticastEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-reassociate-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-reconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-releaseMulticastLock-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-releaseWifiLock-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setCountryCode-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setFrequencyBand-(I Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-startScan-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-startWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-stopWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I Z Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getCompatibleMagnificationSpecForWindow-(Landroid/os/IBinder;)Landroid/view/MagnificationSpec;\": [\n        \"android.permission.MAGNIFY_DISPLAY\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getFocusedWindowToken-()Landroid/os/IBinder;\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowFrame-(Landroid/os/IBinder; Landroid/graphics/Rect;)V\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppToken-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToBottom-(Ljava/util/List;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-moveAppTokensToTop-(Ljava/util/List;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setInputFilter-(Landroid/view/IInputFilter;)V\": [\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setMagnificationCallbacks-(Landroid/view/IMagnificationCallbacks;)V\": [\n        \"android.permission.MAGNIFY_DISPLAY\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setMagnificationSpec-(Landroid/view/MagnificationSpec;)V\": [\n        \"android.permission.MAGNIFY_DISPLAY\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-showAssistant-()V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/ti/server/StubFmService;-resumeFm-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxChangeAudioTarget-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxChangeDigitalTargetConfiguration-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxCompleteScan_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisable-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableAudioRouting-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxDisableRds_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnable-()Z\": [\n        \"ti.permission.FMRX\",\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableAudioRouting-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxEnableRds_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetBand-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetBand_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetChannelSpacing-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetChannelSpacing_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetCompleteScanProgress_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetDeEmphasisFilter_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetFMState-()I\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetFwVersion-()D\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMonoStereoMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMuteMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetMuteMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsAfSwitchMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask-()J\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsGroupMask_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsSystem-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRdsSystem_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRfDependentMuteMode_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssi-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssiThreshold-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssiThreshold_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetRssi_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetTunedFrequency-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetTunedFrequency_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetVolume-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxGetVolume_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsEnabled-()Z\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsFMPaused-()Z\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxIsValidChannel-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSeek_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetBand-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetBand_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetChannelSpacing-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetChannelSpacing_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetDeEmphasisFilter_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMonoStereoMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetMuteMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsAfSwitchMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsGroupMask_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsSystem-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRdsSystem_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRfDependentMuteMode_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRssiThreshold-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetRssiThreshold_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxSetVolume-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopCompleteScan-()I\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopCompleteScan_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopSeek-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxStopSeek_nb-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-rxTune_nb-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txChangeAudioSource-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txChangeDigitalSourceConfiguration-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txDisable-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txDisableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txEnable-()Z\": [\n        \"ti.permission.FMRX\",\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txEnableRds-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txGetFMState-()I\": [\n        \"ti.permission.FMRX\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetMonoStereoMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetMuteMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetPowerLevel-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetPreEmphasisFilter-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsAfCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsECC-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsMusicSpeechFlag-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPiCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPsDisplayMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPsScrollSpeed-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsPtyCode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextPsMsg-(Ljava/lang/String;)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextRepertoire-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTextRtMsg-(I Ljava/lang/String; I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTrafficCodes-(I I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTransmissionMode-(I)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txSetRdsTransmittedGroupsMask-(J)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txStartTransmission-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txStopTransmission-()Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txTune-(J)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Lcom/ti/server/StubFmService;-txWriteRdsRawData-(Ljava/lang/String;)Z\": [\n        \"ti.permission.FMRX_ADMIN\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-removeOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setRequestedOrientation-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AlarmManager;-setTimeZone-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_TIME_ZONE\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-finalize-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBondState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getType-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-connect-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-disconnect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothSocket;-connect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-isProviderEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkPreference-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-setNetworkPreference-(I)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-stopUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-close-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-endCall-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-startAudio-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-release-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disconnect-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getWifiState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reassociate-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reconnect-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startScan-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-increment-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-restore-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transfer-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-([J I)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(J)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/service/dreams/DreamService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-unregisterReceiver-(Landroid/content/BroadcastReceiver;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/widget/VideoView;-getAudioSessionId-()I\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/ZoomButtonsController;-setVisible-(Z)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_19.json",
    "content": "{\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/media/AudioService;-registerMediaButtonEventReceiverForCalls-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/media/AudioService;-registerRemoteControlDisplay-(Landroid/media/IRemoteControlDisplay; I I)Z\": [\n        \"android.permission.MEDIA_CONTENT_CONTROL\"\n    ],\n    \"Landroid/media/AudioService;-registerRemoteController-(Landroid/media/IRemoteControlDisplay; I I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.MEDIA_CONTENT_CONTROL\"\n    ],\n    \"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-unregisterMediaButtonEventReceiverForCalls-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pService;-setMiracastMode-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getAdvManufacturerData-()[B\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getAdvServiceData-()[B\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getAdvServiceUuids-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-isAdvertising-()Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeAdvManufacturerCodeAndData-(I)V\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-setAdvManufacturerCodeAndData-(I [B)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-setAdvServiceData-([B)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startAdvertising-(I)V\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScanWithUuids-(I Z [Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopAdvertising-()V\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\",\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\",\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/IccPhoneBookInterfaceManagerProxy;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getDeviceSvn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIccSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1AlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getMsisdn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfo;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/nfc/NfcService$CardEmulationService;-getServices-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$CardEmulationService;-isDefaultServiceForAid-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$CardEmulationService;-isDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$CardEmulationService;-setDefaultForNextTap-(I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$CardEmulationService;-setDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-authenticate-(Ljava/lang/String; [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-close-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getCardEmulationRoute-(Ljava/lang/String;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-getDriverName-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-open-(Ljava/lang/String; Landroid/os/IBinder;)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-setCardEmulationRoute-(Ljava/lang/String; I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterExtrasService;-transceive-(Ljava/lang/String; [B)Landroid/os/Bundle;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-getNfcAdapterExtrasInterface-(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setAppCallback-(Landroid/nfc/IAppCallback;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-close-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/phone/CallCommandService;-rejectCall-(Lcom/android/services/telephony/common/Call; Z Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-addListener-(Lcom/android/internal/telephony/ITelephonyListener;)V\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-cancelMissedCallsNotification-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableApnType-(Ljava/lang/String;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableApnType-(Ljava/lang/String;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-merge-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-mute-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-playDtmfTone-(C Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-removeListener-(Lcom/android/internal/telephony/ITelephonyListener;)V\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-silenceRinger-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-stopDtmfTone-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-swap-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleHold-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-set-(I J J J Landroid/app/PendingIntent; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-setTime-(J)V\": [\n        \"android.permission.SET_TIME\"\n    ],\n    \"Lcom/android/server/AlarmManagerService;-setTimeZone-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_TIME_ZONE\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-resetAllModes-()V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindAppWidgetId-(I Landroid/content/ComponentName; Landroid/os/Bundle; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindAppWidgetIdIfAllowed-(Ljava/lang/String; I Landroid/content/ComponentName; Landroid/os/Bundle; I)Z\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-bindRemoteViewsService-(I Landroid/content/Intent; Landroid/os/IBinder; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-deleteAppWidgetId-(I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetInfo-(I I)Landroid/appwidget/AppWidgetProviderInfo;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetOptions-(I I)Landroid/os/Bundle;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-getAppWidgetViews-(I I)Landroid/widget/RemoteViews;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-notifyAppWidgetViewDataChanged-([I I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-partiallyUpdateAppWidgetIds-([I Landroid/widget/RemoteViews; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-setBindAppWidgetPermission-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-unbindRemoteViewsService-(I Landroid/content/Intent; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetIds-([I Landroid/widget/RemoteViews; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetOptions-(I Landroid/os/Bundle; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/AppWidgetService;-updateAppWidgetProvider-(Landroid/content/ComponentName; Landroid/widget/RemoteViews; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-backupNow-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z [Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-hasBackupPassword-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-isBackupEnabled-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-listAllTransports-()[Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setAutoRestore-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupEnabled-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BackupManagerService;-setBackupProvisioned-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-captivePortalCheckComplete-(Landroid/net/NetworkInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-captivePortalCheckCompleted-(Landroid/net/NetworkInfo; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-checkMobileProvisioning-(I)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-findConnectionTypeForIface-(Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkQualityInfo-()Landroid/net/LinkQualityInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllLinkQualityInfo-()[Landroid/net/LinkQualityInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkQualityInfo-(I)Landroid/net/LinkQualityInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileDataEnabled-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileRedirectedProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkPreference-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getProvisioningOrActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-markSocketAsUser-(Landroid/os/ParcelFileDescriptor; I)V\": [\n        \"android.permission.MARK_NETWORK_SOCKET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetworkTransitionWakelock-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHost-(I I Ljava/lang/String;)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B Ljava/lang/String;)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyProperties;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setMobileDataEnabled-(Z)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setNetworkPreference-(I)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setRadio-(I Z)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setRadios-(Z)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startUsingNetworkFeature-(I Ljava/lang/String; Landroid/os/IBinder;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-stopUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-supplyMessenger-(I Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-installCaCert-([B)Z\": [\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-lockNow-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-uninstallCaCert-([B)V\": [\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/DevicePolicyManagerService;-wipeData-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;\": [\n        \"android.permission.READ_LOGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-updateStatusIcon-(Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-isProviderEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-removeUser-(I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;\": [\n        \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDnsInterfaceForPid-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDnsInterfaceForUidRange-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDnsInterfaceMaps-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearHostExemption-(Landroid/net/LinkAddress;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearMarkedForwarding-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearMarkedForwardingRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearUidRangeRoute-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushDefaultDnsCache-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushInterfaceDnsCache-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getMarkForProtect-()I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getMarkForUid-(I)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isClatdStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeSecondaryRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultInterfaceForDns-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsInterfaceForPid-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsInterfaceForUidRange-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForInterface-(Ljava/lang/String; [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setHostExemption-(Landroid/net/LinkAddress;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setMarkedForwarding-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setMarkedForwardingRoute-(Ljava/lang/String; Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidRangeRoute-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopClatd-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NotificationManagerService;-getActiveNotifications-(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;\": [\n        \"android.permission.ACCESS_NOTIFICATIONS\"\n    ],\n    \"Lcom/android/server/NotificationManagerService;-getHistoricalNotifications-(Ljava/lang/String; I)[Landroid/service/notification/StatusBarNotification;\": [\n        \"android.permission.ACCESS_NOTIFICATIONS\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-collapsePanels-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-expandNotificationsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-expandSettingsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onClearAllNotifications-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-onPanelRevealed-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; Ljava/util/List; Ljava/util/List; [I Ljava/util/List;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-setSystemUiVisibility-(I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/StatusBarManagerService;-topAppWindowChanged-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/LinkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceState-(Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setDimensionHints-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V\": [\n        \"temporaryEnableAccessibilityStateUntilKeyguardRemoved\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V\": [\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activityDestroyed-(Landroid/os/IBinder;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createStack-(I I I F)I\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dismissKeyguardOnNextActivity-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getStackBoxInfo-(I)Landroid/app/ActivityManager$StackBoxInfo;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getStackBoxes-()Ljava/util/List;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnails-(I)Landroid/app/ActivityManager$TaskThumbnails;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskTopThumbnail-(I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I Landroid/app/IThumbnailReceiver;)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-goingToSleep-()V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J\": [\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeSubTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeStackBox-(I F)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-restart-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Ljava/lang/String; Landroid/os/ParcelFileDescriptor; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-switchUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-wakingUp-()V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInputEvent-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-getAllPkgUsageStats-()[Lcom/android/internal/os/PkgUsageStats;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-getPkgUsageStats-(Landroid/content/ComponentName;)Lcom/android/internal/os/PkgUsageStats;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-noteLaunchTime-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-notePauseComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/UsageStatsService;-noteResumeComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-connectWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-createVirtualDisplay-(Landroid/os/IBinder; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I\": [\n        \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n        \"android.permission.CAPTURE_VIDEO_OUTPUT\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-forgetWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-pauseWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-resumeWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-startWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService;-stopWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-awaken-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-dream-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-getDefaultDreamComponent-()Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-getDreamComponents-()[Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-isDreaming-()Z\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-setDreamComponents-([Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService;-testDream-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationBlockedSettingAsUser-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackage-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerification-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/net/Uri; Landroid/content/pm/ManifestDigest; Landroid/content/pm/ContainerEncryptionParams;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageWithVerificationAndEncryption-(Landroid/net/Uri; Landroid/content/pm/IPackageInstallObserver; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Landroid/content/pm/ContainerEncryptionParams;)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetPreferredActivities-(I)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationBlockedSettingAsUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-goToSleep-(J I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-nap-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-reboot-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setStayOnSetting-(I)V\": [\n        \"android.permission.WRITE_SETTINGS\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-setTemporaryScreenBrightnessSettingOverride-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-shutdown-(Z Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-userActivity-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService;-wakeUp-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-createPrinterDiscoverySession-(Landroid/print/IPrinterDiscoveryObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-destroyPrinterDiscoverySession-(Landroid/print/IPrinterDiscoveryObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-getEnabledPrintServices-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-getInstalledPrintServices-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-getPrintJobInfos-(I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-removePrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-restartPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-startPrinterDiscovery-(Landroid/print/IPrinterDiscoveryObserver; Ljava/util/List; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-startPrinterStateTracking-(Landroid/print/PrinterId; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-stopPrinterDiscovery-(Landroid/print/IPrinterDiscoveryObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-stopPrinterStateTracking-(Landroid/print/PrinterId; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService;-validatePrinters-(Ljava/util/List; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-addToBlacklist-(Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-captivePortalCheckComplete-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-clearBlacklist-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-disconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getBatchedScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getConfigFile-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getFrequencyBand-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiApEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiServiceMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-getWifiStateMachineMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-initializeMulticastFiltering-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-isMulticastEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-pollBatchedScan-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-reassociate-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-reconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-releaseMulticastLock-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-releaseWifiLock-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-requestBatchedScan-(Landroid/net/wifi/BatchedScanSettings; Landroid/os/IBinder; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setCountryCode-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setFrequencyBand-(I Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-startScan-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-startWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-stopBatchedScan-(Landroid/net/wifi/BatchedScanSettings;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-stopWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiService;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getCompatibleMagnificationSpecForWindow-(Landroid/os/IBinder;)Landroid/view/MagnificationSpec;\": [\n        \"android.permission.MAGNIFY_DISPLAY\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getFocusedWindowToken-()Landroid/os/IBinder;\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowFrame-(Landroid/os/IBinder; Landroid/graphics/Rect;)V\": [\n        \"android.permission.RETRIEVE_WINDOW_INFO\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I Z)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setInputFilter-(Landroid/view/IInputFilter;)V\": [\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setMagnificationCallbacks-(Landroid/view/IMagnificationCallbacks;)V\": [\n        \"android.permission.MAGNIFY_DISPLAY\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setMagnificationSpec-(Landroid/view/MagnificationSpec;)V\": [\n        \"android.permission.MAGNIFY_DISPLAY\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-moveTaskToBack-(Z)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AlarmManager;-setTimeZone-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_TIME_ZONE\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-finalize-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createBond-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBondState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getType-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPairingConfirmation-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-connect-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-disconnect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothSocket;-connect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-isProviderEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-adjustStreamVolume-(I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-adjustSuggestedStreamVolume-(I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-adjustVolume-(I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setStreamVolume-(I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaRouter$RouteGroup;-requestSetVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteGroup;-requestUpdateVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteInfo;-requestSetVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteInfo;-requestUpdateVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkPreference-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-setNetworkPreference-(I)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-stopUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-close-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-endCall-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-startAudio-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-release-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disconnect-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getWifiState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reassociate-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reconnect-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startScan-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-([J I)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(J)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/service/dreams/DreamService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/widget/VideoView;-getAudioSessionId-()I\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_21.json",
    "content": "{\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/media/AudioService;-disableSafeMediaVolume-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V\": [\n        \"android.permission.CAPTURE_AUDIO_OUTPUT\"\n    ],\n    \"Landroid/media/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/os/IBinder;)Z\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Landroid/media/AudioService;-registerRemoteControlDisplay-(Landroid/media/IRemoteControlDisplay; I I)Z\": [\n        \"android.permission.MEDIA_CONTENT_CONTROL\"\n    ],\n    \"Landroid/media/AudioService;-registerRemoteController-(Landroid/media/IRemoteControlDisplay; I I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.MEDIA_CONTENT_CONTROL\"\n    ],\n    \"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setMicrophoneMute-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/media/AudioService;-setRemoteStreamVolume-(I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getAudioConfig-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAudioConfig;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendPassThroughCmd-(Landroid/bluetooth/BluetoothDevice; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteMasInstances-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.RECEIVE_BLUETOOTH_MAP\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getActivityEnergyInfoFromController-()V\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isActivityAndEnergyReportingSupported-()Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isMultiAdvertisementSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedFilteringSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedScanBatchingSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-reportActivityInfo-()Landroid/bluetooth/BluetoothActivityEnergyInfo;\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-configureMTU-(I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-connectionParameterUpdate-(I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startMultiAdvertising-(I Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseSettings;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z Landroid/bluetooth/le/ScanSettings; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopMultiAdvertising-(I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disableWBS-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-enableWBS-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-acceptCall-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dial-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dialMemory-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-enterPrivateMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-explicitCallTransfer-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgEvents-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgFeatures-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentCalls-(Landroid/bluetooth/BluetoothDevice;)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getLastVoiceTagNumber-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-holdCall-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-redial-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-rejectCall-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-sendDTMF-(Landroid/bluetooth/BluetoothDevice; B)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-terminateCall-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceSvn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSimChallengeResponse-(J I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimIst-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimPcscf-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1AlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getMsisdn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoList-()Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-()Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getSubInfoForSubscriber-(J)Landroid/telephony/SubInfoRecord;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getSubInfoUsingIccId-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getSubInfoUsingSlotId-(I)Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setColor-(I J)I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I J)I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; J)I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; J J)I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; J)I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumberFormat-(I J)I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEf-(Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(J Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcast-(I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(J I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRange-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(J I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcast-(I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(J I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRange-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(J I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEf-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(J Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendData-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(J Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(J Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(J Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(J Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(J Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEf-(Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(J Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-addNfcUnlockHandler-(Landroid/nfc/INfcUnlockHandler; [I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeam-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeamInternal-(Landroid/nfc/BeamShareData;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-pausePolling-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-resumePolling-()V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setAppCallback-(Landroid/nfc/IAppCallback;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-close-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Landroid/nfc/cardemulation/AidGroup;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getServices-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForAid-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-registerAidGroupForService-(I Landroid/content/ComponentName; Landroid/nfc/cardemulation/AidGroup;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-removeAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultForNextTap-(I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setPreferredService-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-unsetPreferredService-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(J)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(J)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableSimplifiedNetworkSettingsForSubscriber-(J Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(J)Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(J)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(J)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(J)Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(J)Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String;)[Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getSimplifiedNetworkSettingsEnabledForSubscriber-(J)Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(J Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I Ljava/lang/String;)[B\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setLine1NumberForDisplayForSubscriber-(J Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setOperatorBrandOverride-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(J Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(J Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(J Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(J Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(J Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(J)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-resetAllModes-()V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-captivePortalCheckCompleted-(Landroid/net/NetworkInfo; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-findConnectionTypeForIface-(Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkQualityInfo-()Landroid/net/LinkQualityInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllLinkQualityInfo-()[Landroid/net/LinkQualityInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkQualityInfo-(I)Landroid/net/LinkQualityInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileRedirectedProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfoForNetwork-(Landroid/net/Network;)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getProvisioningOrActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportBadNetwork-(Landroid/net/Network;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setPolicyDataEnable-(I Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-supplyMessenger-(I Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;\": [\n        \"android.permission.READ_LOGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-updateStatusIcon-(Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsMeasurementsListener-(Landroid/location/IGpsMeasurementsListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsNavigationMessageListener-(Landroid/location/IGpsNavigationMessageListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-removeUser-(I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-addMultimediaMessageDraft-(Ljava/lang/String; Landroid/net/Uri;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-addTextMessageDraft-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-archiveStoredConversation-(Ljava/lang/String; J Z)Z\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-deleteStoredConversation-(Ljava/lang/String; J)Z\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-deleteStoredMessage-(Ljava/lang/String; Landroid/net/Uri;)Z\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(J Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-importMultimediaMessage-(Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; J Z Z)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-importTextMessage-(Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String; J Z Z)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(J Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-sendStoredMessage-(J Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-setAutoPersisting-(Ljava/lang/String; Z)V\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-updateStoredMessageStatus-(Ljava/lang/String; Landroid/net/Uri; Landroid/content/ContentValues;)Z\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;\": [\n        \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushNetworkDnsCache-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isClatdStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopClatd-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-clearScores-()Z\": [\n        \"android.permission.BROADCAST_SCORE_NETWORKS\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-disableScoring-()V\": [\n        \"android.permission.BROADCAST_SCORE_NETWORKS\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V\": [\n        \"android.permission.BROADCAST_SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z\": [\n        \"android.permission.BROADCAST_SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(J Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(J Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallStateForSubscriber-(J I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(J Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(J Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(J I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(J Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(J I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionRealTimeInfo-(Landroid/telephony/DataConnectionRealTimeInfo;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I J Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(J [B)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I J Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForSubscriber-(J Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-computeClickPointInScreen-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindow-(I)Landroid/view/accessibility/AccessibilityWindowInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindows-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getWindowToken-(I)Landroid/os/IBinder;\": [\n        \"getWindowToken\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V\": [\n        \"temporaryEnableAccessibilityStateUntilKeyguardRemoved\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V\": [\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-renameAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activityDestroyed-(Landroid/os/IBinder;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activityIdle-(Landroid/os/IBinder; Landroid/content/res/Configuration; Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activityPaused-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activitySlept-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-activityStopped-(Landroid/os/IBinder; Landroid/os/Bundle; Landroid/os/PersistableBundle; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-attachApplication-(Landroid/app/IApplicationThread;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-backgroundResourcesReleased-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z\": [\n        \"android.permission.CONFIRM_FULL_BACKUP\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-closeSystemDialogs-(Ljava/lang/String;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-convertFromTranslucent-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-convertToTranslucent-(Landroid/os/IBinder; Landroid/app/ActivityOptions;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishActivity-(Landroid/os/IBinder; I Landroid/content/Intent; Z)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishActivityAffinity-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.FORCE_STOP_PACKAGES\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishInstrumentation-(Landroid/app/IApplicationThread; I Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishReceiver-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/Bundle; Z)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishSubActivity-(Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishVoiceTask-(Landroid/service/voice/IVoiceInteractionSession;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.FORCE_STOP_PACKAGES\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProvider-(Landroid/app/IApplicationThread; Ljava/lang/String; I Z)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getHomeActivityToken-()Landroid/os/IBinder;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getProviderMimeType-(Landroid/net/Uri; I)Ljava/lang/String;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;\": [\n        \"android.permission.GET_DETAILED_TASKS\",\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-handleApplicationCrash-(Landroid/os/IBinder; Landroid/app/ApplicationErrorReport$CrashInfo;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-handleApplicationWtf-(Landroid/os/IBinder; Ljava/lang/String; Z Landroid/app/ApplicationErrorReport$CrashInfo;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-keyguardWaitingForActivityDrawn-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killUid-(I Ljava/lang/String;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I)Z\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveActivityTaskToBack-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-noteWakeupAlarm-(Landroid/content/IIntentSender; I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-openContentUri-(Landroid/net/Uri;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-publishContentProviders-(Landroid/app/IApplicationThread; Ljava/util/List;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-publishService-(Landroid/os/IBinder; Landroid/content/Intent; Landroid/os/IBinder;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-releaseActivityInstance-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-releaseSomeActivities-(Landroid/app/IApplicationThread;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProvider-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\",\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I I)Z\": [\n        \"android.permission.REMOVE_TASKS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-reportAssistContextExtras-(Landroid/os/IBinder; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestVisibleBehind-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-restart-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFocusedStack-(I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.SET_SCREEN_COMPATIBILITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.DEVICE_POWER\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.SET_SCREEN_COMPATIBILITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_PROCESS_LIMIT\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PROCESS_LIMIT\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setRequestedOrientation-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setServiceForeground-(Landroid/content/ComponentName; Landroid/os/IBinder; I Landroid/app/Notification; Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.GET_APP_OPS_STATS\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.SHUTDOWN\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityIntentSender-(Landroid/app/IApplicationThread; Landroid/content/IntentSender; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I I Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startInstrumentation-(Landroid/content/ComponentName; Ljava/lang/String; I Landroid/os/Bundle; Landroid/app/IInstrumentationWatcher; Landroid/app/IUiAutomationConnection; I Ljava/lang/String;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startLockTaskMode-(Landroid/os/IBinder;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startLockTaskMode-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startLockTaskModeOnCurrent-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startNextMatchingActivity-(Landroid/os/IBinder; Landroid/content/Intent; Landroid/os/Bundle;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startService-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/ComponentName;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BIND_VOICE_INTERACTION\",\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_TOKENS\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.STOP_APP_SWITCHES\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopLockTaskMode-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopLockTaskModeOnCurrent-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopService-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; I)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopServiceToken-(Landroid/content/ComponentName; Landroid/os/IBinder; I)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbindBackupAgent-(Landroid/content/pm/ApplicationInfo;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbindFinished-(Landroid/os/IBinder; Landroid/content/Intent; Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbindService-(Landroid/app/IServiceConnection;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unregisterReceiver-(Landroid/content/IIntentReceiver;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unstableProviderDied-(Landroid/os/IBinder;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.CHANGE_CONFIGURATION\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.CHANGE_CONFIGURATION\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindAppWidgetId-(Ljava/lang/String; I I Landroid/content/ComponentName; Landroid/os/Bundle;)Z\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent; Landroid/os/IBinder;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-createAppWidgetConfigIntentSender-(Ljava/lang/String; I I)Landroid/content/IntentSender;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-deleteAppWidgetId-(Ljava/lang/String; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetInfo-(Ljava/lang/String; I)Landroid/appwidget/AppWidgetProviderInfo;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetOptions-(Ljava/lang/String; I)Landroid/os/Bundle;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetViews-(Ljava/lang/String; I)Landroid/widget/RemoteViews;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-notifyAppWidgetViewDataChanged-(Ljava/lang/String; [I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-partiallyUpdateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-setBindAppWidgetPermission-(Ljava/lang/String; I Z)V\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-unbindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetOptions-(Ljava/lang/String; I Landroid/os/Bundle;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-backupNow-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z Z Z [Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-fullTransportBackup-([Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-getCurrentTransport-()Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-getDataManagementIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-getDataManagementLabel-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-hasBackupPassword-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-isBackupEnabled-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-listAllTransports-()[Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-setAutoRestore-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-setBackupEnabled-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService;-setBackupProvisioned-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceAdded-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceLinkStateChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceStatusChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndInitializeUser-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/Bundle;)Landroid/os/UserHandle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createUser-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/UserHandle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServicesForUser-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethodsForCurrentUser-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentFeaturesEnabled-(Landroid/content/ComponentName; Landroid/content/ComponentName; I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentFeaturesEnabled-(Landroid/content/ComponentName; Landroid/content/ComponentName; Ljava/util/List; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCert-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I\": [\n        \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n        \"android.permission.CAPTURE_VIDEO_OUTPUT\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-getConfiguration-()Landroid/net/IpConfiguration;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-setConfiguration-(Landroid/net/IpConfiguration;)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V\": [\n        \"android.permission.SET_INPUT_CALIBRATION\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getPowerSaveAppIdWhitelist-()[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; I Landroid/content/IntentSender; I)V\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackage-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String;)V\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String; I)V\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetPreferredActivities-(I)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\",\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setStayOnSetting-(I)V\": [\n        \"android.permission.WRITE_SETTINGS\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfos-(I I)Ljava/util/List;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-restartPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; [I Ljava/util/List;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-topAppWindowChanged-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-acceptRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-cancelMissedCallsNotification-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-clearAccounts-(Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-endCall-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-getCurrentTtyMode-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-isInCall-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-isRinging-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-isTtySupported-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-registerPhoneAccount-(Landroid/telecom/PhoneAccount;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\",\n        \"com.android.server.telecom.permission.REGISTER_PROVIDER_OR_SUBSCRIPTION\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-setSimCallManager-(Landroid/telecom/PhoneAccountHandle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-setUserSelectedOutgoingPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-showInCallScreen-(Z)V\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-silenceRinger-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomServiceImpl;-unregisterPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareTvInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiTvInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeTvInput-(Ljava/lang/String;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryConfigurationStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryEvents-(J J Ljava/lang/String;)Landroid/app/usage/UsageEvents;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryUsageStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-deleteKeyphraseSoundModel-(I Ljava/lang/String;)I\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getKeyphraseSoundModel-(I Ljava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-updateKeyphraseSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect;)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-addToBlacklist-(Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-clearBlacklist-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableAggressiveHandover-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableVerboseLogging-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getAggressiveHandover-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getAllowScansWithTraffic-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getBatchedScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getChannelList-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConfigFile-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionStatistics-()Landroid/net/wifi/WifiConnectionStatistics;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.READ_WIFI_CREDENTIAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getFrequencyBand-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getPrivilegedConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.READ_WIFI_CREDENTIAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getSupportedFeatures-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getVerboseLoggingLevel-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiServiceMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWpsNfcConfigurationToken-(I)Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-initializeMulticastFiltering-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-isMulticastEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-pollBatchedScan-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reassociate-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-releaseMulticastLock-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-releaseWifiLock-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reportActivityInfo-()Landroid/net/wifi/WifiActivityEnergyInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-requestBatchedScan-(Landroid/net/wifi/BatchedScanSettings; Landroid/os/IBinder; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setAllowScansWithTraffic-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setCountryCode-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setFrequencyBand-(I Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-startScan-(Landroid/net/wifi/ScanSettings; Landroid/os/WorkSource;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.LOCATION_HARDWARE\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-startWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-stopBatchedScan-(Landroid/net/wifi/BatchedScanSettings;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-stopWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getP2pStateMachineMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-setMiracastMode-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(Z Z)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I Z)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeAdvertiser-()Landroid/bluetooth/le/BluetoothLeAdvertiser;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeScanner-()Landroid/bluetooth/le/BluetoothLeScanner;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isMultipleAdvertisementSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isOffloadedFilteringSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isOffloadedScanBatchingSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createBond-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBondState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getType-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPairingConfirmation-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-connect-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-disconnect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-requestConnectionPriority-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-requestMtu-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothSocket;-connect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-stopAdvertising-(Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-flushPendingScanResults-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Ljava/util/List; Landroid/bluetooth/le/ScanSettings; Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-stopScan-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-close-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-endCall-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-startAudio-()V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getWifiState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-is5GHzBandSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isDeviceToApRttSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isEnhancedPowerReportingSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isP2pSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isPreferredNetworkOffloadSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isTdlsSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reassociate-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startScan-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-invokeBeam-(Landroid/app/Activity;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-getAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForAid-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForCategory-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-registerAidsForService-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/util/List;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-removeAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-setPreferredService-(Landroid/app/Activity; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-unsetPreferredService-(Landroid/app/Activity;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-increment-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-restore-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transfer-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/service/dreams/DreamService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/telecom/TelecomManager;-isInCall-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telecom/TelecomManager;-showInCallScreen-(Z)V\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/PhoneNumberUtils;-isVoiceMailNumber-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-sendStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-sendStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-sendStickyOrderedBroadcast-(Landroid/content/Intent; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-sendStickyOrderedBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle; Landroid/content/BroadcastReceiver; Landroid/os/Handler; I Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/widget/VideoView;-getAudioSessionId-()I\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_22.json",
    "content": "{\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/media/AudioService;-adjustStreamVolume-(I I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-adjustSuggestedStreamVolume-(I I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-disableSafeMediaVolume-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V\": [\n        \"android.permission.CAPTURE_AUDIO_OUTPUT\"\n    ],\n    \"Landroid/media/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/media/audiopolicy/IAudioPolicyCallback; Z)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Landroid/media/AudioService;-registerRemoteControlDisplay-(Landroid/media/IRemoteControlDisplay; I I)Z\": [\n        \"android.permission.MEDIA_CONTENT_CONTROL\"\n    ],\n    \"Landroid/media/AudioService;-registerRemoteController-(Landroid/media/IRemoteControlDisplay; I I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.MEDIA_CONTENT_CONTROL\"\n    ],\n    \"Landroid/media/AudioService;-requestAudioFocus-(Landroid/media/AudioAttributes; I Landroid/os/IBinder; Landroid/media/IAudioFocusDispatcher; Ljava/lang/String; Ljava/lang/String; I Landroid/media/audiopolicy/IAudioPolicyCallback;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/media/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setFocusPropertiesForPolicy-(I Landroid/media/audiopolicy/IAudioPolicyCallback;)I\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Landroid/media/AudioService;-setMicrophoneMute-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setMode-(I Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Landroid/media/AudioService;-setRemoteStreamVolume-(I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-setRingerModeExternal-(I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-setRingerModeInternal-(I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Landroid/media/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-setStreamVolume-(I I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Landroid/media/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getAudioConfig-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAudioConfig;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpSinkService$BluetoothA2dpSinkBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendPassThroughCmd-(Landroid/bluetooth/BluetoothDevice; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteMasInstances-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.RECEIVE_BLUETOOTH_MAP\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getActivityEnergyInfoFromController-()V\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isActivityAndEnergyReportingSupported-()Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isMultiAdvertisementSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedFilteringSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedScanBatchingSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-reportActivityInfo-()Landroid/bluetooth/BluetoothActivityEnergyInfo;\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-configureMTU-(I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-connectionParameterUpdate-(I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startMultiAdvertising-(I Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseSettings;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z Landroid/bluetooth/le/ScanSettings; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopMultiAdvertising-(I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; I I [B)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disableWBS-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-enableWBS-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-acceptCall-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dial-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dialMemory-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-enterPrivateMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-explicitCallTransfer-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgEvents-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgFeatures-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentCalls-(Landroid/bluetooth/BluetoothDevice;)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getLastVoiceTagNumber-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-holdCall-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-redial-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-rejectCall-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-sendDTMF-(Landroid/bluetooth/BluetoothDevice; B)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-terminateCall-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceSvn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSimChallengeResponse-(I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimIst-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimPcscf-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1AlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getMsisdn-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSenderCallback;-onSendMultipartSmsComplete-(I [I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/SMSDispatcher$SmsSenderCallback;-onSendSmsComplete-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfo-(I)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForIccId-(Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForSimSlotIndex-(I)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoList-()Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-()Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; I J)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setIconTint-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEf-(Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(I Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcast-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRange-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(I I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcast-(I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRange-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(I I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEf-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-injectSmsPdu-([B Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendData-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendText-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEf-(Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(I Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-addNfcUnlockHandler-(Landroid/nfc/INfcUnlockHandler; [I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeam-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeamInternal-(Landroid/nfc/BeamShareData;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-pausePolling-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-resumePolling-()V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setAppCallback-(Landroid/nfc/IAppCallback;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-verifyNfcPermission-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-close-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Landroid/nfc/cardemulation/AidGroup;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getServices-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForAid-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-registerAidGroupForService-(I Landroid/content/ComponentName; Landroid/nfc/cardemulation/AidGroup;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-removeAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultForNextTap-(I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setPreferredService-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-unsetPreferredService-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCallForSubscriber-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(I)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(I)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableVideoCalling-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(I)Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-()Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(I)Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(I)Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String;)[Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getTetherApnRequired-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I Ljava/lang/String;)[B\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isVideoCallingEnabled-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(I Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(I Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.READ_SOCIAL_STREAM\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-resetAllModes-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-captivePortalCheckCompleted-(Landroid/net/NetworkInfo; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-findConnectionTypeForIface-(Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getDefaultNetworkCapabilitiesForUser-(I)[Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLegacyVpnInfo-()Lcom/android/internal/net/LegacyVpnInfo;\": [\n        \"android.permission.CONTROL_VPN\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileRedirectedProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfoForNetwork-(Landroid/net/Network;)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getProvisioningOrActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getVpnConfig-()Lcom/android/internal/net/VpnConfig;\": [\n        \"android.permission.CONTROL_VPN\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-pendingRequestForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.CONTROL_VPN\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportBadNetwork-(Landroid/net/Network;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setDataDependency-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setVpnPackageAuthorization-(Z)V\": [\n        \"android.permission.CONTROL_VPN\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONTROL_VPN\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-supplyMessenger-(I Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;\": [\n        \"android.permission.READ_LOGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-updateStatusIcon-(Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsMeasurementsListener-(Landroid/location/IGpsMeasurementsListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsNavigationMessageListener-(Landroid/location/IGpsNavigationMessageListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addTestProvider-(Ljava/lang/String; Lcom/android/internal/location/ProviderProperties;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeGeofence-(Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;\": [\n        \"android.permission.READ_PROFILE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-removeUser-(I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-addMultimediaMessageDraft-(Ljava/lang/String; Landroid/net/Uri;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-addTextMessageDraft-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-archiveStoredConversation-(Ljava/lang/String; J Z)Z\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-deleteStoredConversation-(Ljava/lang/String; J)Z\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-deleteStoredMessage-(Ljava/lang/String; Landroid/net/Uri;)Z\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(I Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-importMultimediaMessage-(Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; J Z Z)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-importTextMessage-(Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String; J Z Z)Landroid/net/Uri;\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-sendStoredMessage-(I Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-setAutoPersisting-(Ljava/lang/String; Z)V\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-updateStoredMessageStatus-(Ljava/lang/String; Landroid/net/Uri; Landroid/content/ContentValues;)Z\": [\n        \"android.permission.WRITE_SMS\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getVolumeList-()[Landroid/os/storage/StorageVolume;\": [\n        \"android.permission.ACCESS_ALL_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-runMaintenance-()V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setUsbMassStorageEnabled-(Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushNetworkDnsCache-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isClatdStarted-(Ljava/lang/String;)Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6NdOffload-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-clearScores-()Z\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-disableScoring-()V\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-addOnSubscriptionsChangedListener-(Ljava/lang/String; Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(I Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallStateForSubscriber-(I I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(I Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(I Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(I I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionRealTimeInfo-(Landroid/telephony/DataConnectionRealTimeInfo;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(I [B)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I I Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForSubscriber-(I Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindow-(I)Landroid/view/accessibility/AccessibilityWindowInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindows-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getWindowToken-(I)Landroid/os/IBinder;\": [\n        \"getWindowToken\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V\": [\n        \"temporaryEnableAccessibilityStateUntilKeyguardRemoved\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccount-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-copyAccountToUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-editProperties-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByFeatures-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthToken-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Z Landroid/os/Bundle;)V\": [\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-hasFeatures-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccountExplicitly-(Landroid/accounts/Account;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-renameAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-updateCredentials-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Ljava/lang/String; Z Landroid/os/Bundle;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z\": [\n        \"android.permission.CONFIRM_FULL_BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bootAnimationComplete-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getHomeActivityToken-()Landroid/os/IBinder;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;\": [\n        \"android.permission.GET_DETAILED_TASKS\",\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningAppProcesses-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningExternalApplications-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J\": [\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I)Z\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToBack-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-restart-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I\": [\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startLockTaskModeOnCurrent-()V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BIND_VOICE_INTERACTION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopLockTaskModeOnCurrent-()V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-systemBackupRestored-()V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteConnectivityChanged-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindAppWidgetId-(Ljava/lang/String; I I Landroid/content/ComponentName; Landroid/os/Bundle;)Z\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent; Landroid/os/IBinder;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-createAppWidgetConfigIntentSender-(Ljava/lang/String; I)Landroid/content/IntentSender;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-deleteAppWidgetId-(Ljava/lang/String; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetInfo-(Ljava/lang/String; I)Landroid/appwidget/AppWidgetProviderInfo;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetOptions-(Ljava/lang/String; I)Landroid/os/Bundle;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetViews-(Ljava/lang/String; I)Landroid/widget/RemoteViews;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-notifyAppWidgetViewDataChanged-(Ljava/lang/String; [I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-partiallyUpdateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-setBindAppWidgetPermission-(Ljava/lang/String; I Z)V\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-unbindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetOptions-(Ljava/lang/String; I Landroid/os/Bundle;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-backupNow-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z Z Z [Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullTransportBackup-([Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getCurrentTransport-()Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDataManagementIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDataManagementLabel-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-hasBackupPassword-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-isBackupEnabled-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-listAllTransports-()[Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setAutoRestore-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupEnabled-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupProvisioned-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceAdded-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceLinkStateChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceStatusChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndInitializeUser-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/Bundle;)Landroid/os/UserHandle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createUser-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/UserHandle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileWithMinimumFailedPasswordsForWipe-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isRemovingAdmin-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; Landroid/os/PersistableBundle; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCert-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I\": [\n        \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n        \"android.permission.CAPTURE_VIDEO_OUTPUT\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-addListener-(Landroid/net/IEthernetServiceListener;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-getConfiguration-()Landroid/net/IpConfiguration;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-isAvailable-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-removeListener-(Landroid/net/IEthernetServiceListener;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-setConfiguration-(Landroid/net/IpConfiguration;)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getDeviceList-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V\": [\n        \"android.permission.SET_INPUT_CALIBRATION\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-()[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getPowerSaveAppIdWhitelist-()[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdateIfaces-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-openSession-()Landroid/net/INetworkStatsSession;\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; I Landroid/content/IntentSender; I)V\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantPermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackage-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String;)V\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String; I)V\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver; I)V\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetPreferredActivities-(I)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokePermission-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-boostScreenBrightness-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\",\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setStayOnSetting-(I)V\": [\n        \"android.permission.WRITE_SETTINGS\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfos-(I I)Ljava/util/List;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-restartPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-()[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-clearNotificationEffects-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationActionClick-(Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Ljava/lang/String; [Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-(Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; [I Ljava/util/List;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-topAppWindowChanged-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-acceptRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-cancelMissedCallsNotification-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-clearAccounts-(Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-endCall-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getAdnUriForPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getCallCapablePhoneAccounts-()Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getCurrentTtyMode-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getDefaultOutgoingPhoneAccount-(Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getLine1Number-(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getPhoneAccountsSupportingScheme-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-getSimCallManagers-()Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-handlePinMmiForPhoneAccount-(Landroid/telecom/PhoneAccountHandle; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-hasVoiceMailNumber-(Landroid/telecom/PhoneAccountHandle;)Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-isInCall-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-isRinging-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-isTtySupported-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-isVoiceMailNumber-(Landroid/telecom/PhoneAccountHandle; Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-registerPhoneAccount-(Landroid/telecom/PhoneAccount;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\",\n        \"android.permission.REGISTER_CONNECTION_MANAGER\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-setSimCallManager-(Landroid/telecom/PhoneAccountHandle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-setUserSelectedOutgoingPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-showInCallScreen-(Z)V\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-silenceRinger-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/telecom/TelecomService$TelecomServiceImpl;-unregisterPhoneAccount-(Landroid/telecom/PhoneAccountHandle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareTvInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiTvInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeTvInput-(Ljava/lang/String;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryConfigurationStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryEvents-(J J Ljava/lang/String;)Landroid/app/usage/UsageEvents;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryUsageStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setMassStorageBackingFile-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-deleteKeyphraseSoundModel-(I Ljava/lang/String;)I\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getKeyphraseSoundModel-(I Ljava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-updateKeyphraseSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect;)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-addToBlacklist-(Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-clearBlacklist-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disableEphemeralNetwork-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableAggressiveHandover-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableVerboseLogging-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getAggressiveHandover-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getAllowScansWithTraffic-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getBatchedScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getChannelList-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConfigFile-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionStatistics-()Landroid/net/wifi/WifiConnectionStatistics;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.READ_WIFI_CREDENTIAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getFrequencyBand-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getPrivilegedConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.READ_WIFI_CREDENTIAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getSupportedFeatures-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getVerboseLoggingLevel-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiServiceMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWpsNfcConfigurationToken-(I)Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-initializeMulticastFiltering-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-isMulticastEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-pollBatchedScan-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reassociate-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-releaseMulticastLock-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-releaseWifiLock-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reportActivityInfo-()Landroid/net/wifi/WifiActivityEnergyInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-requestBatchedScan-(Landroid/net/wifi/BatchedScanSettings; Landroid/os/IBinder; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setAllowScansWithTraffic-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setCountryCode-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setFrequencyBand-(I Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-startLocationRestrictedScan-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-startScan-(Landroid/net/wifi/ScanSettings; Landroid/os/WorkSource;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-startWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-stopBatchedScan-(Landroid/net/wifi/BatchedScanSettings;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-stopWifi-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getP2pStateMachineMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-setMiracastMode-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(Z Z)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I Z)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppGroupId-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountManager;-addAccountExplicitly-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-addOnAccountsUpdatedListener-(Landroid/accounts/OnAccountsUpdateListener; Landroid/os/Handler; Z)V\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-clearPassword-(Landroid/accounts/Account;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccounts-()[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getAccountsByType-(Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.GET_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getPassword-(Landroid/accounts/Account;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-getUserData-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-invalidateAuthToken-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_ACCOUNTS\",\n        \"android.permission.USE_CREDENTIALS\"\n    ],\n    \"Landroid/accounts/AccountManager;-peekAuthToken-(Landroid/accounts/Account; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-removeAccountExplicitly-(Landroid/accounts/Account;)Z\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setAuthToken-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setPassword-(Landroid/accounts/Account; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/accounts/AccountManager;-setUserData-(Landroid/accounts/Account; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.AUTHENTICATE_ACCOUNTS\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningAppProcesses-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-finalize-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeAdvertiser-()Landroid/bluetooth/le/BluetoothLeAdvertiser;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeScanner-()Landroid/bluetooth/le/BluetoothLeScanner;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isMultipleAdvertisementSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isOffloadedFilteringSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isOffloadedScanBatchingSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createBond-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBondState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getType-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPairingConfirmation-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-connect-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-disconnect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-requestConnectionPriority-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-requestMtu-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothSocket;-connect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-stopAdvertising-(Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-flushPendingScanResults-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Ljava/util/List; Landroid/bluetooth/le/ScanSettings; Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-stopScan-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addTestProvider-(Ljava/lang/String; Z Z Z Z Z Z Z I I)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderEnabled-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderLocation-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-clearTestProviderStatus-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeProximityAlert-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeTestProvider-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderEnabled-(Ljava/lang/String; Z)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderLocation-(Ljava/lang/String; Landroid/location/Location;)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-setTestProviderStatus-(Ljava/lang/String; I Landroid/os/Bundle; J)V\": [\n        \"android.permission.ACCESS_MOCK_LOCATION\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-setProcessDefaultNetwork-(Landroid/net/Network;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/Network;-openConnection-(Ljava/net/URL;)Ljava/net/URLConnection;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-close-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-endCall-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-startAudio-()V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getWifiState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-is5GHzBandSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isDeviceToApRttSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isEnhancedPowerReportingSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isP2pSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isPreferredNetworkOffloadSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isTdlsSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reassociate-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startScan-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-invokeBeam-(Landroid/app/Activity;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-getAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForAid-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForCategory-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-registerAidsForService-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/util/List;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-removeAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-setPreferredService-(Landroid/app/Activity; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-unsetPreferredService-(Landroid/app/Activity;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-increment-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-restore-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transfer-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/service/dreams/DreamService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/telecom/TelecomManager;-isInCall-()Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telecom/TelecomManager;-showInCallScreen-(Z)V\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/PhoneNumberUtils;-isVoiceMailNumber-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SubscriptionManager;-addOnSubscriptionsChangedListener-(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/SubscriptionManager;-getActiveSubscriptionInfo-(I)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/SubscriptionManager;-getActiveSubscriptionInfoCount-()I\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/SubscriptionManager;-getActiveSubscriptionInfoForSimSlotIndex-(I)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/SubscriptionManager;-getActiveSubscriptionInfoList-()Ljava/util/List;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceSoftwareVersion-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;\": [\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/widget/VideoView;-getAudioSessionId-()I\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_23.json",
    "content": "{\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccount-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-addAccountFromCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-confirmCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-editProperties-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountCredentialsForCloning-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAccountRemovalAllowed-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthToken-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-getAuthTokenLabel-(Landroid/accounts/IAccountAuthenticatorResponse; Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-hasFeatures-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; [Ljava/lang/String;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/accounts/AbstractAccountAuthenticator$Transport;-updateCredentials-(Landroid/accounts/IAccountAuthenticatorResponse; Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.ACCOUNT_MANAGER\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getDeviceSvn-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getGroupIdLevel1-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSerialNumber-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIccSimChallengeResponse-(I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimIst-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getIsimPcscf-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1AlphaTag-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getLine1Number-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getMsisdn-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getSubscriberId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailAlphaTag-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoProxy;-getVoiceMailNumber-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSenderCallback;-onSendMultipartSmsComplete-(I [I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfo-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForIccId-(Ljava/lang/String; Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForSimSlotIndex-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoList-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultDataSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultSmsSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultVoiceSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; I J)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setIconTint-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(I Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(I I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(I I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-injectSmsPduForSubscriber-(I [B Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SEND_RESPOND_VIA_MESSAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(I Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-addNfcUnlockHandler-(Landroid/nfc/INfcUnlockHandler; [I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disable-(Z)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-disableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-dispatch-(Landroid/nfc/Tag;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enable-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-enableNdefPush-()Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeam-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-invokeBeamInternal-(Landroid/nfc/BeamShareData;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-pausePolling-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-resumePolling-()V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setAppCallback-(Landroid/nfc/IAppCallback;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setForegroundDispatch-(Landroid/app/PendingIntent; [Landroid/content/IntentFilter; Landroid/nfc/TechListParcel;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-setP2pModes-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/NfcService$NfcAdapterService;-verifyNfcPermission-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-close-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-connect-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-formatNdef-(I [B)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTechList-(I)[I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-getTimeout-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-isNdef-(I)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefMakeReadOnly-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefRead-(I)Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-ndefWrite-(I Landroid/nfc/NdefMessage;)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-reconnect-(I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-rediscover-(I)Landroid/nfc/Tag;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-resetTimeouts-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-setTimeout-(I I)I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/NfcService$TagService;-transceive-(I [B Z)Landroid/nfc/TransceiveResult;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Landroid/nfc/cardemulation/AidGroup;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-getServices-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForAid-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-isDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-registerAidGroupForService-(I Landroid/content/ComponentName; Landroid/nfc/cardemulation/AidGroup;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-removeAidGroupForService-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultForNextTap-(I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setDefaultServiceForCategory-(I Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-setPreferredService-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/nfc/cardemulation/CardEmulationManager$CardEmulationInterface;-unsetPreferredService-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Lcom/android/phone/CarrierConfigLoader;-getConfigForSubId-(I)Landroid/os/PersistableBundle;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/CarrierConfigLoader;-updateConfigForPhoneId-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCallForSubscriber-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-canChangeDtmfToneLength-()Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(I)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(I)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableVideoCalling-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(I)Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-factoryReset-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndex-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndexForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconMode-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconModeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriText-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriTextForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-(Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellNetworkScanResults-(I)Lcom/android/internal/telephony/CellNetworkScanResult;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkType-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaMode-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaModeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getMergedSubscriberIds-(Ljava/lang/String;)[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String; Ljava/lang/String;)[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-(I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getRadioAccessFamily-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getTetherApnRequired-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getVoiceNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I Ljava/lang/String;)[B\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isIdle-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isIdleForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isOffhook-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isOffhookForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRadioOn-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRadioOnForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRinging-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRingingForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isSimPinEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isVideoCallingEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isWorldPhone-()Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeAutomatic-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeManual-(I Lcom/android/internal/telephony/OperatorInfo; Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(I Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(I Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-resetAllModes-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setUidMode-(I I I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.LOCAL_MAC_ADDRESS\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-factoryReset-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetwork-()Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllVpnInfo-()[Lcom/android/internal/net/VpnInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getDefaultNetworkCapabilitiesForUser-(I)[Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLegacyVpnInfo-(I)Lcom/android/internal/net/LegacyVpnInfo;\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfoForNetwork-(Landroid/net/Network;)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getVpnConfig-(I)Lcom/android/internal/net/VpnConfig;\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-pendingListenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-pendingRequestForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportNetworkConnectivity-(Landroid/net/Network; Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestBandwidthUpdate-(Landroid/net/Network;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAcceptUnvalidated-(Landroid/net/Network; Z Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setVpnPackageAuthorization-(Ljava/lang/String; I Z)V\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONTROL_VPN\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startNattKeepalive-(Landroid/net/Network; I Landroid/os/Messenger; Landroid/os/IBinder; Ljava/lang/String; I Ljava/lang/String;)V\": [\n        \"android.permission.PACKET_KEEPALIVE_OFFLOAD\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistApp-(Ljava/lang/String; J I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForMms-(Ljava/lang/String; I Ljava/lang/String;)J\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForSms-(Ljava/lang/String; I Ljava/lang/String;)J\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveWhitelistApp-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-exitIdle-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-removePowerSaveWhitelistApp-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/DropBoxManagerService;-getNextEntry-(Ljava/lang/String; J)Landroid/os/DropBoxManager$Entry;\": [\n        \"android.permission.READ_LOGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-startInput-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; Landroid/view/inputmethod/EditorInfo; I)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-updateStatusIcon-(Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-windowGainedFocus-(Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext;)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsMeasurementsListener-(Landroid/location/IGpsMeasurementsListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsNavigationMessageListener-(Landroid/location/IGpsNavigationMessageListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGpsStatusListener-(Landroid/location/IGpsStatusListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-registerStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-requireStrongAuth-(I I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-unregisterStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-verifyPassword-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-verifyPattern-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(I Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/server/MountService;-benchmark-(Ljava/lang/String;)J\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-forgetAllVolumes-()V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-forgetVolume-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-format-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getPassword-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/MountService;-getPrimaryStorageUuid-()Ljava/lang/String;\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-mount-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionMixed-(Ljava/lang/String; I)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionPrivate-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionPublic-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-runMaintenance-()V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setDebugFlags-(I I)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setPrimaryStorageUuid-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setVolumeNickname-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setVolumeUserFlags-(Ljava/lang/String; I I)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unmount-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-flushNetworkDnsCache-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getRoutes-(Ljava/lang/String;)[Landroid/net/RouteInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isClatdStarted-(Ljava/lang/String;)Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6NdOffload-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setNetworkPermission-(I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidCleartextNetworkPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidNetworkRules-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-clearScores-()Z\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-disableScoring-()V\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-addOnSubscriptionsChangedListener-(Ljava/lang/String; Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(I Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallStateForSubscriber-(I I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCarrierNetworkChange-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(I Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(I Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(I I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionRealTimeInfo-(Landroid/telephony/DataConnectionRealTimeInfo;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(I [B)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I I Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForSubscriber-(I Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-copyAccountToUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Landroid/content/pm/ApplicationInfo; I)Z\": [\n        \"android.permission.CONFIRM_FULL_BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bootAnimationComplete-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createStackOnDisplay-(I)Landroid/app/IActivityContainer;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createVirtualActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getPackageProcessState-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Ljava/util/List;\": [\n        \"android.permission.GET_DETAILED_TASKS\",\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningAppProcesses-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningExternalApplications-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J\": [\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killUid-(I I Ljava/lang/String;)V\": [\n        \"android.permission.KILL_UID\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I Landroid/os/Bundle;)Z\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.START_ANY_ACTIVITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUidObserver-(Landroid/app/IUidObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I)Z\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestAssistContextExtras-(I Lcom/android/internal/os/IResultReceiver; Landroid/os/IBinder;)Z\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestBugReport-()V\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeTask-(I Landroid/graphics/Rect;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-restart-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDumpHeapDebugLimit-(Ljava/lang/String; I J Ljava/lang/String;)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; Z I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I\": [\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startLockTaskModeOnCurrent-()V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BIND_VOICE_INTERACTION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopLockTaskModeOnCurrent-()V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Landroid/app/IStopUserCallback;)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteConnectivityChanged-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteDeviceIdleMode-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetCamera-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetFlashlight-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartCamera-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopCamera-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWakeUp-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRadioPowerState-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-disableSafeMediaVolume-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V\": [\n        \"android.permission.CAPTURE_AUDIO_OUTPUT\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/media/audiopolicy/IAudioPolicyCallback; Z)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-registerRemoteControlDisplay-(Landroid/media/IRemoteControlDisplay; I I)Z\": [\n        \"android.permission.MEDIA_CONTENT_CONTROL\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-registerRemoteController-(Landroid/media/IRemoteControlDisplay; I I Landroid/content/ComponentName;)Z\": [\n        \"android.permission.MEDIA_CONTENT_CONTROL\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-requestAudioFocus-(Landroid/media/AudioAttributes; I Landroid/os/IBinder; Landroid/media/IAudioFocusDispatcher; Ljava/lang/String; Ljava/lang/String; I Landroid/media/audiopolicy/IAudioPolicyCallback;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setFocusPropertiesForPolicy-(I Landroid/media/audiopolicy/IAudioPolicyCallback;)I\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMasterMute-(Z I Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMicrophoneMute-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMode-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setRemoteStreamVolume-(I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setRingerModeInternal-(I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setVolumePolicy-(Landroid/media/VolumePolicy;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceAdded-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceLinkStateChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/Tethering;-interfaceStatusChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterPackagesForAuthorityAsUser-(Ljava/lang/String; I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-choosePrivateKeyAlias-(I Landroid/net/Uri; Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearDeviceInitializer-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearDeviceOwner-(Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndInitializeUser-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/Bundle;)Landroid/os/UserHandle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createUser-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/UserHandle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCertInstallerPackage-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDoNotAskCredentialsOnBoot-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionPolicy-(Landroid/content/ComponentName;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileWithMinimumFailedPasswordsForWipe-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isRemovingAdmin-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyPendingSystemUpdate-(J)V\": [\n        \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setBluetoothContactSharingDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCertInstallerPackage-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceInitializer-(Landroid/content/ComponentName; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabled-(Landroid/content/ComponentName; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionPolicy-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStatusBarDisabled-(Landroid/content/ComponentName; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSystemUpdatePolicy-(Landroid/content/ComponentName; Landroid/app/admin/SystemUpdatePolicy;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; Landroid/os/PersistableBundle;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserEnabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserIcon-(Landroid/content/ComponentName; Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCerts-(Landroid/content/ComponentName; [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I\": [\n        \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n        \"android.permission.CAPTURE_VIDEO_OUTPUT\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-requestColorTransform-(I I)V\": [\n        \"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-authenticate-(Landroid/os/IBinder; J I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\",\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelAuthentication-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelEnrollment-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-enroll-(Landroid/os/IBinder; [B I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-getEnrolledFingerprints-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-hasEnrolledFingerprints-(I Ljava/lang/String;)Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-isHardwareDetected-(J Ljava/lang/String;)Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-postEnroll-(Landroid/os/IBinder;)I\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-preEnroll-(Landroid/os/IBinder;)J\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-remove-(Landroid/os/IBinder; I I Landroid/hardware/fingerprint/IFingerprintServiceReceiver;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-rename-(I I Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-resetTimeout-([B)V\": [\n        \"android.permission.RESET_FINGERPRINT_LOCKOUT\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getDeviceList-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-registerTabletModeChangedListener-(Landroid/hardware/input/ITabletModeChangedListener;)V\": [\n        \"android.permission.TABLET_MODE_LISTENER\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V\": [\n        \"android.permission.SET_INPUT_CALIBRATION\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-factoryReset-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-(Ljava/lang/String;)[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setDeviceIdleMode-(Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdateIfaces-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; Ljava/lang/String; I Landroid/content/IntentSender; I)V\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addOnPermissionsChangeListener-(Landroid/content/pm/IOnPermissionsChangeListener;)V\": [\n        \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(Ljava/lang/String; J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(Ljava/lang/String; J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getMoveStatus-(I)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageGids-(Ljava/lang/String; I)[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPermissionFlags-(Ljava/lang/String; Ljava/lang/String; I)I\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackage-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String;)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; Landroid/content/pm/VerificationParams; Ljava/lang/String; I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPermissionRevokedByPolicy-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MOVE_PACKAGE\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePrimaryStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-registerMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetApplicationPreferences-(I)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetRuntimePermissions-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokeRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setDefaultBrowserPackageName-(Ljava/lang/String; I)Z\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-shouldShowRequestPermissionRationale-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-systemReady-()V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-unregisterMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updateExternalMediaStatus-(Z Z)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updateIntentVerificationStatus-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlags-(Ljava/lang/String; Ljava/lang/String; I I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlagsForAllApps-(I I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyIntentFilter-(I I Ljava/util/List;)V\": [\n        \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-boostScreenBrightness-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\",\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-(Ljava/lang/String;)[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-clearNotificationEffects-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable2-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable2ForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disableForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationActionClick-(Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Lcom/android/internal/statusbar/NotificationVisibility; [Lcom/android/internal/statusbar/NotificationVisibility;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-(Z I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/StatusBarIconList; [I Ljava/util/List;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-topAppWindowChanged-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getDvbDeviceList-()Ljava/util/List;\": [\n        \"android.permission.DVB_DEVICE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-openDvbDevice-(Landroid/media/tv/DvbDeviceInfo; I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.DVB_DEVICE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareTvInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiTvInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeTvInput-(Ljava/lang/String;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-clearWallpaper-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect; Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String; Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponentChecked-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(Z Z)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-lockNow-(Landroid/os/Bundle;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-requestAssistScreenshot-(Lcom/android/internal/app/IAssistScreenshotReceiver;)Z\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppTask-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppWillBeHidden-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayScalingMode-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningAppProcesses-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-authenticate-(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject; Landroid/os/CancellationSignal; I Landroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback; Landroid/os/Handler;)V\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-hasEnrolledFingerprints-()Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-isHardwareDetected-()Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetwork-()Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Landroid/net/ConnectivityManager;-reportNetworkConnectivity-(Landroid/net/Network; Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestBandwidthUpdate-(Landroid/net/Network;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundDispatch-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-disableForegroundNdefPush-(Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundDispatch-(Landroid/app/Activity; Landroid/app/PendingIntent; [Landroid/content/IntentFilter; [L[java/lang/String;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-enableForegroundNdefPush-(Landroid/app/Activity; Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-invokeBeam-(Landroid/app/Activity;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUris-([Landroid/net/Uri; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setBeamPushUrisCallback-(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback; Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessage-(Landroid/nfc/NdefMessage; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setNdefPushMessageCallback-(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/NfcAdapter;-setOnNdefPushCompleteCallback-(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback; Landroid/app/Activity; [Landroid/app/Activity;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-getAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForAid-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-isDefaultServiceForCategory-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-registerAidsForService-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/util/List;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-removeAidsForService-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-setPreferredService-(Landroid/app/Activity; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/cardemulation/CardEmulation;-unsetPreferredService-(Landroid/app/Activity;)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/BasicTagTechnology;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/IsoDep;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyA-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-authenticateSectorWithKeyB-(I [B)Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-decrement-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-increment-(I I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-readBlock-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-restore-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-transfer-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareClassic;-writeBlock-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-readPages-(I)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/MifareUltralight;-writePage-(I [B)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-getNdefMessage-()Landroid/nfc/NdefMessage;\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-makeReadOnly-()Z\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/Ndef;-writeNdefMessage-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-format-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NdefFormatable;-formatReadOnly-(Landroid/nfc/NdefMessage;)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcA;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcB;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcBarcode;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-getTimeout-()I\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-setTimeout-(I)V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcF;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-close-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-connect-()V\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/nfc/tech/NfcV;-transceive-([B)[B\": [\n        \"android.permission.NFC\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/service/dreams/DreamService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/widget/VideoView;-getAudioSessionId-()I\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_24.json",
    "content": "{\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-findNanoAppOnHub-(I Landroid/hardware/location/NanoAppFilter;)[I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-getContextHubHandles-()[I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-getContextHubInfo-(I)Landroid/hardware/location/ContextHubInfo;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-getNanoAppInstanceInfo-(I)Landroid/hardware/location/NanoAppInstanceInfo;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-loadNanoApp-(I Landroid/hardware/location/NanoApp;)I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-registerCallback-(Landroid/hardware/location/IContextHubCallback;)I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-sendMessage-(I I Landroid/hardware/location/ContextHubMessage;)I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-unloadNanoApp-(I)I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getAudioConfig-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAudioConfig;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getMetadata-(Landroid/bluetooth/BluetoothDevice;)Landroid/media/MediaMetadata;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getPlaybackState-(Landroid/bluetooth/BluetoothDevice;)Landroid/media/session/PlaybackState;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getPlayerSettings-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAvrcpPlayerSettings;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendGroupNavigationCmd-(Landroid/bluetooth/BluetoothDevice; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendPassThroughCmd-(Landroid/bluetooth/BluetoothDevice; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-setPlayerApplicationSetting-(Landroid/bluetooth/BluetoothAvrcpPlayerSettings;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBondOutOfBand-(Landroid/bluetooth/BluetoothDevice; I Landroid/bluetooth/OobData;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-factoryReset-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getSimAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isActivityAndEnergyReportingSupported-()Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isMultiAdvertisementSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedFilteringSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedScanBatchingSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-reportActivityInfo-()Landroid/bluetooth/BluetoothActivityEnergyInfo;\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-requestActivityInfo-(Landroid/os/ResultReceiver;)V\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sdpSearch-(Landroid/bluetooth/BluetoothDevice; Landroid/os/ParcelUuid;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setSimAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-configureMTU-(I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-connectionParameterUpdate-(I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-disconnectAll-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-numHwTrackFiltersAvailable-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startMultiAdvertising-(I Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseSettings;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z Landroid/bluetooth/le/ScanSettings; Ljava/util/List; Landroid/os/WorkSource; Ljava/util/List; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\",\n        \"android.permission.PEERS_MAC_ADDRESS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopMultiAdvertising-(I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregAll-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disableWBS-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-enableWBS-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-acceptCall-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dial-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dialMemory-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-enterPrivateMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-explicitCallTransfer-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgEvents-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgFeatures-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentCalls-(Landroid/bluetooth/BluetoothDevice;)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getLastVoiceTagNumber-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-holdCall-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-redial-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-rejectCall-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-sendDTMF-(Landroid/bluetooth/BluetoothDevice; B)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-terminateCall-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/car/CarRadioService;-setPreset-(Landroid/car/hardware/radio/CarRadioPreset;)Z\": [\n        \"android.car.permission.CAR_RADIO\"\n    ],\n    \"Lcom/android/car/ICarImpl;-getCarService-(Ljava/lang/String;)Landroid/os/IBinder;\": [\n        \"android.car.permission.CAR_CAMERA\",\n        \"android.car.permission.CAR_HVAC\",\n        \"android.car.permission.CAR_MOCK_VEHICLE_HAL\",\n        \"android.car.permission.CAR_NAVIGATION_MANAGER\",\n        \"android.car.permission.CAR_PROJECTION\",\n        \"android.car.permission.CAR_RADIO\"\n    ],\n    \"Lcom/android/car/pm/CarPackageManagerService;-setAppBlockingPolicy-(Ljava/lang/String; Landroid/car/content/pm/CarAppBlockingPolicy; I)V\": [\n        \"android.car.permission.CONTROL_APP_BLOCKING\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getCompleteVoiceMailNumberForSubscriber-(I)Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceIdForPhone-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceSvn-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceSvnUsingSubId-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getGroupIdLevel1-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getGroupIdLevel1ForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSerialNumber-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSerialNumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSimChallengeResponse-(I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getImeiForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimIst-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimPcscf-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1AlphaTag-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1AlphaTagForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1Number-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1NumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getMsisdn-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getMsisdnForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getNaiForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getSubscriberId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getSubscriberIdForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailAlphaTag-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailAlphaTagForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailNumber-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailNumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfo-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForIccId-(Ljava/lang/String; Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForSimSlotIndex-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoList-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultDataSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultSmsSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultVoiceSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; I J)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setIconTint-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setSimProvisioningStatus-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-getAdnRecordsInEfForSubscriber-(I I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfByIndexForSubscriber-(I I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfBySearchForSubscriber-(I I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(I Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(I I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(I I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List; Z)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent; Z)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(I Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/phone/CarrierConfigLoader;-getConfigForSubId-(I)Landroid/os/PersistableBundle;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/CarrierConfigLoader;-updateConfigForPhoneId-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCallForSubscriber-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-canChangeDtmfToneLength-()Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(I)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(I)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableVideoCalling-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(I)Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-factoryReset-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndex-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndexForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconMode-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconModeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriText-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriTextForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-(Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellNetworkScanResults-(I)Lcom/android/internal/telephony/CellNetworkScanResult;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkType-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDeviceSoftwareVersionForSlot-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getImeiForSlot-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaMode-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaModeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getMergedSubscriberIds-(Ljava/lang/String;)[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String; Ljava/lang/String;)[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-(I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getRadioAccessFamily-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getServiceStateForSubscriber-(I Ljava/lang/String;)Landroid/telephony/ServiceState;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getTetherApnRequired-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getVoiceNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I I Ljava/lang/String;)[B\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(I Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isIdle-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isIdleForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isOffhook-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isOffhookForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRadioOn-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRadioOnForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRinging-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRingingForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isVideoCallingEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isWorldPhone-()Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-requestModemActivityInfo-(Landroid/os/ResultReceiver;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeAutomatic-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeManual-(I Lcom/android/internal/telephony/OperatorInfo; Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(I Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(I Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/providers/contacts/ProfileProvider;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-resetAllModes-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setUidMode-(I I I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setUserRestriction-(I Z Landroid/os/IBinder; I [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.LOCAL_MAC_ADDRESS\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-factoryReset-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetwork-()Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkForUid-(I Z)Landroid/net/Network;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I Z)Landroid/net/NetworkInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllVpnInfo-()[Lcom/android/internal/net/VpnInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAlwaysOnVpnPackage-(I)Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getDefaultNetworkCapabilitiesForUser-(I)[Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLegacyVpnInfo-(I)Lcom/android/internal/net/LegacyVpnInfo;\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfoForUid-(Landroid/net/Network; I Z)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getVpnConfig-(I)Lcom/android/internal/net/VpnConfig;\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-pendingListenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-pendingRequestForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportNetworkConnectivity-(Landroid/net/Network; Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestBandwidthUpdate-(Landroid/net/Network;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAcceptUnvalidated-(Landroid/net/Network; Z Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAlwaysOnVpnPackage-(I Ljava/lang/String; Z)Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setVpnPackageAuthorization-(Ljava/lang/String; I Z)V\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONTROL_VPN\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startNattKeepalive-(Landroid/net/Network; I Landroid/os/Messenger; Landroid/os/IBinder; Ljava/lang/String; I Ljava/lang/String;)V\": [\n        \"android.permission.PACKET_KEEPALIVE_OFFLOAD\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startTethering-(I Landroid/os/ResultReceiver; Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-stopTethering-(I)V\": [\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistApp-(Ljava/lang/String; J I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForMms-(Ljava/lang/String; I Ljava/lang/String;)J\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForSms-(Ljava/lang/String; I Ljava/lang/String;)J\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveWhitelistApp-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-exitIdle-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-removePowerSaveWhitelistApp-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-clearLastInputMethodWindowForTransition-(Landroid/os/IBinder;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-startInputOrWindowGainedFocus-(I Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext; I)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGnssMeasurementsListener-(Landroid/location/IGnssMeasurementsListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGnssNavigationMessageListener-(Landroid/location/IGnssNavigationMessageListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-registerGnssStatusCallback-(Landroid/location/IGnssStatusListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getSeparateProfileChallengeEnabled-(I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getStrongAuthForUser-(I)I\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-registerStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-requireStrongAuth-(I I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-resetKeyStore-(I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setSeparateProfileChallengeEnabled-(I Z Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-systemReady-()V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-unregisterStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-userPresent-(I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-verifyPassword-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-verifyPattern-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-verifyTiedProfileChallenge-(Ljava/lang/String; Z J I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(I Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/server/MountService;-addUserKeyAuth-(I I [B [B)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-benchmark-(Ljava/lang/String;)J\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-clearPassword-()V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-createUserKey-(I I Z)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-destroyUserKey-(I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-destroyUserStorage-(Ljava/lang/String; I I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixateNewestUserKeyAuth-(I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-forgetAllVolumes-()V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-forgetVolume-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-format-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getField-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-getPassword-()Ljava/lang/String;\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-getPasswordType-()I\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-getPrimaryStorageUuid-()Ljava/lang/String;\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-isConvertibleToFBE-()Z\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-lockUserKey-(I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-mount-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionMixed-(Ljava/lang/String; I)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionPrivate-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionPublic-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-prepareUserStorage-(Ljava/lang/String; I I I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-runMaintenance-()V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setDebugFlags-(I I)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setField-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-setPrimaryStorageUuid-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setVolumeNickname-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setVolumeUserFlags-(Ljava/lang/String; I I)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unlockUserKey-(I I [B [B)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-unmount-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isClatdStarted-(Ljava/lang/String;)Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsConfigurationForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6NdOffload-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setNetworkPermission-(I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidCleartextNetworkPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidMeteredNetworkBlacklist-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidMeteredNetworkWhitelist-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-clearScores-()Z\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-disableScoring-()V\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/RecoverySystemService$BinderService;-clearBcb-()Z\": [\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/RecoverySystemService$BinderService;-setupBcb-(Ljava/lang/String;)Z\": [\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/RecoverySystemService$BinderService;-uncrypt-(Ljava/lang/String; Landroid/os/IRecoverySystemProgressListener;)Z\": [\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-addOnSubscriptionsChangedListener-(Ljava/lang/String; Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(I Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallStateForPhoneId-(I I I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCarrierNetworkChange-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(I Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(I Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(I I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(I [B)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I I Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForPhoneId-(I I Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-disableSelf-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationCenterX-()F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationCenterY-()F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationRegion-()Landroid/graphics/Region;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationScale-()F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindow-(I)Landroid/view/accessibility/AccessibilityWindowInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindows-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-resetMagnification-(Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-setMagnificationScaleAndCenter-(F F F Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-setSoftKeyboardShowMode-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-disableAccessibilityService-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-enableAccessibilityService-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getWindowToken-(I I)Landroid/os/IBinder;\": [\n        \"getWindowToken\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V\": [\n        \"temporaryEnableAccessibilityStateUntilKeyguardRemoved\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addSharedAccountsFromParentUser-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-copyAccountToUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-finishSessionAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/os/Bundle; Z Landroid/os/Bundle; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService$ProcessInfoService;-getProcessStatesAndOomScoresFromPids-([I [I [I)V\": [\n        \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService$ProcessInfoService;-getProcessStatesFromPids-([I [I)V\": [\n        \"android.permission.GET_PROCESS_STATE_AND_OOM_SCORE\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.CONFIRM_FULL_BACKUP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I Ljava/lang/String; I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bootAnimationComplete-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearGrantedUriPermissions-(Ljava/lang/String; I)V\": [\n        \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createStackOnDisplay-(I)Landroid/app/IActivityContainer;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createVirtualActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getGrantedUriPermissions-(Ljava/lang/String; I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getIntentForIntentSender-(Landroid/content/IIntentSender;)Landroid/content/Intent;\": [\n        \"android.permission.GET_INTENT_SENDER_INTENT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getPackageProcessState-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.GET_DETAILED_TASKS\",\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningAppProcesses-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningExternalApplications-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskBounds-(I)Landroid/graphics/Rect;\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskDescriptionIcon-(Ljava/lang/String; I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J\": [\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killPackageDependents-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_UID\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killUid-(I I Ljava/lang/String;)V\": [\n        \"android.permission.KILL_UID\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I Landroid/os/Bundle;)Z\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToDockedStack-(I I Z Z Landroid/graphics/Rect; Z)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTasksToFullscreenStack-(I Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTopActivityToPinnedStack-(I Landroid/graphics/Rect;)Z\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-positionTaskInStack-(I I I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerTaskStackListener-(Landroid/app/ITaskStackListener;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUidObserver-(Landroid/app/IUidObserver; I)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeStack-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestAssistContextExtras-(I Lcom/android/internal/os/IResultReceiver; Landroid/os/Bundle; Landroid/os/IBinder; Z Z)Z\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestBugReport-(I)V\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeDockedStack-(Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizePinnedStack-(Landroid/graphics/Rect; Landroid/graphics/Rect;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect; Z Z Z I)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeTask-(I Landroid/graphics/Rect; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-restart-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-sendIdleJobTrigger-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDumpHeapDebugLimit-(Ljava/lang/String; I J Ljava/lang/String;)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFocusedStack-(I)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFocusedTask-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLenientBackgroundCheck-(Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z Z)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setTaskDescription-(Landroid/os/IBinder; Landroid/app/ActivityManager$TaskDescription;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; Z I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startBinderTracking-()Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startConfirmDeviceCredentialIntent-(Landroid/content/Intent;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startSystemLockTaskMode-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BIND_VOICE_INTERACTION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopBinderTrackingAndDump-(Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopLockTaskMode-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopService-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopServiceToken-(Landroid/content/ComponentName; Landroid/os/IBinder; I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopSystemLockTaskMode-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Z Landroid/app/IStopUserCallback;)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-suppressResizeConfigChanges-(Z)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-swapDockedAndFullscreenStack-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbindService-(Landroid/app/IServiceConnection;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unlockUser-(I [B [B Landroid/os/IProgressListener;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBleScanStarted-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBleScanStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothControllerActivity-(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteConnectivityChanged-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteDeviceIdleMode-(I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteModemControllerActivity-(Landroid/telephony/ModemActivityInfo;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetBleScan-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetCamera-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetFlashlight-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartCamera-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopCamera-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWakeUp-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiControllerActivity-(Landroid/net/wifi/WifiActivityEnergyInfo;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRadioPowerState-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-takeUidSnapshot-(I)Landroid/os/health/HealthStatsParceler;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-takeUidSnapshots-([I)[Landroid/os/health/HealthStatsParceler;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindAppWidgetId-(Ljava/lang/String; I I Landroid/content/ComponentName; Landroid/os/Bundle;)Z\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent; Landroid/os/IBinder;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-createAppWidgetConfigIntentSender-(Ljava/lang/String; I I)Landroid/content/IntentSender;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-deleteAppWidgetId-(Ljava/lang/String; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetInfo-(Ljava/lang/String; I)Landroid/appwidget/AppWidgetProviderInfo;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetOptions-(Ljava/lang/String; I)Landroid/os/Bundle;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetViews-(Ljava/lang/String; I)Landroid/widget/RemoteViews;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-notifyAppWidgetViewDataChanged-(Ljava/lang/String; [I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-partiallyUpdateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-setBindAppWidgetPermission-(Ljava/lang/String; I Z)V\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-unbindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetOptions-(Ljava/lang/String; I Landroid/os/Bundle;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-disableSafeMediaVolume-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V\": [\n        \"android.permission.CAPTURE_AUDIO_OUTPUT\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/media/audiopolicy/IAudioPolicyCallback; Z)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-requestAudioFocus-(Landroid/media/AudioAttributes; I Landroid/os/IBinder; Landroid/media/IAudioFocusDispatcher; Ljava/lang/String; Ljava/lang/String; I Landroid/media/audiopolicy/IAudioPolicyCallback;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setFocusPropertiesForPolicy-(I Landroid/media/audiopolicy/IAudioPolicyCallback;)I\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMasterMute-(Z I Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMicrophoneMute-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMode-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setRingerModeInternal-(I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setVolumePolicy-(Landroid/media/VolumePolicy;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-backupNow-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z Z Z [Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullTransportBackup-([Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getAvailableRestoreToken-(Ljava/lang/String;)J\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getCurrentTransport-()Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDataManagementIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDataManagementLabel-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-hasBackupPassword-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-isAppEligibleForBackup-(Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-isBackupEnabled-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-listAllTransports-()[Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-requestBackup-([Ljava/lang/String; Landroid/app/backup/IBackupObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-restoreAtInstall-(Ljava/lang/String; I)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setAutoRestore-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupEnabled-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupProvisioned-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCache-(Ljava/lang/String; Landroid/net/Uri; I)Landroid/os/Bundle;\": [\n        \"android.permission.CACHE_CONTENT\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterPackagesForAuthorityAsUser-(Ljava/lang/String; I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-putCache-(Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; I)V\": [\n        \"android.permission.CACHE_CONTENT\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-approveCaCert-(Ljava/lang/String; I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-choosePrivateKeyAlias-(I Landroid/net/Uri; Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearDeviceOwner-(Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndManageUser-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/PersistableBundle; I)Landroid/os/UserHandle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-forceRemoveActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAlwaysOnVpnPackage-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictionsManagingPackage-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCertInstallerPackage-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileContactsSearchDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileContactsSearchDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerComponent-(Z)Landroid/content/ComponentName;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerUserId-()I\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDoNotAskCredentialsOnBoot-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getForceEphemeralUsers-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeepUninstalledPackages-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLongSupportMessage-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLongSupportMessageForUser-(Landroid/content/ComponentName; I)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I Z)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLockForUserAndProfiles-(I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationColor-(Landroid/content/ComponentName;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationColorForUser-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationName-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationNameForUser-(I)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I Z)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I Z)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionPolicy-(Landroid/content/ComponentName;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServicesForUser-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethodsForCurrentUser-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileWithMinimumFailedPasswordsForWipe-(I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getShortSupportMessage-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getShortSupportMessageForUser-(Landroid/content/ComponentName; I)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; I Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getUserProvisioningState-()I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getUserRestrictions-(Landroid/content/ComponentName;)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getWifiMacAddress-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B [B Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAccessibilityServicePermittedByAdmin-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAffiliatedUser-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isCaCertApproved-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isCallerApplicationRestrictionsManagingPackage-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isInputMethodPermittedByAdmin-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isManagedProfile-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isPackageSuspended-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isProfileActivePasswordSufficientForParent-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isProvisioningAllowed-(Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isRemovingAdmin-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isSecurityLoggingEnabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isSystemOnlyUser-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallInQueue-(Ljava/lang/String;)Z\": [\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-(Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyPendingSystemUpdate-(J)V\": [\n        \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reboot-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeKeyPair-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedFingerprintAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportKeyguardDismissed-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportKeyguardSecured-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulFingerprintAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-requestBugreport-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-retrievePreRebootSecurityLogs-(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-retrieveSecurityLogs-(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAffiliationIds-(Landroid/content/ComponentName; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAlwaysOnVpnPackage-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictionsManagingPackage-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setBluetoothContactSharingDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCertInstallerPackage-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileContactsSearchDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwnerLockScreenInfo-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setForceEphemeralUsers-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeepUninstalledPackages-(Landroid/content/ComponentName; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabled-(Landroid/content/ComponentName; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLongSupportMessage-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationColor-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationColorForUser-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationName-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPackagesSuspended-(Landroid/content/ComponentName; [Ljava/lang/String; Z)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionPolicy-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecurityLoggingEnabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setShortSupportMessage-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStatusBarDisabled-(Landroid/content/ComponentName; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSystemUpdatePolicy-(Landroid/content/ComponentName; Landroid/app/admin/SystemUpdatePolicy;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; Landroid/os/PersistableBundle; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserIcon-(Landroid/content/ComponentName; Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserProvisioningState-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCerts-(Landroid/content/ComponentName; [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallPackageWithActiveAdmins-(Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I\": [\n        \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n        \"android.permission.CAPTURE_VIDEO_OUTPUT\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-requestColorTransform-(I I)V\": [\n        \"android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-addListener-(Landroid/net/IEthernetServiceListener;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-getConfiguration-()Landroid/net/IpConfiguration;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-isAvailable-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-removeListener-(Landroid/net/IEthernetServiceListener;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-setConfiguration-(Landroid/net/IpConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-authenticate-(Landroid/os/IBinder; J I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\",\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelAuthentication-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelEnrollment-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-enroll-(Landroid/os/IBinder; [B I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-getEnrolledFingerprints-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-hasEnrolledFingerprints-(I Ljava/lang/String;)Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-isHardwareDetected-(J Ljava/lang/String;)Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-postEnroll-(Landroid/os/IBinder;)I\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-preEnroll-(Landroid/os/IBinder;)J\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-remove-(Landroid/os/IBinder; I I I Landroid/hardware/fingerprint/IFingerprintServiceReceiver;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-rename-(I I Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-resetTimeout-([B)V\": [\n        \"android.permission.RESET_FINGERPRINT_LOCKOUT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-setActiveUser-(I)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getDeviceList-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-isInTabletMode-()I\": [\n        \"android.permission.TABLET_MODE\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-registerTabletModeChangedListener-(Landroid/hardware/input/ITabletModeChangedListener;)V\": [\n        \"android.permission.TABLET_MODE\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Landroid/view/inputmethod/InputMethodInfo; Landroid/view/inputmethod/InputMethodSubtype; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V\": [\n        \"android.permission.SET_INPUT_CALIBRATION\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-scheduleAsPackage-(Landroid/app/job/JobInfo; Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-addRestrictBackgroundWhitelistedUid-(I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-factoryReset-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-(Ljava/lang/String;)[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackgroundByCaller-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackgroundWhitelistedUids-()[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-onTetheringChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-removeRestrictBackgroundWhitelistedUid-(I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setConnectivityListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setDeviceIdleMode-(Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdateIfaces-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-registerUsageCallback-(Ljava/lang/String; Landroid/net/DataUsageRequest; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/DataUsageRequest;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\",\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; Ljava/lang/String; I Landroid/content/IntentSender; I)V\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addOnPermissionsChangeListener-(Landroid/content/pm/IOnPermissionsChangeListener;)V\": [\n        \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFilesAsUser-(Ljava/lang/String; I Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-flushPackageRestrictionsAsUser-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(Ljava/lang/String; J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(Ljava/lang/String; J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getMoveStatus-(I)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageGids-(Ljava/lang/String; I I)[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPermissionFlags-(Ljava/lang/String; Ljava/lang/String; I)I\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isEphemeralApplication-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPackageSuspendedForUser-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPermissionRevokedByPolicy-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MOVE_PACKAGE\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePrimaryStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-registerMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetApplicationPreferences-(I)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetRuntimePermissions-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokeRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setDefaultBrowserPackageName-(Ljava/lang/String; I)Z\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setHomeActivity-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackagesSuspendedAsUser-([Ljava/lang/String; Z I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-shouldShowRequestPermissionRationale-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-systemReady-()V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-unregisterMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updateExternalMediaStatus-(Z Z)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updateIntentVerificationStatus-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlags-(Ljava/lang/String; Ljava/lang/String; I I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlagsForAllApps-(I I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyIntentFilter-(I I Ljava/util/List;)V\": [\n        \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/ShortcutService;-onApplicationActive-(Ljava/lang/String; I)V\": [\n        \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-boostScreenBrightness-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\",\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-rebootSafeMode-(Z Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfos-(I I)Ljava/util/List;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-restartPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-(Ljava/lang/String;)[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-deleteSoundModel-(Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-getSoundModel-(Landroid/os/ParcelUuid;)Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-startRecognition-(Landroid/os/ParcelUuid; Landroid/hardware/soundtrigger/IRecognitionStatusCallback; Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-stopRecognition-(Landroid/os/ParcelUuid; Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-updateSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)V\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-addTile-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-clearNotificationEffects-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-clickTile-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable2-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable2ForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disableForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-(Ljava/lang/String;)V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationActionClick-(Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Lcom/android/internal/statusbar/NotificationVisibility; [Lcom/android/internal/statusbar/NotificationVisibility;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-(Z I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Ljava/util/List; Ljava/util/List; [I Ljava/util/List; Landroid/graphics/Rect; Landroid/graphics/Rect;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-remTile-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getDvbDeviceList-()Ljava/util/List;\": [\n        \"android.permission.DVB_DEVICE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-openDvbDevice-(Landroid/media/tv/DvbDeviceInfo; I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.DVB_DEVICE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-unblockContent-(Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeHardwareInput-(Ljava/lang/String;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-onCarrierPrivilegedAppsChanged-()V\": [\n        \"android.permission.BIND_CARRIER_SERVICES\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryConfigurationStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryEvents-(J J Ljava/lang/String;)Landroid/app/usage/UsageEvents;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryUsageStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-setAppInactive-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_APP_IDLE_STATE\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-getPortStatus-(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-getPorts-()[Landroid/hardware/usb/UsbPort;\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-isFunctionEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setPortRoles-(Ljava/lang/String; I I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setUsbDataUnlocked-(Z)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-activeServiceSupportsAssist-()Z\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-activeServiceSupportsLaunchFromKeyguard-()Z\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-deleteKeyphraseSoundModel-(I Ljava/lang/String;)I\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getActiveServiceComponentName-()Landroid/content/ComponentName;\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getKeyphraseSoundModel-(I Ljava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-hideCurrentSession-()V\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-isSessionRunning-()Z\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-launchVoiceAssistFromKeyguard-()V\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-onLockscreenShown-()V\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-showSessionForActiveService-(Landroid/os/Bundle; I Lcom/android/internal/app/IVoiceInteractionSessionShowCallback; Landroid/os/IBinder;)Z\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-updateKeyphraseSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-clearWallpaper-(Ljava/lang/String; I I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect; Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setLockWallpaperCallback-(Landroid/app/IWallpaperManagerCallback;)Z\": [\n        \"android.permission.INTERNAL_SYSTEM_WINDOW\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String; Ljava/lang/String; Landroid/graphics/Rect; Z Landroid/os/Bundle; I Landroid/app/IWallpaperManagerCallback;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponentChecked-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/webkit/WebViewUpdateService$BinderService;-changeProviderAndSetting-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/webkit/WebViewUpdateService$BinderService;-enableFallbackLogic-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-addToBlacklist-(Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-clearBlacklist-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disableEphemeralNetwork-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableAggressiveHandover-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableVerboseLogging-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableWifiConnectivityManager-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-factoryReset-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getAggressiveHandover-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getAllowScansWithTraffic-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConfigFile-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionStatistics-()Landroid/net/wifi/WifiConnectionStatistics;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.READ_WIFI_CREDENTIAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getCountryCode-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getCurrentNetwork-()Landroid/net/Network;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getEnableAutoJoinWhenAssociated-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getFrequencyBand-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getMatchingWifiConfig-(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getPrivilegedConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.READ_WIFI_CREDENTIAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.PEERS_MAC_ADDRESS\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getSupportedFeatures-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getVerboseLoggingLevel-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiServiceMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWpsNfcConfigurationToken-(I)Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-initializeMulticastFiltering-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-isMulticastEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reassociate-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-releaseMulticastLock-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-releaseWifiLock-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reportActivityInfo-()Landroid/net/wifi/WifiActivityEnergyInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-requestActivityInfo-(Landroid/os/ResultReceiver;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setAllowScansWithTraffic-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setCountryCode-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setEnableAutoJoinWhenAssociated-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setFrequencyBand-(I Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-startScan-(Landroid/net/wifi/ScanSettings; Landroid/os/WorkSource;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getP2pStateMachineMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-setMiracastMode-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z Landroid/graphics/Rect; Landroid/content/res/Configuration; I Z Z I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensity-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(I)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-lockNow-(Landroid/os/Bundle;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-notifyAppStopped-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-registerDockedStackListener-(Landroid/view/IDockedStackListener;)V\": [\n        \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-registerShortcutKey-(J Lcom/android/internal/policy/IShortcutService;)V\": [\n        \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-requestAssistScreenshot-(Lcom/android/internal/app/IAssistScreenshotReceiver;)Z\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I F)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppTask-(Landroid/os/IBinder; I I Landroid/graphics/Rect; Landroid/content/res/Configuration; I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensity-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayScalingMode-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)[I\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-stopLockTask-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningAppProcesses-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/JobSchedulerImpl;-schedule-(Landroid/app/job/JobInfo;)I\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Service;-stopSelf-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Service;-stopSelf-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Service;-stopSelfResult-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap; Landroid/graphics/Rect; Z)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap; Landroid/graphics/Rect; Z I)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I I)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream; Landroid/graphics/Rect; Z)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream; Landroid/graphics/Rect; Z I)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/admin/DevicePolicyManager;-getWifiMacAddress-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupManager;-dataChanged-()V\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Landroid/app/backup/BackupManager;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeAdvertiser-()Landroid/bluetooth/le/BluetoothLeAdvertiser;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeScanner-()Landroid/bluetooth/le/BluetoothLeScanner;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isMultipleAdvertisementSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isOffloadedFilteringSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isOffloadedScanBatchingSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback; I)Landroid/bluetooth/BluetoothGatt;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createBond-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBondState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getType-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPairingConfirmation-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-connect-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-disconnect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-requestConnectionPriority-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-requestMtu-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothSocket;-connect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-stopAdvertising-(Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-flushPendingScanResults-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Ljava/util/List; Landroid/bluetooth/le/ScanSettings; Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-stopScan-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-authenticate-(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject; Landroid/os/CancellationSignal; I Landroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback; Landroid/os/Handler;)V\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-hasEnrolledFingerprints-()Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-isHardwareDetected-()Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/OnNmeaMessageListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/OnNmeaMessageListener; Landroid/os/Handler;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-registerGnssStatusCallback-(Landroid/location/GnssStatus$Callback;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-registerGnssStatusCallback-(Landroid/location/GnssStatus$Callback; Landroid/os/Handler;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-adjustStreamVolume-(I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setStreamMute-(I Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-setStreamVolume-(I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaRouter$RouteGroup;-requestSetVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteGroup;-requestUpdateVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteInfo;-requestSetVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteInfo;-requestUpdateVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaScannerConnection;-disconnect-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/browse/MediaBrowser;-disconnect-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetwork-()Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getRestrictBackgroundStatus-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerDefaultNetworkCallback-(Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Landroid/net/ConnectivityManager;-reportNetworkConnectivity-(Landroid/net/Network; Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestBandwidthUpdate-(Landroid/net/Network;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-onRevoke-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-close-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-endCall-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-startAudio-()V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-cancelWps-(Landroid/net/wifi/WifiManager$WpsCallback;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getWifiState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-is5GHzBandSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isDeviceToApRttSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isEnhancedPowerReportingSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isP2pSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isPreferredNetworkOffloadSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isTdlsSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reassociate-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startScan-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startWps-(Landroid/net/wifi/WpsInfo; Landroid/net/wifi/WifiManager$WpsCallback;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/security/KeyChain;-getCertificateChain-(Landroid/content/Context; Ljava/lang/String;)[Ljava/security/cert/X509Certificate;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/security/KeyChain;-getPrivateKey-(Landroid/content/Context; Ljava/lang/String;)Ljava/security/PrivateKey;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchGenericMotionEvent-(Landroid/view/MotionEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchKeyEvent-(Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchKeyShortcutEvent-(Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchTouchEvent-(Landroid/view/MotionEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchTrackballEvent-(Landroid/view/MotionEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-finish-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-onWakeUp-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-wakeUp-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/SpeechRecognizer;-destroy-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getAvailableLanguages-()Ljava/util/Set;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getDefaultLanguage-()Ljava/util/Locale;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getDefaultVoice-()Landroid/speech/tts/Voice;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getFeatures-(Ljava/util/Locale;)Ljava/util/Set;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getLanguage-()Ljava/util/Locale;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getVoice-()Landroid/speech/tts/Voice;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getVoices-()Ljava/util/Set;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-isLanguageAvailable-(Ljava/util/Locale;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-isSpeaking-()Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-playEarcon-(Ljava/lang/String; I Landroid/os/Bundle; Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-playEarcon-(Ljava/lang/String; I Ljava/util/HashMap;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-playSilence-(J I Ljava/util/HashMap;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-playSilentUtterance-(J I Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-setLanguage-(Ljava/util/Locale;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-setVoice-(Landroid/speech/tts/Voice;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-shutdown-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-speak-(Ljava/lang/CharSequence; I Landroid/os/Bundle; Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-speak-(Ljava/lang/String; I Ljava/util/HashMap;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-stop-()I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-synthesizeToFile-(Ljava/lang/CharSequence; Landroid/os/Bundle; Ljava/io/File; Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-synthesizeToFile-(Ljava/lang/String; Ljava/util/HashMap; Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/telephony/PhoneNumberUtils;-isVoiceMailNumber-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceId-(I)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getIccAuthentication-(I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getPhoneCount-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimState-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/inputmethod/InputMethodManager;-showInputMethodAndSubtypeEnabler-(Ljava/lang/String;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\"\n    ],\n    \"Landroid/widget/VideoView;-getAudioSessionId-()I\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/api_specific_resources/api_permission_mappings/permissions_25.json",
    "content": "{\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-disableActivityEvent-(Ljava/lang/String; I)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-enableActivityEvent-(Ljava/lang/String; I J)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-flush-()Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-getSupportedActivities-()[Ljava/lang/String;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-isActivitySupported-(Ljava/lang/String;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-registerSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ActivityRecognitionHardware;-unregisterSink-(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-findNanoAppOnHub-(I Landroid/hardware/location/NanoAppFilter;)[I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-getContextHubHandles-()[I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-getContextHubInfo-(I)Landroid/hardware/location/ContextHubInfo;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-getNanoAppInstanceInfo-(I)Landroid/hardware/location/NanoAppInstanceInfo;\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-loadNanoApp-(I Landroid/hardware/location/NanoApp;)I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-registerCallback-(Landroid/hardware/location/IContextHubCallback;)I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-sendMessage-(I I Landroid/hardware/location/ContextHubMessage;)I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Landroid/hardware/location/ContextHubService;-unloadNanoApp-(I)I\": [\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dp/A2dpService$BluetoothA2dpBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getAudioConfig-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAudioConfig;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/a2dpsink/A2dpSinkService$BluetoothA2dpSinkBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getMetadata-(Landroid/bluetooth/BluetoothDevice;)Landroid/media/MediaMetadata;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getPlaybackState-(Landroid/bluetooth/BluetoothDevice;)Landroid/media/session/PlaybackState;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-getPlayerSettings-(Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothAvrcpPlayerSettings;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendGroupNavigationCmd-(Landroid/bluetooth/BluetoothDevice; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-sendPassThroughCmd-(Landroid/bluetooth/BluetoothDevice; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/avrcp/AvrcpControllerService$BluetoothAvrcpControllerBinder;-setPlayerApplicationSetting-(Landroid/bluetooth/BluetoothAvrcpPlayerSettings;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelBondProcess-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-configHciSnoopLog-(Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-connectSocket-(Landroid/bluetooth/BluetoothDevice; I Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBond-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createBondOutOfBand-(Landroid/bluetooth/BluetoothDevice; I Landroid/bluetooth/OobData;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-createSocketChannel-(I Ljava/lang/String; Landroid/os/ParcelUuid; I I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-factoryReset-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-fetchRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAdapterConnectionState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getBondedDevices-()[Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getDiscoverableTimeout-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteAlias-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteClass-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteName-(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteType-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getRemoteUuids-(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getSimAccessPermission-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isActivityAndEnergyReportingSupported-()Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isMultiAdvertisementSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedFilteringSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-isOffloadedScanBatchingSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-removeBond-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-reportActivityInfo-()Landroid/bluetooth/BluetoothActivityEnergyInfo;\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-requestActivityInfo-(Landroid/os/ResultReceiver;)V\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sdpSearch-(Landroid/bluetooth/BluetoothDevice; Landroid/os/ParcelUuid;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-sendConnectionStateChange-(Landroid/bluetooth/BluetoothDevice; I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setDiscoverableTimeout-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setMessageAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPairingConfirmation-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPasskey-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPhonebookAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setPin-(Landroid/bluetooth/BluetoothDevice; Z I [B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setRemoteAlias-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setScanMode-(I I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-setSimAccessPermission-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/btservice/AdapterService$AdapterServiceBinder;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addCharacteristic-(I Landroid/os/ParcelUuid; I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addDescriptor-(I Landroid/os/ParcelUuid; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-addIncludedService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginReliableWrite-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-beginServiceDeclaration-(I I I I Landroid/os/ParcelUuid; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clearServices-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientConnect-(I Ljava/lang/String; Z I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-clientDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-configureMTU-(I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-connectionParameterUpdate-(I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-disconnectAll-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-discoverServices-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endReliableWrite-(I Ljava/lang/String; Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-endServiceDeclaration-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-numHwTrackFiltersAvailable-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readCharacteristic-(I Ljava/lang/String; I I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readDescriptor-(I Ljava/lang/String; I I)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-readRemoteRssi-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-refreshDevice-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerClient-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerForNotification-(I Ljava/lang/String; I Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-registerServer-(Landroid/os/ParcelUuid; Landroid/bluetooth/IBluetoothGattServerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-removeService-(I I I Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendNotification-(I Ljava/lang/String; I I Landroid/os/ParcelUuid; I Landroid/os/ParcelUuid; Z [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-sendResponse-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverConnect-(I Ljava/lang/String; Z I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-serverDisconnect-(I Ljava/lang/String;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startMultiAdvertising-(I Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseSettings;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-startScan-(I Z Landroid/bluetooth/le/ScanSettings; Ljava/util/List; Landroid/os/WorkSource; Ljava/util/List; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\",\n        \"android.permission.PEERS_MAC_ADDRESS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopMultiAdvertising-(I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-stopScan-(I Z)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregAll-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterClient-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-unregisterServer-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeCharacteristic-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/gatt/GattService$BluetoothGattBinder;-writeDescriptor-(I Ljava/lang/String; I I I [B)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSink-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getConnectedHealthDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDeviceConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getHealthDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-registerAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration; Landroid/bluetooth/IBluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hdp/HealthService$BluetoothHealthBinder;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-bindResponse-(I Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-clccResponse-(I I I I Z Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disableWBS-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-enableWBS-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-isAudioOn-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-phoneStateChanged-(I I I Ljava/lang/String; I)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfp/HeadsetService$BluetoothHeadsetBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-acceptCall-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-connectAudio-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dial-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-dialMemory-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-disconnectAudio-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-enterPrivateMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-explicitCallTransfer-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgEvents-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentAgFeatures-(Landroid/bluetooth/BluetoothDevice;)Landroid/os/Bundle;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getCurrentCalls-(Landroid/bluetooth/BluetoothDevice;)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getLastVoiceTagNumber-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-holdCall-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-redial-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-rejectCall-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-sendDTMF-(Landroid/bluetooth/BluetoothDevice; B)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hfpclient/HeadsetClientService$BluetoothHeadsetClientBinder;-terminateCall-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getProtocolMode-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-getReport-(Landroid/bluetooth/BluetoothDevice; B B I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-sendData-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setProtocolMode-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-setReport-(Landroid/bluetooth/BluetoothDevice; B Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/hid/HidService$BluetoothInputDeviceBinder;-virtualUnplug-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/map/BluetoothMapService$BluetoothMapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pan/PanService$BluetoothPanBinder;-setBluetoothTethering-(Z)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/pbapclient/PbapClientService$BluetoothPbapClientBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-connect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-disconnect-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getClient-()Landroid/bluetooth/BluetoothDevice;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getPriority-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-isConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/bluetooth/sap/SapService$SapBinder;-setPriority-(Landroid/bluetooth/BluetoothDevice; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/car/CarRadioService;-setPreset-(Landroid/car/hardware/radio/CarRadioPreset;)Z\": [\n        \"android.car.permission.CAR_RADIO\"\n    ],\n    \"Lcom/android/car/ICarImpl;-getCarService-(Ljava/lang/String;)Landroid/os/IBinder;\": [\n        \"android.car.permission.CAR_CAMERA\",\n        \"android.car.permission.CAR_HVAC\",\n        \"android.car.permission.CAR_MOCK_VEHICLE_HAL\",\n        \"android.car.permission.CAR_NAVIGATION_MANAGER\",\n        \"android.car.permission.CAR_PROJECTION\",\n        \"android.car.permission.CAR_RADIO\"\n    ],\n    \"Lcom/android/car/pm/CarPackageManagerService;-setAppBlockingPolicy-(Ljava/lang/String; Landroid/car/content/pm/CarAppBlockingPolicy; I)V\": [\n        \"android.car.permission.CONTROL_APP_BLOCKING\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getCompleteVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getCompleteVoiceMailNumberForSubscriber-(I)Ljava/lang/String;\": [\n        \"android.permission.CALL_PRIVILEGED\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceIdForPhone-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceSvn-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getDeviceSvnUsingSubId-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getGroupIdLevel1-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getGroupIdLevel1ForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSerialNumber-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSerialNumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIccSimChallengeResponse-(I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getImeiForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimChallengeResponse-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimDomain-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimImpi-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimImpu-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimIst-()Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getIsimPcscf-()[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1AlphaTag-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1AlphaTagForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1Number-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getLine1NumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getMsisdn-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getMsisdnForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getNaiForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getSubscriberId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getSubscriberIdForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailAlphaTag-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailAlphaTagForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailNumber-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/PhoneSubInfoController;-getVoiceMailNumberForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-addSubInfoRecord-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearDefaultsForInactiveSubIds-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-clearSubInfo-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubInfoCount-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfo-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForIccId-(Ljava/lang/String; Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoForSimSlotIndex-(I Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getActiveSubscriptionInfoList-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoCount-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getAllSubInfoList-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-getSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDataRoaming-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultDataSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultSmsSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDefaultVoiceSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayName-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNameUsingSrc-(Ljava/lang/String; I J)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setDisplayNumber-(Ljava/lang/String; I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setIconTint-(I I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/SubscriptionController;-setSubscriptionProperty-(I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-getAdnRecordsInEf-(I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-getAdnRecordsInEfForSubscriber-(I I)Ljava/util/List;\": [\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfByIndex-(I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfByIndexForSubscriber-(I I Ljava/lang/String; Ljava/lang/String; I Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfBySearch-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccPhoneBookController;-updateAdnRecordsInEfBySearchForSubscriber-(I I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.WRITE_CONTACTS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-copyMessageToIccEfForSubscriber-(I Ljava/lang/String; I [B [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastForSubscriber-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-disableCellBroadcastRangeForSubscriber-(I I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastForSubscriber-(I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-enableCellBroadcastRangeForSubscriber-(I I I I)Z\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-getAllMessagesFromIccEfForSubscriber-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.RECEIVE_SMS\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendDataForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; I [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendMultipartTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/util/List; Ljava/util/List; Ljava/util/List; Z)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredMultipartText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Ljava/util/List; Ljava/util/List;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendStoredText-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriber-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent; Z)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-sendTextForSubscriberWithSelfPermissions-(I Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent; Z)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\",\n        \"android.permission.SEND_SMS_NO_CONFIRMATION\"\n    ],\n    \"Lcom/android/internal/telephony/UiccSmsController;-updateMessageOnIccEfForSubscriber-(I Ljava/lang/String; I I [B)Z\": [\n        \"android.permission.RECEIVE_SMS\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/phone/CarrierConfigLoader;-getConfigForSubId-(I)Landroid/os/PersistableBundle;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/CarrierConfigLoader;-notifyConfigChangedForSubId-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/CarrierConfigLoader;-updateConfigForPhoneId-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCall-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-answerRingingCallForSubscriber-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-call-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-carrierActionSetMeteredApnsEnabled-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-carrierActionSetRadioEnabled-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-disableLocationUpdatesForSubscriber-(I)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableDataConnectivity-()Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdates-()V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableLocationUpdatesForSubscriber-(I)V\": [\n        \"android.permission.CONTROL_LOCATION_UPDATES\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-enableVideoCalling-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCall-()Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-endCallForSubscriber-(I)Z\": [\n        \"android.permission.CALL_PHONE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-factoryReset-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAidForAppType-(I I)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getAllowedCarriers-(I)Ljava/util/List;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCalculatedPreferredNetworkType-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndex-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconIndexForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconMode-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriIconModeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriText-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaEriTextForSubscriber-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMdn-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaMin-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCdmaPrlVersion-(I)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellLocation-(Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getCellNetworkScanResults-(I)Lcom/android/internal/telephony/CellNetworkScanResult;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataEnabled-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkType-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDataNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDeviceId-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getDeviceSoftwareVersionForSlot-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getEsn-(I)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getImeiForSlot-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1AlphaTagForDisplay-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLine1NumberForDisplay-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaMode-(Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getLteOnCdmaModeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getMergedSubscriberIds-(Ljava/lang/String;)[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNeighboringCellInfo-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPcscfAddress-(Ljava/lang/String; Ljava/lang/String;)[Ljava/lang/String;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getPreferredNetworkType-(I)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getRadioAccessFamily-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getServiceStateForSubscriber-(I Ljava/lang/String;)Landroid/telephony/ServiceState;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getSystemVisualVoicemailSmsFilterSettings-(Ljava/lang/String; I)Landroid/telephony/VisualVoicemailSmsFilterSettings;\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getTelephonyHistograms-()Ljava/util/List;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getTetherApnRequired-()I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getVoiceNetworkTypeForSubscriber-(I Ljava/lang/String;)I\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-getVtDataUsage-()J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmi-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-handlePinMmiForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccCloseLogicalChannel-(I I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccExchangeSimIO-(I I I I I I Ljava/lang/String;)[B\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccOpenLogicalChannel-(I Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduBasicChannel-(I I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-iccTransmitApduLogicalChannel-(I I I I I I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-invokeOemRilRequestRaw-([B [B)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isIdle-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isIdleForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isOffhook-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isOffhookForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRadioOn-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRadioOnForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRinging-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isRingingForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isVideoCallingEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-isVisualVoicemailEnabled-(Ljava/lang/String; Landroid/telecom/PhoneAccountHandle;)Z\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvReadItem-(I)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvResetConfig-(I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteCdmaPrl-([B)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-nvWriteItem-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-requestModemActivityInfo-(Landroid/os/ResultReceiver;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-sendEnvelopeWithStatus-(I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setAllowedCarriers-(I Ljava/util/List;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setDataEnabled-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setImsRegistrationState-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeAutomatic-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setNetworkSelectionModeManual-(I Lcom/android/internal/telephony/OperatorInfo; Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setPolicyDataEnabled-(Z I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setPreferredNetworkType-(I I)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadio-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioForSubscriber-(I Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setRadioPower-(Z)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-setVisualVoicemailEnabled-(Ljava/lang/String; Landroid/telecom/PhoneAccountHandle; Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-shutdownMobileRadios-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPin-(Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinForSubscriber-(I Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResult-(Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPinReportResultForSubscriber-(I Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPuk-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResult-(Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-supplyPukReportResultForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)[I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOff-()V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/phone/PhoneInterfaceManager;-toggleRadioOnOffForSubscriber-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/providers/contacts/ContactsProvider2;-getType-(Landroid/net/Uri;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkAudioOperation-(I I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-checkOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-finishOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getOpsForPackage-(I Ljava/lang/String; [I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-getPackagesForOps-([I)Ljava/util/List;\": [\n        \"android.permission.GET_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-noteOperation-(I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-resetAllModes-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setAudioRestriction-(I I I I [Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setMode-(I I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setUidMode-(I I I)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-setUserRestriction-(I Z Landroid/os/IBinder; I [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_APP_OPS_RESTRICTIONS\"\n    ],\n    \"Lcom/android/server/AppOpsService;-startOperation-(Landroid/os/IBinder; I I Ljava/lang/String;)I\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-disable-(Z)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-enableNoAutoConnect-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.LOCAL_MAC_ADDRESS\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-registerStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterAdapter-(Landroid/bluetooth/IBluetoothManagerCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/BluetoothManagerService;-unregisterStateChangeCallback-(Landroid/bluetooth/IBluetoothStateChangeCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-factoryReset-()V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveLinkProperties-()Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetwork-()Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkForUid-(I Z)Landroid/net/Network;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkInfoForUid-(I Z)Landroid/net/NetworkInfo;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getActiveNetworkQuotaInfo-()Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworkState-()[Landroid/net/NetworkState;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAllVpnInfo-()[Lcom/android/internal/net/VpnInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getAlwaysOnVpnPackage-(I)Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getDefaultNetworkCapabilitiesForUser-(I)[Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLastTetherError-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLegacyVpnInfo-(I)Lcom/android/internal/net/LegacyVpnInfo;\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getLinkPropertiesForType-(I)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getMobileProvisioningUrl-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkForType-(I)Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getNetworkInfoForUid-(Landroid/net/Network; I Z)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableBluetoothRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableUsbRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetherableWifiRegexs-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredDhcpRanges-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getTetheringErroredIfaces-()[Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-getVpnConfig-(I)Lcom/android/internal/net/VpnConfig;\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isNetworkSupported-(I)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-isTetheringSupported-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-listenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-pendingListenForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-pendingRequestForNetwork-(Landroid/net/NetworkCapabilities; Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-prepareVpn-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkAgent-(Landroid/os/Messenger; Landroid/net/NetworkInfo; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Landroid/net/NetworkMisc;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-registerNetworkFactory-(Landroid/os/Messenger; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportInetCondition-(I I)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-reportNetworkConnectivity-(Landroid/net/Network; Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestBandwidthUpdate-(Landroid/net/Network;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestNetwork-(Landroid/net/NetworkCapabilities; Landroid/os/Messenger; I Landroid/os/IBinder; I)Landroid/net/NetworkRequest;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-requestRouteToHostAddress-(I [B)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAcceptUnvalidated-(Landroid/net/Network; Z Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAirplaneMode-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAlwaysOnVpnPackage-(I Ljava/lang/String; Z)Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setAvoidUnvalidated-(Landroid/net/Network;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setGlobalProxy-(Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setProvisioningNotificationVisible-(Z I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setUsbTethering-(Z)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-setVpnPackageAuthorization-(Ljava/lang/String; I Z)V\": [\n        \"android.permission.CONTROL_VPN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startLegacyVpn-(Lcom/android/internal/net/VpnProfile;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONTROL_VPN\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startNattKeepalive-(Landroid/net/Network; I Landroid/os/Messenger; Landroid/os/IBinder; Ljava/lang/String; I Ljava/lang/String;)V\": [\n        \"android.permission.PACKET_KEEPALIVE_OFFLOAD\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-startTethering-(I Landroid/os/ResultReceiver; Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-stopTethering-(I)V\": [\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-tether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-unregisterNetworkFactory-(Landroid/os/Messenger;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-untether-(Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/ConnectivityService;-updateLockdownVpn-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-getCarrierFrequencies-()[I\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/ConsumerIrService;-transmit-(Ljava/lang/String; I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistApp-(Ljava/lang/String; J I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForMms-(Ljava/lang/String; I Ljava/lang/String;)J\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveTempWhitelistAppForSms-(Ljava/lang/String; I Ljava/lang/String;)J\": [\n        \"android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-addPowerSaveWhitelistApp-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-exitIdle-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/DeviceIdleController$BinderService;-removePowerSaveWhitelistApp-(Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-addClient-(Lcom/android/internal/view/IInputMethodClient; Lcom/android/internal/view/IInputContext; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-clearLastInputMethodWindowForTransition-(Landroid/os/IBinder;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-createInputContentUriToken-(Landroid/os/IBinder; Landroid/net/Uri; Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getCurrentInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getEnabledInputMethodSubtypeList-(Ljava/lang/String; Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getInputMethodList-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-getLastInputMethodSubtype-()Landroid/view/inputmethod/InputMethodSubtype;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-hideSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-notifySuggestionPicked-(Landroid/text/style/SuggestionSpan; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-registerSuggestionSpansForNotification-([Landroid/text/style/SuggestionSpan;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-removeClient-(Lcom/android/internal/view/IInputMethodClient;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setAdditionalInputMethodSubtypes-(Ljava/lang/String; [Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setCurrentInputMethodSubtype-(Landroid/view/inputmethod/InputMethodSubtype;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethod-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodAndSubtype-(Landroid/os/IBinder; Ljava/lang/String; Landroid/view/inputmethod/InputMethodSubtype;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-setInputMethodEnabled-(Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-shouldOfferSwitchingToNextInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodAndSubtypeEnablerFromClient-(Lcom/android/internal/view/IInputMethodClient; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_EXTERNAL_STORAGE\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showInputMethodPickerFromClient-(Lcom/android/internal/view/IInputMethodClient; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showMySoftInput-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-showSoftInput-(Lcom/android/internal/view/IInputMethodClient; I Landroid/os/ResultReceiver;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-startInputOrWindowGainedFocus-(I Lcom/android/internal/view/IInputMethodClient; Landroid/os/IBinder; I I I Landroid/view/inputmethod/EditorInfo; Lcom/android/internal/view/IInputContext; I)Lcom/android/internal/view/InputBindResult;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToLastInputMethod-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/InputMethodManagerService;-switchToNextInputMethod-(Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGnssMeasurementsListener-(Landroid/location/IGnssMeasurementsListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-addGnssNavigationMessageListener-(Landroid/location/IGnssNavigationMessageListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getLastLocation-(Landroid/location/LocationRequest; Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviderProperties-(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-registerGnssStatusCallback-(Landroid/location/IGnssStatusListener; Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-removeUpdates-(Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-reportLocation-(Landroid/location/Location; Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.INSTALL_LOCATION_PROVIDER\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestGeofence-(Landroid/location/LocationRequest; Landroid/location/Geofence; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-requestLocationUpdates-(Landroid/location/LocationRequest; Landroid/location/ILocationListener; Landroid/app/PendingIntent; Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/LocationManagerService;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPassword-(Ljava/lang/String; I Lcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkPattern-(Ljava/lang/String; I Lcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-checkVoldPassword-(I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getBoolean-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getLong-(Ljava/lang/String; J I)J\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getSeparateProfileChallengeEnabled-(I)Z\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getString-(Ljava/lang/String; Ljava/lang/String; I)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-getStrongAuthForUser-(I)I\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-registerStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-requireStrongAuth-(I I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-resetKeyStore-(I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setBoolean-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPassword-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLockPattern-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setLong-(Ljava/lang/String; J I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setSeparateProfileChallengeEnabled-(I Z Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-setString-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-systemReady-()V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\",\n        \"android.permission.READ_CONTACTS\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-unregisterStrongAuthTracker-(Landroid/app/trust/IStrongAuthTracker;)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-userPresent-(I)V\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-verifyPassword-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-verifyPattern-(Ljava/lang/String; J I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/LockSettingsService;-verifyTiedProfileChallenge-(Ljava/lang/String; Z J I)Lcom/android/internal/widget/VerifyCredentialResponse;\": [\n        \"android.permission.ACCESS_KEYGUARD_SECURE_STORAGE\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-downloadMessage-(I Ljava/lang/String; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Lcom/android/server/MmsServiceBroker$BinderService;-sendMessage-(I Ljava/lang/String; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Lcom/android/server/MountService;-addUserKeyAuth-(I I [B [B)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-benchmark-(Ljava/lang/String;)J\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-changeEncryptionPassword-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-clearPassword-()V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-createSecureContainer-(Ljava/lang/String; I Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-createUserKey-(I I Z)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-decryptStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-destroySecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_DESTROY\"\n    ],\n    \"Lcom/android/server/MountService;-destroyUserKey-(I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-destroyUserStorage-(Ljava/lang/String; I I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-encryptStorage-(I Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-finalizeSecureContainer-(Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixPermissionsSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-fixateNewestUserKeyAuth-(I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-forgetAllVolumes-()V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-forgetVolume-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-format-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-formatVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getEncryptionState-()I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/MountService;-getField-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-getPassword-()Ljava/lang/String;\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-getPasswordType-()I\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-getPrimaryStorageUuid-()Ljava/lang/String;\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerFilesystemPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerList-()[Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getSecureContainerPath-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-getStorageUsers-(Ljava/lang/String;)[I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-isConvertibleToFBE-()Z\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-isSecureContainerMounted-(Ljava/lang/String;)Z\": [\n        \"android.permission.ASEC_ACCESS\"\n    ],\n    \"Lcom/android/server/MountService;-lockUserKey-(I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-mount-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-mountSecureContainer-(Ljava/lang/String; Ljava/lang/String; I Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-mountVolume-(Ljava/lang/String;)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionMixed-(Ljava/lang/String; I)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionPrivate-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-partitionPublic-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_FORMAT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-prepareUserStorage-(Ljava/lang/String; I I I)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-renameSecureContainer-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_RENAME\"\n    ],\n    \"Lcom/android/server/MountService;-resizeSecureContainer-(Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.ASEC_CREATE\"\n    ],\n    \"Lcom/android/server/MountService;-runMaintenance-()V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setDebugFlags-(I I)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setField-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-setPrimaryStorageUuid-(Ljava/lang/String; Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setVolumeNickname-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-setVolumeUserFlags-(Ljava/lang/String; I I)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-shutdown-(Landroid/os/storage/IMountShutdownObserver;)V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/MountService;-unlockUserKey-(I I [B [B)V\": [\n        \"android.permission.STORAGE_INTERNAL\"\n    ],\n    \"Lcom/android/server/MountService;-unmount-(Ljava/lang/String;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-unmountSecureContainer-(Ljava/lang/String; Z)I\": [\n        \"android.permission.ASEC_MOUNT_UNMOUNT\"\n    ],\n    \"Lcom/android/server/MountService;-unmountVolume-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/MountService;-verifyEncryptionPassword-(Ljava/lang/String;)I\": [\n        \"android.permission.CRYPT_KEEPER\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addIdleTimer-(Ljava/lang/String; I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToLocalNetwork-(Ljava/lang/String; Ljava/util/List;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addInterfaceToNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addLegacyRouteForNetId-(I Landroid/net/RouteInfo; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-addVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-allowProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-attachPppd-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearDefaultNetId-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearInterfaceAddresses-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-clearPermission-([I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createPhysicalNetwork-(I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-createVirtualNetwork-(I Z Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-denyProtect-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-detachPppd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-disableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableIpv6-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-enableNat-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getDnsForwarders-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getInterfaceConfig-(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getIpForwardingEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsDetail-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryDev-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsSummaryXt-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsTethering-()Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-getNetworkStatsUidDetail-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isBandwidthControlEnabled-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isClatdStarted-(Ljava/lang/String;)Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-isTetheringStarted-()Z\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTetheredInterfaces-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-listTtys-()[Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-registerObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeIdleTimer-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceAlert-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromLocalNetwork-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceFromNetwork-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeInterfaceQuota-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeNetwork-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoute-(I Landroid/net/RouteInfo;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeRoutesFromLocalNetwork-(Ljava/util/List;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-removeVpnUidRanges-(I [Landroid/net/UidRange;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDefaultNetId-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsConfigurationForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsForwarders-(Landroid/net/Network; [Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setDnsServersForNetwork-(I [Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setGlobalAlert-(J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceAlert-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceConfig-(Ljava/lang/String; Landroid/net/InterfaceConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceDown-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6NdOffload-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceIpv6PrivacyExtensions-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceQuota-(Ljava/lang/String; J)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setInterfaceUp-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setIpForwardingEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setMtu-(Ljava/lang/String; I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setNetworkPermission-(I Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setPermission-(Ljava/lang/String; [I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidCleartextNetworkPolicy-(I I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidMeteredNetworkBlacklist-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-setUidMeteredNetworkWhitelist-(I Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-shutdown-()V\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startAccessPoint-(Landroid/net/wifi/WifiConfiguration; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-startTethering-([Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopAccessPoint-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopClatd-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopInterfaceForwarding-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-stopTethering-()V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-tetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-unregisterObserver-(Landroid/net/INetworkManagementEventObserver;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-untetherInterface-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkManagementService;-wifiFirmwareReload-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-clearScores-()Z\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-disableScoring-()V\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-registerNetworkScoreCache-(I Landroid/net/INetworkScoreCache;)V\": [\n        \"android.permission.BROADCAST_NETWORK_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-setActiveScorer-(Ljava/lang/String;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NetworkScoreService;-updateScores-([Landroid/net/ScoredNetwork;)Z\": [\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/NsdService;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.INTERNET\"\n    ],\n    \"Lcom/android/server/NsdService;-setEnabled-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/RecoverySystemService$BinderService;-clearBcb-()Z\": [\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/RecoverySystemService$BinderService;-rebootRecoveryWithCommand-(Ljava/lang/String;)V\": [\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/RecoverySystemService$BinderService;-setupBcb-(Ljava/lang/String;)Z\": [\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/RecoverySystemService$BinderService;-uncrypt-(Ljava/lang/String; Landroid/os/IRecoverySystemProgressListener;)Z\": [\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/SerialService;-getSerialPorts-()[Ljava/lang/String;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/SerialService;-openSerialPort-(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SERIAL_PORT\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-addOnSubscriptionsChangedListener-(Ljava/lang/String; Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V\": [\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listen-(Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-listenForSubscriber-(I Ljava/lang/String; Lcom/android/internal/telephony/IPhoneStateListener; I Z)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\",\n        \"android.permission.READ_PRECISE_PHONE_STATE\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChanged-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallForwardingChangedForSubscriber-(I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallState-(I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCallStateForPhoneId-(I I I Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCarrierNetworkChange-(Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfo-(Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellInfoForSubscriber-(I Ljava/util/List;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocation-(Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyCellLocationForSubscriber-(I Landroid/os/Bundle;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivity-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataActivityForSubscriber-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnection-(I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionFailedForSubscriber-(I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDataConnectionForSubscriber-(I I Z Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/net/LinkProperties; Landroid/net/NetworkCapabilities; I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyDisconnectCause-(I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyMessageWaitingChangedForPhoneId-(I I Z)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOemHookRawEventForSubscriber-(I [B)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyOtaspChanged-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseCallState-(I I I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyPreciseDataConnectionFailed-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyServiceStateForPhoneId-(I I Landroid/telephony/ServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifySignalStrengthForPhoneId-(I I Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TelephonyRegistry;-notifyVoLteServiceStateChanged-(Landroid/telephony/VoLteServiceState;)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellChecker-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setCurrentSpellCheckerSubtype-(Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/TextServicesManagerService;-setSpellCheckerEnabled-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-acquireUpdateLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/UpdateLockService;-releaseUpdateLock-(Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_LOCK\"\n    ],\n    \"Lcom/android/server/VibratorService;-cancelVibrate-(Landroid/os/IBinder;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibrate-(I Ljava/lang/String; J I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/VibratorService;-vibratePattern-(I Ljava/lang/String; [J I I Landroid/os/IBinder;)V\": [\n        \"android.permission.UPDATE_APP_OPS_STATS\",\n        \"android.permission.VIBRATE\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfoByAccessibilityId-(I J I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; I J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByText-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findAccessibilityNodeInfosByViewId-(I J Ljava/lang/String; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-findFocus-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-focusSearch-(I J I I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationCenterX-()F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationCenterY-()F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationRegion-()Landroid/graphics/Region;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getMagnificationScale-()F\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindow-(I)Landroid/view/accessibility/AccessibilityWindowInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-getWindows-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performAccessibilityAction-(I J I Landroid/os/Bundle; I Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback; J)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-performGlobalAction-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-resetMagnification-(Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-setMagnificationScaleAndCenter-(F F F Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService$Service;-setSoftKeyboardShowMode-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addAccessibilityInteractionConnection-(Landroid/view/IWindow; Landroid/view/accessibility/IAccessibilityInteractionConnection; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-addClient-(Landroid/view/accessibility/IAccessibilityManagerClient; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-disableAccessibilityService-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-enableAccessibilityService-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getEnabledAccessibilityServiceList-(I I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getInstalledAccessibilityServiceList-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-getWindowToken-(I I)Landroid/os/IBinder;\": [\n        \"getWindowToken\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-interrupt-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-removeAccessibilityInteractionConnection-(Landroid/view/IWindow;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-sendAccessibilityEvent-(Landroid/view/accessibility/AccessibilityEvent; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/accessibility/AccessibilityManagerService;-temporaryEnableAccessibilityStateUntilKeyguardRemoved-(Landroid/content/ComponentName; Z)V\": [\n        \"temporaryEnableAccessibilityStateUntilKeyguardRemoved\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Ljava/lang/String; Ljava/lang/String; [Ljava/lang/String; Z Landroid/os/Bundle; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-addSharedAccountsFromParentUser-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-confirmCredentialsAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Landroid/os/Bundle; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-copyAccountToUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-finishSessionAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/os/Bundle; Z Landroid/os/Bundle; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccounts-(Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsAsUser-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsByTypeForPackage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAccountsForPackage-(Ljava/lang/String; I Ljava/lang/String;)[Landroid/accounts/Account;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-getAuthenticatorTypes-(I)[Landroid/accounts/AuthenticatorDescription;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccount-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/accounts/AccountManagerService;-removeAccountAsUser-(Landroid/accounts/IAccountManagerResponse; Landroid/accounts/Account; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-appNotRespondingViaProvider-(Landroid/os/IBinder;)V\": [\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindBackupAgent-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.CONFIRM_FULL_BACKUP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bindService-(Landroid/app/IApplicationThread; Landroid/os/IBinder; Landroid/content/Intent; Ljava/lang/String; Landroid/app/IServiceConnection; I Ljava/lang/String; I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-bootAnimationComplete-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearGrantedUriPermissions-(Ljava/lang/String; I)V\": [\n        \"android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-clearPendingBackup-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-crashApplication-(I I Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createStackOnDisplay-(I)Landroid/app/IActivityContainer;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-createVirtualActivityContainer-(Landroid/os/IBinder; Landroid/app/IActivityContainerCallback;)Landroid/app/IActivityContainer;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-deleteActivityContainer-(Landroid/app/IActivityContainer;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-dumpHeap-(Ljava/lang/String; I Z Ljava/lang/String; Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-finishHeavyWeightApp-()V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-forceStopPackage-(Ljava/lang/String; I)V\": [\n        \"android.permission.FORCE_STOP_PACKAGES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAllStackInfos-()Ljava/util/List;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getAssistContextExtras-(I)Landroid/os/Bundle;\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getContentProviderExternal-(Ljava/lang/String; I Landroid/os/IBinder;)Landroid/app/IActivityManager$ContentProviderHolder;\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getCurrentUser-()Landroid/content/pm/UserInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getGrantedUriPermissions-(Ljava/lang/String; I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.GET_APP_GRANTED_URI_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getIntentForIntentSender-(Landroid/content/IIntentSender;)Landroid/content/Intent;\": [\n        \"android.permission.GET_INTENT_SENDER_INTENT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getPackageProcessState-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRecentTasks-(I I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.GET_DETAILED_TASKS\",\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningAppProcesses-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningExternalApplications-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getRunningUserIds-()[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getStackInfo-(I)Landroid/app/ActivityManager$StackInfo;\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskBounds-(I)Landroid/graphics/Rect;\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskDescriptionIcon-(Ljava/lang/String; I)Landroid/graphics/Bitmap;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTaskThumbnail-(I)Landroid/app/ActivityManager$TaskThumbnail;\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-getTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\",\n        \"android.permission.REAL_GET_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-hang-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-inputDispatchingTimedOut-(I Z Ljava/lang/String;)J\": [\n        \"android.permission.FILTER_EVENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isInHomeStack-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-isUserRunning-(I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killAllBackgroundProcesses-()V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killBackgroundProcesses-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killPackageDependents-(Ljava/lang/String; I)V\": [\n        \"android.permission.KILL_UID\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-killUid-(I I Ljava/lang/String;)V\": [\n        \"android.permission.KILL_UID\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-launchAssistIntent-(Landroid/content/Intent; I Ljava/lang/String; I Landroid/os/Bundle;)Z\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskBackwards-(I)V\": [\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToDockedStack-(I I Z Z Landroid/graphics/Rect; Z)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTaskToStack-(I I Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTasksToFullscreenStack-(I Z)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-moveTopActivityToPinnedStack-(I Landroid/graphics/Rect;)Z\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-navigateUpTo-(Landroid/os/IBinder; Landroid/content/Intent; I Landroid/content/Intent;)Z\": [\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-performIdleMaintenance-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-positionTaskInStack-(I I I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-profileControl-(Ljava/lang/String; I Z Landroid/app/ProfilerInfo; I)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerProcessObserver-(Landroid/app/IProcessObserver;)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerTaskStackListener-(Landroid/app/ITaskStackListener;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUidObserver-(Landroid/app/IUidObserver; I)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-registerUserSwitchObserver-(Landroid/app/IUserSwitchObserver; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeContentProviderExternal-(Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeStack-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-removeTask-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REMOVE_TASKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestAssistContextExtras-(I Lcom/android/internal/os/IResultReceiver; Landroid/os/Bundle; Landroid/os/IBinder; Z Z)Z\": [\n        \"android.permission.GET_TOP_ACTIVITY_INFO\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-requestBugReport-(I)V\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeDockedStack-(Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect; Landroid/graphics/Rect;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizePinnedStack-(Landroid/graphics/Rect; Landroid/graphics/Rect;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeStack-(I Landroid/graphics/Rect; Z Z Z I)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resizeTask-(I Landroid/graphics/Rect; I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-restart-()V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-resumeAppSwitches-()V\": [\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-sendIdleJobTrigger-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setActivityController-(Landroid/app/IActivityController; Z)V\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setAlwaysFinish-(Z)V\": [\n        \"android.permission.SET_ALWAYS_FINISH\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDebugApp-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setDumpHeapDebugLimit-(Ljava/lang/String; I J Ljava/lang/String;)V\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFocusedStack-(I)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFocusedTask-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setFrontActivityScreenCompatMode-(I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setHasTopUi-(Z)V\": [\n        \"android.permission.INTERNAL_SYSTEM_WINDOW\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLenientBackgroundCheck-(Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setLockScreenShown-(Z Z)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageAskScreenCompat-(Ljava/lang/String; Z)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setPackageScreenCompatMode-(Ljava/lang/String; I)V\": [\n        \"android.permission.SET_SCREEN_COMPATIBILITY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessForeground-(Landroid/os/IBinder; I Z)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setProcessLimit-(I)V\": [\n        \"android.permission.SET_PROCESS_LIMIT\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-setTaskDescription-(Landroid/os/IBinder; Landroid/app/ActivityManager$TaskDescription;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-shutdown-(I)Z\": [\n        \"android.permission.SHUTDOWN\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-signalPersistentProcesses-(I)V\": [\n        \"android.permission.SIGNAL_PERSISTENT_PROCESSES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivities-(Landroid/app/IApplicationThread; Ljava/lang/String; [Landroid/content/Intent; [Ljava/lang/String; Landroid/os/IBinder; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivity-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle;)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAndWait-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)Landroid/app/IActivityManager$WaitResult;\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsCaller-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; Z I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityAsUser-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityFromRecents-(I Landroid/os/Bundle;)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startActivityWithConfig-(Landroid/app/IApplicationThread; Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; Landroid/os/IBinder; Ljava/lang/String; I I Landroid/content/res/Configuration; Landroid/os/Bundle; I)I\": [\n        \"android.permission.SET_DEBUG_APP\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startBinderTracking-()Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startConfirmDeviceCredentialIntent-(Landroid/content/Intent;)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startSystemLockTaskMode-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startUserInBackground-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-startVoiceActivity-(Ljava/lang/String; I I Landroid/content/Intent; Ljava/lang/String; Landroid/service/voice/IVoiceInteractionSession; Lcom/android/internal/app/IVoiceInteractor; I Landroid/app/ProfilerInfo; Landroid/os/Bundle; I)I\": [\n        \"android.permission.BIND_VOICE_INTERACTION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopAppSwitches-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.STOP_APP_SWITCHES\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopBinderTrackingAndDump-(Landroid/os/ParcelFileDescriptor;)Z\": [\n        \"android.permission.SET_ACTIVITY_WATCHER\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopLockTaskMode-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopService-(Landroid/app/IApplicationThread; Landroid/content/Intent; Ljava/lang/String; I)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopServiceToken-(Landroid/content/ComponentName; Landroid/os/IBinder; I)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopSystemLockTaskMode-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-stopUser-(I Z Landroid/app/IStopUserCallback;)I\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-suppressResizeConfigChanges-(Z)V\": [\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-swapDockedAndFullscreenStack-()V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.MANAGE_ACTIVITY_STACKS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbindService-(Landroid/app/IServiceConnection;)Z\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.SET_DEBUG_APP\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unbroadcastIntent-(Landroid/app/IApplicationThread; Landroid/content/Intent; I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unhandledBack-()V\": [\n        \"android.permission.FORCE_BACK\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-unlockUser-(I [B [B Landroid/os/IProgressListener;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updateConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/ActivityManagerService;-updatePersistentConfiguration-(Landroid/content/res/Configuration;)V\": [\n        \"android.permission.CHANGE_CONFIGURATION\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimeBattery-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getAwakeTimePlugged-()J\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatistics-()[B\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-getStatisticsStream-()Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBleScanStarted-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBleScanStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteBluetoothControllerActivity-(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteChangeWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteConnectivityChanged-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteDeviceIdleMode-(I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteEvent-(I Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFlashlightOn-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquired-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockAcquiredFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleased-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteFullWifiLockReleasedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteInteractive-(Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteJobStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteLongPartialWakelockFinish-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteLongPartialWakelockStart-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteMobileRadioPowerState-(I J I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteModemControllerActivity-(Landroid/telephony/ModemActivityInfo;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkInterfaceType-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteNetworkStatsEnabled-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneDataConnectionState-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneSignalStrength-(Landroid/telephony/SignalStrength;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-notePhoneState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetAudio-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetBleScan-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetCamera-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetFlashlight-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteResetVideo-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenBrightness-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteScreenState-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartCamera-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelock-(I I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStartWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopAudio-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopCamera-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopGps-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopSensor-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopVideo-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelock-(I I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteStopWakelockFromSource-(Landroid/os/WorkSource; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncFinish-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteSyncStart-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteUserActivity-(I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOff-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteVibratorOn-(I J)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWakeUp-(Ljava/lang/String; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStartedFromSource-(Landroid/os/WorkSource; I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiBatchedScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiControllerActivity-(Landroid/net/wifi/WifiActivityEnergyInfo;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastDisabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabled-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiMulticastEnabledFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOff-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiOn-()V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRadioPowerState-(I J I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRssiChanged-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunning-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiRunningChanged-(Landroid/os/WorkSource; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStarted-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStartedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStopped-(I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiScanStoppedFromSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiState-(I Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiStopped-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-noteWifiSupplicantStateChanged-(I Z)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-setBatteryState-(I I I I I I I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-takeUidSnapshot-(I)Landroid/os/health/HealthStatsParceler;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/BatteryStatsService;-takeUidSnapshots-([I)[Landroid/os/health/HealthStatsParceler;\": [\n        \"android.permission.BATTERY_STATS\"\n    ],\n    \"Lcom/android/server/am/PendingIntentRecord;-send-(I Landroid/content/Intent; Ljava/lang/String; Landroid/content/IIntentReceiver; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.START_ANY_ACTIVITY\",\n        \"android.permission.START_TASKS_FROM_RECENTS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getCurrentStats-(Ljava/util/List;)[B\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/am/ProcessStatsService;-getStatsOverTime-(J)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindAppWidgetId-(Ljava/lang/String; I I Landroid/content/ComponentName; Landroid/os/Bundle;)Z\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-bindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent; Landroid/os/IBinder;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-createAppWidgetConfigIntentSender-(Ljava/lang/String; I I)Landroid/content/IntentSender;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-deleteAppWidgetId-(Ljava/lang/String; I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetInfo-(Ljava/lang/String; I)Landroid/appwidget/AppWidgetProviderInfo;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetOptions-(Ljava/lang/String; I)Landroid/os/Bundle;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-getAppWidgetViews-(Ljava/lang/String; I)Landroid/widget/RemoteViews;\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-hasBindAppWidgetPermission-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-notifyAppWidgetViewDataChanged-(Ljava/lang/String; [I I)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-partiallyUpdateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-setBindAppWidgetPermission-(Ljava/lang/String; I Z)V\": [\n        \"android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-unbindRemoteViewsService-(Ljava/lang/String; I Landroid/content/Intent;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetIds-(Ljava/lang/String; [I Landroid/widget/RemoteViews;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/appwidget/AppWidgetServiceImpl;-updateAppWidgetOptions-(Ljava/lang/String; I Landroid/os/Bundle;)V\": [\n        \"android.permission.BIND_APPWIDGET\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-disableSafeMediaVolume-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-forceRemoteSubmixFullVolume-(Z Landroid/os/IBinder;)V\": [\n        \"android.permission.CAPTURE_AUDIO_OUTPUT\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-notifyVolumeControllerVisible-(Landroid/media/IVolumeController; Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-registerAudioPolicy-(Landroid/media/audiopolicy/AudioPolicyConfig; Landroid/media/audiopolicy/IAudioPolicyCallback; Z)Ljava/lang/String;\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-requestAudioFocus-(Landroid/media/AudioAttributes; I Landroid/os/IBinder; Landroid/media/IAudioFocusDispatcher; Ljava/lang/String; Ljava/lang/String; I Landroid/media/audiopolicy/IAudioPolicyCallback;)I\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setFocusPropertiesForPolicy-(I Landroid/media/audiopolicy/IAudioPolicyCallback;)I\": [\n        \"android.permission.MODIFY_AUDIO_ROUTING\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMasterMute-(Z I Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMicrophoneMute-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setMode-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setRingerModeInternal-(I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setRingtonePlayer-(Landroid/media/IRingtonePlayer;)V\": [\n        \"android.permission.REMOTE_AUDIO_PLAYBACK\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setVolumeController-(Landroid/media/IVolumeController;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-setVolumePolicy-(Landroid/media/VolumePolicy;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-startBluetoothSco-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-startBluetoothScoVirtualCall-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/audio/AudioService;-stopBluetoothSco-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-getAvailableRestoreSets-(Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreAll-(J Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restorePackage-(Ljava/lang/String; Landroid/app/backup/IRestoreObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/BackupManagerService$ActiveRestoreSession;-restoreSome-(J Landroid/app/backup/IRestoreObserver; [Ljava/lang/String;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-acknowledgeFullBackupOrRestore-(I Z Ljava/lang/String; Ljava/lang/String; Landroid/app/backup/IFullBackupRestoreObserver;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-backupNow-()V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-beginRestoreSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/app/backup/IRestoreSession;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-clearBackupData-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullBackup-(Landroid/os/ParcelFileDescriptor; Z Z Z Z Z Z Z [Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullRestore-(Landroid/os/ParcelFileDescriptor;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-fullTransportBackup-([Ljava/lang/String;)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getAvailableRestoreToken-(Ljava/lang/String;)J\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getConfigurationIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getCurrentTransport-()Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDataManagementIntent-(Ljava/lang/String;)Landroid/content/Intent;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDataManagementLabel-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-getDestinationString-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-hasBackupPassword-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-isAppEligibleForBackup-(Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-isBackupEnabled-()Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-listAllTransports-()[Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-requestBackup-([Ljava/lang/String; Landroid/app/backup/IBackupObserver;)I\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-restoreAtInstall-(Ljava/lang/String; I)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-selectBackupTransport-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setAutoRestore-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupEnabled-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupPassword-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/backup/Trampoline;-setBackupProvisioned-(Z)V\": [\n        \"android.permission.BACKUP\"\n    ],\n    \"Lcom/android/server/connectivity/IpConnectivityMetrics$Impl;-logEvent-(Landroid/net/ConnectivityMetricsEvent;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-getEvents-(Landroid/net/ConnectivityMetricsEvent$Reference;)[Landroid/net/ConnectivityMetricsEvent;\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-logEvent-(Landroid/net/ConnectivityMetricsEvent;)J\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-logEvents-([Landroid/net/ConnectivityMetricsEvent;)J\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-register-(Landroid/app/PendingIntent;)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;-unregister-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/content/ContentService;-addPeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle; J)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-cancelSyncAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCache-(Ljava/lang/String; Landroid/net/Uri; I)Landroid/os/Bundle;\": [\n        \"android.permission.CACHE_CONTENT\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncs-()Ljava/util/List;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getCurrentSyncsAsUser-(I)Ljava/util/List;\": [\n        \"android.permission.GET_ACCOUNTS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncable-(Landroid/accounts/Account; Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getIsSyncableAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomatically-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getMasterSyncAutomaticallyAsUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getPeriodicSyncs-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterPackagesForAuthorityAsUser-(Ljava/lang/String; I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypes-()[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAdapterTypesAsUser-(I)[Landroid/content/SyncAdapterType;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatus-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-getSyncStatusAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Landroid/content/SyncStatusInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncActive-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPending-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-isSyncPendingAsUser-(Landroid/accounts/Account; Ljava/lang/String; Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.READ_SYNC_STATS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-putCache-(Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; I)V\": [\n        \"android.permission.CACHE_CONTENT\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-registerContentObserver-(Landroid/net/Uri; Z Landroid/database/IContentObserver; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-removePeriodicSync-(Landroid/accounts/Account; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setIsSyncable-(Landroid/accounts/Account; Ljava/lang/String; I)V\": [\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomatically-(Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setMasterSyncAutomaticallyAsUser-(Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomatically-(Landroid/accounts/Account; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-setSyncAutomaticallyAsUser-(Landroid/accounts/Account; Ljava/lang/String; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.WRITE_SYNC_SETTINGS\"\n    ],\n    \"Lcom/android/server/content/ContentService;-sync-(Landroid/content/SyncRequest;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/content/ContentService;-syncAsUser-(Landroid/content/SyncRequest; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileIntentFilter-(Landroid/content/ComponentName; Landroid/content/IntentFilter; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-addPersistentPreferredActivity-(Landroid/content/ComponentName; Landroid/content/IntentFilter; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-approveCaCert-(Ljava/lang/String; I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-choosePrivateKeyAlias-(I Landroid/net/Uri; Ljava/lang/String; Landroid/os/IBinder;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearCrossProfileIntentFilters-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearDeviceOwner-(Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearPackagePersistentPreferredActivities-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-clearProfileOwner-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-createAndManageUser-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/content/ComponentName; Landroid/os/PersistableBundle; I)Landroid/os/UserHandle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemApp-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enableSystemAppWithIntent-(Landroid/content/ComponentName; Landroid/content/Intent;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-enforceCanManageCaCerts-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-forceRemoveActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabled-()[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAccountTypesWithManagementDisabledAsUser-(I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getActiveAdmins-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAlwaysOnVpnPackage-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String;)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getApplicationRestrictionsManagingPackage-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getAutoTimeRequired-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getBluetoothContactSharingDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCameraDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCertInstallerPackage-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileCallerIdDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileContactsSearchDisabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileContactsSearchDisabledForUser-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCrossProfileWidgetProviders-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getCurrentFailedPasswordAttempts-(I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerComponent-(Z)Landroid/content/ComponentName;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerName-()Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDeviceOwnerUserId-()I\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getDoNotAskCredentialsOnBoot-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getForceEphemeralUsers-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getGlobalProxyAdmin-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeepUninstalledPackages-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getKeyguardDisabledFeatures-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLockTaskPackages-(Landroid/content/ComponentName;)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLongSupportMessage-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getLongSupportMessageForUser-(Landroid/content/ComponentName; I)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLock-(Landroid/content/ComponentName; I Z)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getMaximumTimeToLockForUserAndProfiles-(I)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationColor-(Landroid/content/ComponentName;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationColorForUser-(I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationName-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getOrganizationNameForUser-(I)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpiration-(Landroid/content/ComponentName; I Z)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordExpirationTimeout-(Landroid/content/ComponentName; I Z)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordHistoryLength-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLength-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLetters-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumLowerCase-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNonLetter-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumNumeric-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumSymbols-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordMinimumUpperCase-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPasswordQuality-(Landroid/content/ComponentName; I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermissionPolicy-(Landroid/content/ComponentName;)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServices-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedAccessibilityServicesForUser-(I)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethods-(Landroid/content/ComponentName;)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getPermittedInputMethodsForCurrentUser-()Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileOwnerName-(I)Ljava/lang/String;\": [\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getProfileWithMinimumFailedPasswordsForWipe-(I Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRemoveWarning-(Landroid/content/ComponentName; Landroid/os/RemoteCallback; I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRequiredStrongAuthTimeout-(Landroid/content/ComponentName; I Z)J\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getRestrictionsProvider-(I)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getScreenCaptureDisabled-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getShortSupportMessage-(Landroid/content/ComponentName;)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getShortSupportMessageForUser-(Landroid/content/ComponentName; I)Ljava/lang/CharSequence;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryption-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getStorageEncryptionStatus-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; I Z)Ljava/util/List;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getUserProvisioningState-()I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getUserRestrictions-(Landroid/content/ComponentName;)Landroid/os/Bundle;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-getWifiMacAddress-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasGrantedPolicy-(Landroid/content/ComponentName; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-hasUserSetupCompleted-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installCaCert-(Landroid/content/ComponentName; [B)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-installKeyPair-(Landroid/content/ComponentName; [B [B [B Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAccessibilityServicePermittedByAdmin-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isActivePasswordSufficient-(I Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAdminActive-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isAffiliatedUser-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isBackupServiceEnabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isCaCertApproved-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isCallerApplicationRestrictionsManagingPackage-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isDeviceProvisioningConfigApplied-()Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isInputMethodPermittedByAdmin-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isLockTaskPermitted-(Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isManagedProfile-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isMasterVolumeMuted-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isPackageSuspended-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isProfileActivePasswordSufficientForParent-(I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isProvisioningAllowed-(Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isRemovingAdmin-(Landroid/content/ComponentName; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isSecurityLoggingEnabled-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isSystemOnlyUser-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-isUninstallInQueue-(Ljava/lang/String;)Z\": [\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-lockNow-(Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyLockTaskModeChanged-(Z Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-notifyPendingSystemUpdate-(J)V\": [\n        \"android.permission.NOTIFY_PENDING_SYSTEM_UPDATE\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-packageHasActiveAdmins-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reboot-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeActiveAdmin-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeCrossProfileWidgetProvider-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeKeyPair-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-removeUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedFingerprintAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportFailedPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportKeyguardDismissed-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportKeyguardSecured-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulFingerprintAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-reportSuccessfulPasswordAttempt-(I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-requestBugreport-(Landroid/content/ComponentName;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-resetPassword-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-retrievePreRebootSecurityLogs-(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-retrieveSecurityLogs-(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAccountManagementDisabled-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActiveAdmin-(Landroid/content/ComponentName; Z I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setActivePasswordState-(I I I I I I I I I)V\": [\n        \"android.permission.BIND_DEVICE_ADMIN\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAffiliationIds-(Landroid/content/ComponentName; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAlwaysOnVpnPackage-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationHidden-(Landroid/content/ComponentName; Ljava/lang/String; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictions-(Landroid/content/ComponentName; Ljava/lang/String; Landroid/os/Bundle;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setApplicationRestrictionsManagingPackage-(Landroid/content/ComponentName; Ljava/lang/String;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setAutoTimeRequired-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setBackupServiceEnabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setBluetoothContactSharingDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCameraDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCertInstallerPackage-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileCallerIdDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setCrossProfileContactsSearchDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceOwnerLockScreenInfo-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setDeviceProvisioningConfigApplied-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setForceEphemeralUsers-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalProxy-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setGlobalSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeepUninstalledPackages-(Landroid/content/ComponentName; Ljava/util/List;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabled-(Landroid/content/ComponentName; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setKeyguardDisabledFeatures-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLockTaskPackages-(Landroid/content/ComponentName; [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setLongSupportMessage-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMasterVolumeMuted-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumFailedPasswordsForWipe-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setMaximumTimeToLock-(Landroid/content/ComponentName; J Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationColor-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationColorForUser-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setOrganizationName-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPackagesSuspended-(Landroid/content/ComponentName; [Ljava/lang/String; Z)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordExpirationTimeout-(Landroid/content/ComponentName; J Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordHistoryLength-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLength-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLetters-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumLowerCase-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNonLetter-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumNumeric-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumSymbols-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordMinimumUpperCase-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPasswordQuality-(Landroid/content/ComponentName; I Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionGrantState-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermissionPolicy-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedAccessibilityServices-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setPermittedInputMethods-(Landroid/content/ComponentName; Ljava/util/List;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileEnabled-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileName-(Landroid/content/ComponentName; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setProfileOwner-(Landroid/content/ComponentName; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRecommendedGlobalProxy-(Landroid/content/ComponentName; Landroid/net/ProxyInfo;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRequiredStrongAuthTimeout-(Landroid/content/ComponentName; J Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setRestrictionsProvider-(Landroid/content/ComponentName; Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setScreenCaptureDisabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecureSetting-(Landroid/content/ComponentName; Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSecurityLoggingEnabled-(Landroid/content/ComponentName; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setShortSupportMessage-(Landroid/content/ComponentName; Ljava/lang/CharSequence;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStatusBarDisabled-(Landroid/content/ComponentName; Z)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setStorageEncryption-(Landroid/content/ComponentName; Z)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setSystemUpdatePolicy-(Landroid/content/ComponentName; Landroid/app/admin/SystemUpdatePolicy;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setTrustAgentConfiguration-(Landroid/content/ComponentName; Landroid/content/ComponentName; Landroid/os/PersistableBundle; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUninstallBlocked-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserIcon-(Landroid/content/ComponentName; Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserProvisioningState-(I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-setUserRestriction-(Landroid/content/ComponentName; Ljava/lang/String; Z)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-switchUser-(Landroid/content/ComponentName; Landroid/os/UserHandle;)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallCaCerts-(Landroid/content/ComponentName; [Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_CA_CERTIFICATES\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-uninstallPackageWithActiveAdmins-(Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_DEVICE_ADMINS\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/devicepolicy/DevicePolicyManagerService;-wipeData-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-connectWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-createVirtualDisplay-(Landroid/hardware/display/IVirtualDisplayCallback; Landroid/media/projection/IMediaProjection; Ljava/lang/String; Ljava/lang/String; I I I Landroid/view/Surface; I)I\": [\n        \"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\",\n        \"android.permission.CAPTURE_VIDEO_OUTPUT\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-forgetWifiDisplay-(Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-pauseWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-renameWifiDisplay-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-requestColorMode-(I I)V\": [\n        \"android.permission.CONFIGURE_DISPLAY_COLOR_MODE\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-resumeWifiDisplay-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-startWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/display/DisplayManagerService$BinderService;-stopWifiDisplayScan-()V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-awaken-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-dream-()V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDefaultDreamComponent-()Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-getDreamComponents-()[Landroid/content/ComponentName;\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-isDreaming-()Z\": [\n        \"android.permission.READ_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-setDreamComponents-([Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/dreams/DreamManagerService$BinderService;-testDream-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.WRITE_DREAM_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-addListener-(Landroid/net/IEthernetServiceListener;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-getConfiguration-()Landroid/net/IpConfiguration;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-isAvailable-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-removeListener-(Landroid/net/IEthernetServiceListener;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/ethernet/EthernetServiceImpl;-setConfiguration-(Landroid/net/IpConfiguration;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-authenticate-(Landroid/os/IBinder; J I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\",\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelAuthentication-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-cancelEnrollment-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-enroll-(Landroid/os/IBinder; [B I Landroid/hardware/fingerprint/IFingerprintServiceReceiver; I Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-getEnrolledFingerprints-(I Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-hasEnrolledFingerprints-(I Ljava/lang/String;)Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-isHardwareDetected-(J Ljava/lang/String;)Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-postEnroll-(Landroid/os/IBinder;)I\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-preEnroll-(Landroid/os/IBinder;)J\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-remove-(Landroid/os/IBinder; I I I Landroid/hardware/fingerprint/IFingerprintServiceReceiver;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-rename-(I I Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-resetTimeout-([B)V\": [\n        \"android.permission.RESET_FINGERPRINT_LOCKOUT\"\n    ],\n    \"Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-setActiveUser-(I)V\": [\n        \"android.permission.MANAGE_FINGERPRINT\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addDeviceEventListener-(Landroid/hardware/hdmi/IHdmiDeviceEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHdmiMhlVendorCommandListener-(Landroid/hardware/hdmi/IHdmiMhlVendorCommandListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-addVendorCommandListener-(Landroid/hardware/hdmi/IHdmiVendorCommandListener; I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-canChangeSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-clearTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-deviceSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getActiveSource-()Landroid/hardware/hdmi/HdmiDeviceInfo;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getDeviceList-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getInputDevices-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getPortInfo-()Ljava/util/List;\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSupportedTypes-()[I\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-getSystemAudioMode-()Z\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-oneTouchPlay-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-portSelect-(I Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-queryDisplayStatus-(Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeHotplugEventListener-(Landroid/hardware/hdmi/IHdmiHotplugEventListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-removeSystemAudioModeChangeListener-(Landroid/hardware/hdmi/IHdmiSystemAudioModeChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendKeyEvent-(I I Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendMhlVendorCommand-(I I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendStandby-(I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-sendVendorCommand-(I I [B Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setArcMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setHdmiRecordListener-(Landroid/hardware/hdmi/IHdmiRecordListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setInputChangeListener-(Landroid/hardware/hdmi/IHdmiInputChangeListener;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setProhibitMode-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMode-(Z Landroid/hardware/hdmi/IHdmiControlCallback;)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioMute-(Z)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-setSystemAudioVolume-(I I I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startOneTouchRecord-(I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-startTimerRecording-(I I [B)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/hdmi/HdmiControlService$BinderService;-stopOneTouchRecord-(I)V\": [\n        \"android.permission.HDMI_CEC\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-addKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-isInTabletMode-()I\": [\n        \"android.permission.TABLET_MODE\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-registerTabletModeChangedListener-(Landroid/hardware/input/ITabletModeChangedListener;)V\": [\n        \"android.permission.TABLET_MODE\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-removeKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setCurrentKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setKeyboardLayoutForInputDevice-(Landroid/hardware/input/InputDeviceIdentifier; Landroid/view/inputmethod/InputMethodInfo; Landroid/view/inputmethod/InputMethodSubtype; Ljava/lang/String;)V\": [\n        \"android.permission.SET_KEYBOARD_LAYOUT\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-setTouchCalibrationForInputDevice-(Ljava/lang/String; I Landroid/hardware/input/TouchCalibration;)V\": [\n        \"android.permission.SET_INPUT_CALIBRATION\"\n    ],\n    \"Lcom/android/server/input/InputManagerService;-tryPointerSpeed-(I)V\": [\n        \"android.permission.SET_POINTER_SPEED\"\n    ],\n    \"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-schedule-(Landroid/app/job/JobInfo;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;-scheduleAsPackage-(Landroid/app/job/JobInfo; Ljava/lang/String; I Ljava/lang/String;)I\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/media/MediaRouterService;-registerClientAsUser-(Landroid/media/IMediaRouterClient; Ljava/lang/String; I)V\": [\n        \"android.permission.CONFIGURE_WIFI_DISPLAY\"\n    ],\n    \"Lcom/android/server/media/MediaSessionRecord$SessionStub;-setFlags-(I)V\": [\n        \"android.permission.MODIFY_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-addCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-createProjection-(I Ljava/lang/String; I Z)Landroid/media/projection/IMediaProjection;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-getActiveProjectionInfo-()Landroid/media/projection/MediaProjectionInfo;\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-removeCallback-(Landroid/media/projection/IMediaProjectionWatcherCallback;)V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-stopActiveProjection-()V\": [\n        \"android.permission.MANAGE_MEDIA_PROJECTION\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-addRestrictBackgroundWhitelistedUid-(I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-addUidPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-factoryReset-(Ljava/lang/String;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkPolicies-(Ljava/lang/String;)[Landroid/net/NetworkPolicy;\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\",\n        \"android.permission.READ_PRIVILEGED_PHONE_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getNetworkQuotaInfo-(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackground-()Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackgroundByCaller-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getRestrictBackgroundWhitelistedUids-()[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidPolicy-(I)I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-getUidsWithPolicy-(I)[I\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-isUidForeground-(I)Z\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-onTetheringChanged-(Ljava/lang/String; Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-registerListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-removeRestrictBackgroundWhitelistedUid-(I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-removeUidPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setConnectivityListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setDeviceIdleMode-(Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setNetworkPolicies-([Landroid/net/NetworkPolicy;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setRestrictBackground-(Z)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-setUidPolicy-(I I)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-snoozeLimit-(Landroid/net/NetworkTemplate;)V\": [\n        \"android.permission.MANAGE_NETWORK_POLICY\"\n    ],\n    \"Lcom/android/server/net/NetworkPolicyManagerService;-unregisterListener-(Landroid/net/INetworkPolicyListener;)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-advisePersistThreshold-(J)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdate-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-forceUpdateIfaces-()V\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getDataLayerSnapshotForUid-(I)Landroid/net/NetworkStats;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-getNetworkTotalBytes-(Landroid/net/NetworkTemplate; J J)J\": [\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-incrementOperationCount-(I I I)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-registerUsageCallback-(Ljava/lang/String; Landroid/net/DataUsageRequest; Landroid/os/Messenger; Landroid/os/IBinder;)Landroid/net/DataUsageRequest;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\",\n        \"android.permission.READ_NETWORK_USAGE_HISTORY\"\n    ],\n    \"Lcom/android/server/net/NetworkStatsService;-setUidForeground-(I Z)V\": [\n        \"android.permission.MODIFY_NETWORK_ACCOUNTING\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-createSession-(Landroid/content/pm/PackageInstaller$SessionParams; Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-getAllSessions-(I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-getMySessions-(Ljava/lang/String; I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-registerCallback-(Landroid/content/pm/IPackageInstallerCallback; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-setPermissionsResult-(I Z)V\": [\n        \"android.permission.INSTALL_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageInstallerService;-uninstall-(Ljava/lang/String; Ljava/lang/String; I Landroid/content/IntentSender; I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addCrossProfileIntentFilter-(Landroid/content/IntentFilter; Ljava/lang/String; I I I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addOnPermissionsChangeListener-(Landroid/content/pm/IOnPermissionsChangeListener;)V\": [\n        \"android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-addPreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-canForwardTo-(Landroid/content/Intent; Ljava/lang/String; I I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearApplicationUserData-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver; I)V\": [\n        \"android.permission.CLEAR_APP_USER_DATA\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearCrossProfileIntentFilters-(I Ljava/lang/String;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-clearPackagePreferredActivities-(Ljava/lang/String;)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFiles-(Ljava/lang/String; Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deleteApplicationCacheFilesAsUser-(Ljava/lang/String; I Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.DELETE_CACHE_FILES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackage-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver2; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-deletePackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageDeleteObserver; I I)V\": [\n        \"android.permission.DELETE_PACKAGES\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-extendVerificationTimeout-(I I J)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-flushPackageRestrictionsAsUser-(I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorage-(Ljava/lang/String; J Landroid/content/IntentSender;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-freeStorageAndNotify-(Ljava/lang/String; J Landroid/content/pm/IPackageDataObserver;)V\": [\n        \"android.permission.CLEAR_APP_CACHE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getActivityInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationEnabledSetting-(Ljava/lang/String; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationHiddenSettingAsUser-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getApplicationInfo-(Ljava/lang/String; I I)Landroid/content/pm/ApplicationInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getComponentEnabledSetting-(Landroid/content/ComponentName; I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getHomeActivities-(Ljava/util/List;)Landroid/content/ComponentName;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getInstalledPackages-(I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getMoveStatus-(I)I\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageGids-(Ljava/lang/String; I I)[I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageInfo-(Ljava/lang/String; I I)Landroid/content/pm/PackageInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageSizeInfo-(Ljava/lang/String; I Landroid/content/pm/IPackageStatsObserver;)V\": [\n        \"android.permission.GET_PACKAGE_SIZE\",\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPackageUid-(Ljava/lang/String; I I)I\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getPermissionFlags-(Ljava/lang/String; Ljava/lang/String; I)I\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getProviderInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ProviderInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getReceiverInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ActivityInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getServiceInfo-(Landroid/content/ComponentName; I I)Landroid/content/pm/ServiceInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-getVerifierDeviceIdentity-()Landroid/content/pm/VerifierDeviceIdentity;\": [\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-grantRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installExistingPackageAsUser-(Ljava/lang/String; I)I\": [\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-installPackageAsUser-(Ljava/lang/String; Landroid/content/pm/IPackageInstallObserver2; I Ljava/lang/String; I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INSTALL_PACKAGES\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isEphemeralApplication-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPackageAvailable-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPackageSuspendedForUser-(Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-isPermissionRevokedByPolicy-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePackage-(Ljava/lang/String; Ljava/lang/String;)I\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MOVE_PACKAGE\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-movePrimaryStorage-(Ljava/lang/String;)I\": [\n        \"android.permission.MOVE_PACKAGE\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivities-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentActivityOptions-(Landroid/content/ComponentName; [Landroid/content/Intent; [Ljava/lang/String; Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentContentProviders-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentReceivers-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-queryIntentServices-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-registerMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-replacePreferredActivity-(Landroid/content/IntentFilter; I [Landroid/content/ComponentName; Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetApplicationPreferences-(I)V\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resetRuntimePermissions-()V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveIntent-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-resolveService-(Landroid/content/Intent; Ljava/lang/String; I I)Landroid/content/pm/ResolveInfo;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-revokeRuntimePermission-(Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationEnabledSetting-(Ljava/lang/String; I I I Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setApplicationHiddenSettingAsUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setBlockUninstallForUser-(Ljava/lang/String; Z I)Z\": [\n        \"android.permission.DELETE_PACKAGES\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setComponentEnabledSetting-(Landroid/content/ComponentName; I I I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setDefaultBrowserPackageName-(Ljava/lang/String; I)Z\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setHomeActivity-(Landroid/content/ComponentName; I)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setInstallLocation-(I)Z\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setLastChosenActivity-(Landroid/content/Intent; Ljava/lang/String; I Landroid/content/IntentFilter; I Landroid/content/ComponentName;)V\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackageStoppedState-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPackagesSuspendedAsUser-([Ljava/lang/String; Z I)[Ljava/lang/String;\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.MANAGE_USERS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-setPermissionEnforced-(Ljava/lang/String; Z)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-shouldShowRequestPermissionRationale-(Ljava/lang/String; Ljava/lang/String; I)Z\": [\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-systemReady-()V\": [\n        \"android.permission.CHANGE_COMPONENT_ENABLED_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-unregisterMoveCallback-(Landroid/content/pm/IPackageMoveObserver;)V\": [\n        \"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updateExternalMediaStatus-(Z Z)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updateIntentVerificationStatus-(Ljava/lang/String; I I)Z\": [\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlags-(Ljava/lang/String; Ljava/lang/String; I I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-updatePermissionFlagsForAllApps-(I I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyIntentFilter-(I I Ljava/util/List;)V\": [\n        \"android.permission.INTENT_FILTER_VERIFICATION_AGENT\"\n    ],\n    \"Lcom/android/server/pm/PackageManagerService;-verifyPendingInstall-(I I)V\": [\n        \"android.permission.GRANT_RUNTIME_PERMISSIONS\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.PACKAGE_VERIFICATION_AGENT\",\n        \"android.permission.REVOKE_RUNTIME_PERMISSIONS\",\n        \"android.permission.SET_PREFERRED_APPLICATIONS\"\n    ],\n    \"Lcom/android/server/pm/ShortcutService;-onApplicationActive-(Ljava/lang/String; I)V\": [\n        \"android.permission.RESET_SHORTCUT_MANAGER_THROTTLING\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLock-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-acquireWakeLockWithUid-(Landroid/os/IBinder; I Ljava/lang/String; Ljava/lang/String; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-boostScreenBrightness-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-crash-(Ljava/lang/String;)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-goToSleep-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-nap-(J)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-powerHint-(I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-reboot-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\",\n        \"android.permission.RECOVERY\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-rebootSafeMode-(Z Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-releaseWakeLock-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setAttentionLight-(Z I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setPowerSaveMode-(Z)Z\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenAutoBrightnessAdjustmentSettingOverride-(F)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-setTemporaryScreenBrightnessSettingOverride-(I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-shutdown-(Z Ljava/lang/String; Z)V\": [\n        \"android.permission.REBOOT\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockUids-(Landroid/os/IBinder; [I)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-updateWakeLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource; Ljava/lang/String;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-userActivity-(J I I)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/power/PowerManagerService$BinderService;-wakeUp-(J Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-addPrintJobStateChangeListener-(Landroid/print/IPrintJobStateChangeListener; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-cancelPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfo-(Landroid/print/PrintJobId; I I)Landroid/print/PrintJobInfo;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-getPrintJobInfos-(I I)Ljava/util/List;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-print-(Ljava/lang/String; Landroid/print/IPrintDocumentAdapter; Landroid/print/PrintAttributes; Ljava/lang/String; I I)Landroid/os/Bundle;\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/print/PrintManagerService$PrintManagerImpl;-restartPrintJob-(Landroid/print/PrintJobId; I I)V\": [\n        \"com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS\"\n    ],\n    \"Lcom/android/server/sip/SipService;-close-(Ljava/lang/String; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-createSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getListOfProfiles-(Ljava/lang/String;)[Landroid/net/sip/SipProfile;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-getPendingSession-(Ljava/lang/String; Ljava/lang/String;)Landroid/net/sip/ISipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isOpened-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-isRegistered-(Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open-(Landroid/net/sip/SipProfile; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-open3-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/sip/SipService;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/ISipSessionListener; Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-deleteSoundModel-(Landroid/os/ParcelUuid;)V\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-getSoundModel-(Landroid/os/ParcelUuid;)Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-startRecognition-(Landroid/os/ParcelUuid; Landroid/hardware/soundtrigger/IRecognitionStatusCallback; Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-stopRecognition-(Landroid/os/ParcelUuid; Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-updateSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)V\": [\n        \"android.permission.MANAGE_SOUND_TRIGGER\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-addTile-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-clearNotificationEffects-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-clickTile-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-collapsePanels-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable2-(I Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disable2ForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-disableForUser-(I Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandNotificationsPanel-()V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-expandSettingsPanel-(Ljava/lang/String;)V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-handleSystemNavigationKey-(I)V\": [\n        \"android.permission.EXPAND_STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onClearAllNotifications-(I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationActionClick-(Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClear-(Ljava/lang/String; Ljava/lang/String; I I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationClick-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationError-(Ljava/lang/String; Ljava/lang/String; I I I Ljava/lang/String; I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationExpansionChanged-(Ljava/lang/String; Z Z)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onNotificationVisibilityChanged-([Lcom/android/internal/statusbar/NotificationVisibility; [Lcom/android/internal/statusbar/NotificationVisibility;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelHidden-()V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-onPanelRevealed-(Z I)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-registerStatusBar-(Lcom/android/internal/statusbar/IStatusBar; Ljava/util/List; Ljava/util/List; [I Ljava/util/List; Landroid/graphics/Rect; Landroid/graphics/Rect;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-remTile-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-removeIcon-(Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIcon-(Ljava/lang/String; Ljava/lang/String; I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setIconVisibility-(Ljava/lang/String; Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setImeWindowStatus-(Landroid/os/IBinder; I I Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/statusbar/StatusBarManagerService;-setSystemUiVisibility-(I I Ljava/lang/String;)V\": [\n        \"android.permission.STATUS_BAR_SERVICE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-acquireTvInputHardware-(I Landroid/media/tv/ITvInputHardwareCallback; Landroid/media/tv/TvInputInfo; I)Landroid/media/tv/ITvInputHardware;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-addBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-captureFrame-(Ljava/lang/String; Landroid/view/Surface; Landroid/media/tv/TvStreamConfig; I)Z\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getAvailableTvStreamConfigList-(Ljava/lang/String; I)Ljava/util/List;\": [\n        \"android.permission.CAPTURE_TV_INPUT\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getDvbDeviceList-()Ljava/util/List;\": [\n        \"android.permission.DVB_DEVICE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-getHardwareList-()Ljava/util/List;\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-openDvbDevice-(Landroid/media/tv/DvbDeviceInfo; I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.DVB_DEVICE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-releaseTvInputHardware-(I Landroid/media/tv/ITvInputHardware; I)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-removeBlockedRating-(Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-setParentalControlsEnabled-(Z I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$BinderService;-unblockContent-(Landroid/os/IBinder; Ljava/lang/String; I)V\": [\n        \"android.permission.MODIFY_PARENTAL_CONTROLS\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHardwareInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-addHdmiInput-(I Landroid/media/tv/TvInputInfo;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/tv/TvInputManagerService$ServiceCallback;-removeHardwareInput-(Ljava/lang/String;)V\": [\n        \"android.permission.TV_INPUT_HARDWARE\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-onCarrierPrivilegedAppsChanged-()V\": [\n        \"android.permission.BIND_CARRIER_SERVICES\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryConfigurationStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryEvents-(J J Ljava/lang/String;)Landroid/app/usage/UsageEvents;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-queryUsageStats-(I J J Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;\": [\n        \"android.permission.PACKAGE_USAGE_STATS\"\n    ],\n    \"Lcom/android/server/usage/UsageStatsService$BinderService;-setAppInactive-(Ljava/lang/String; Z I)V\": [\n        \"android.permission.CHANGE_APP_IDLE_STATE\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-allowUsbDebugging-(Z Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearDefaults-(Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-clearUsbDebuggingKeys-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-denyUsbDebugging-()V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-getPortStatus-(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-getPorts-()[Landroid/hardware/usb/UsbPort;\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantAccessoryPermission-(Landroid/hardware/usb/UsbAccessory; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-grantDevicePermission-(Landroid/hardware/usb/UsbDevice; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-hasDefaults-(Ljava/lang/String; I)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-isFunctionEnabled-(Ljava/lang/String;)Z\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setAccessoryPackage-(Landroid/hardware/usb/UsbAccessory; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setCurrentFunction-(Ljava/lang/String;)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setDevicePackage-(Landroid/hardware/usb/UsbDevice; Ljava/lang/String; I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setPortRoles-(Ljava/lang/String; I I)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/usb/UsbService;-setUsbDataUnlocked-(Z)V\": [\n        \"android.permission.MANAGE_USB\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-activeServiceSupportsAssist-()Z\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-activeServiceSupportsLaunchFromKeyguard-()Z\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-deleteKeyphraseSoundModel-(I Ljava/lang/String;)I\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getActiveServiceComponentName-()Landroid/content/ComponentName;\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-getKeyphraseSoundModel-(I Ljava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-hideCurrentSession-()V\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-isSessionRunning-()Z\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-launchVoiceAssistFromKeyguard-()V\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-onLockscreenShown-()V\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-registerVoiceInteractionSessionListener-(Lcom/android/internal/app/IVoiceInteractionSessionListener;)V\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-showSessionForActiveService-(Landroid/os/Bundle; I Lcom/android/internal/app/IVoiceInteractionSessionShowCallback; Landroid/os/IBinder;)Z\": [\n        \"android.permission.ACCESS_VOICE_INTERACTION_SERVICE\"\n    ],\n    \"Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-updateKeyphraseSoundModel-(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I\": [\n        \"android.permission.MANAGE_VOICE_KEYPHRASES\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-clearWallpaper-(Ljava/lang/String; I I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDimensionHints-(I I Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setDisplayPadding-(Landroid/graphics/Rect; Ljava/lang/String;)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setLockWallpaperCallback-(Landroid/app/IWallpaperManagerCallback;)Z\": [\n        \"android.permission.INTERNAL_SYSTEM_WINDOW\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaper-(Ljava/lang/String; Ljava/lang/String; Landroid/graphics/Rect; Z Landroid/os/Bundle; I Landroid/app/IWallpaperManagerCallback; I)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponent-(Landroid/content/ComponentName;)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/wallpaper/WallpaperManagerService;-setWallpaperComponentChecked-(Landroid/content/ComponentName; Ljava/lang/String; I)V\": [\n        \"android.permission.SET_WALLPAPER_COMPONENT\"\n    ],\n    \"Lcom/android/server/webkit/WebViewUpdateService$BinderService;-changeProviderAndSetting-(Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/webkit/WebViewUpdateService$BinderService;-enableFallbackLogic-(Z)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-acquireMulticastLock-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-acquireWifiLock-(Landroid/os/IBinder; I Ljava/lang/String; Landroid/os/WorkSource;)Z\": [\n        \"android.permission.UPDATE_DEVICE_STATS\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-addOrUpdateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-addToBlacklist-(Ljava/lang/String;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-clearBlacklist-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disableEphemeralNetwork-(Ljava/lang/String;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-disconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableAggressiveHandover-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableVerboseLogging-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-enableWifiConnectivityManager-(Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-factoryReset-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getAggressiveHandover-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getAllowScansWithTraffic-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConfigFile-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getConnectionStatistics-()Landroid/net/wifi/WifiConnectionStatistics;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.READ_WIFI_CREDENTIAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getCountryCode-()Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getCurrentNetwork-()Landroid/net/Network;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getEnableAutoJoinWhenAssociated-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getFrequencyBand-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getMatchingWifiConfig-(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getPrivilegedConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.READ_WIFI_CREDENTIAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getScanResults-(Ljava/lang/String;)Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.INTERACT_ACROSS_USERS_FULL\",\n        \"android.permission.PEERS_MAC_ADDRESS\",\n        \"android.permission.SCORE_NETWORKS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getSupportedFeatures-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getVerboseLoggingLevel-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApConfiguration-()Landroid/net/wifi/WifiConfiguration;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiApEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiEnabledState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWifiServiceMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-getWpsNfcConfigurationToken-(I)Ljava/lang/String;\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-initializeMulticastFiltering-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-isMulticastEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reassociate-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reconnect-()V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-releaseMulticastLock-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-releaseWifiLock-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-reportActivityInfo-()Landroid/net/wifi/WifiActivityEnergyInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-requestActivityInfo-(Landroid/os/ResultReceiver;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setAllowScansWithTraffic-(I)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setCountryCode-(Ljava/lang/String; Z)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setEnableAutoJoinWhenAssociated-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setFrequencyBand-(I Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApConfiguration-(Landroid/net/wifi/WifiConfiguration;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiApEnabled-(Landroid/net/wifi/WifiConfiguration; Z)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.TETHER_PRIVILEGED\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-startScan-(Landroid/net/wifi/ScanSettings; Landroid/os/WorkSource;)V\": [\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/WifiServiceImpl;-updateWifiLockWorkSource-(Landroid/os/IBinder; Landroid/os/WorkSource;)V\": [\n        \"android.permission.UPDATE_DEVICE_STATS\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-getP2pStateMachineMessenger-()Landroid/os/Messenger;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\",\n        \"android.permission.CONNECTIVITY_INTERNAL\",\n        \"android.permission.LOCATION_HARDWARE\"\n    ],\n    \"Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;-setMiracastMode-(I)V\": [\n        \"android.permission.CONNECTIVITY_INTERNAL\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addAppToken-(I Landroid/view/IApplicationToken; I I I Z Z I I Z Z Landroid/graphics/Rect; Landroid/content/res/Configuration; I Z Z I I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-addWindowToken-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplayDensityForUser-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearForcedDisplaySize-(I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-clearWindowContentFrameStats-(Landroid/os/IBinder;)Z\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-disableKeyguard-(Landroid/os/IBinder; Ljava/lang/String;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-dismissKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-executeAppTransition-()V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-exitKeyguardSecurely-(Landroid/view/IOnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-freezeRotation-(I)V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-getWindowContentFrameStats-(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;\": [\n        \"android.permission.FRAME_STATS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-isViewServerRunning-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-keyguardGoingAway-(I)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-lockNow-(Landroid/os/Bundle;)V\": [\n        \"android.permission.DEVICE_POWER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-notifyAppResumed-(Landroid/os/IBinder; Z Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-notifyAppStopped-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-pauseKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-prepareAppTransition-(I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-reenableKeyguard-(Landroid/os/IBinder;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-registerDockedStackListener-(Landroid/view/IDockedStackListener;)V\": [\n        \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-registerShortcutKey-(J Lcom/android/internal/policy/IShortcutService;)V\": [\n        \"android.permission.REGISTER_WINDOW_MANAGER_LISTENERS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeAppToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-removeWindowToken-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-requestAssistScreenshot-(Lcom/android/internal/app/IAssistScreenshotReceiver;)Z\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-resumeKeyDispatching-(Landroid/os/IBinder;)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotApplications-(Landroid/os/IBinder; I I I F)Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-screenshotWallpaper-()Landroid/graphics/Bitmap;\": [\n        \"android.permission.READ_FRAME_BUFFER\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScale-(I F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAnimationScales-([F)V\": [\n        \"android.permission.SET_ANIMATION_SCALE\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppOrientation-(Landroid/view/IApplicationToken; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppStartingWindow-(Landroid/os/IBinder; Ljava/lang/String; I Landroid/content/res/CompatibilityInfo; Ljava/lang/CharSequence; I I I I Landroid/os/IBinder; Z)Z\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppTask-(Landroid/os/IBinder; I I Landroid/graphics/Rect; Landroid/content/res/Configuration; I Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setAppVisibility-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setEventDispatching-(Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setFocusedApp-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayDensityForUser-(I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplayScalingMode-(I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setForcedDisplaySize-(I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setNewConfiguration-(Landroid/content/res/Configuration;)[I\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setOverscan-(I I I I I)V\": [\n        \"android.permission.WRITE_SECURE_SETTINGS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setRecentsVisibility-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-setTvPipVisibility-(Z)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startAppFreezingScreen-(Landroid/os/IBinder; I)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startFreezingScreen-(I I)V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-startViewServer-(I)Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-statusBarVisibilityChanged-(I)V\": [\n        \"android.permission.STATUS_BAR\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopAppFreezingScreen-(Landroid/os/IBinder; Z)V\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopFreezingScreen-()V\": [\n        \"android.permission.FREEZE_SCREEN\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-stopViewServer-()Z\": [\n        \"android.permission.DUMP\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-thawRotation-()V\": [\n        \"android.permission.SET_ORIENTATION\"\n    ],\n    \"Lcom/android/server/wm/WindowManagerService;-updateOrientationFromAppTokens-(Landroid/content/res/Configuration; Landroid/os/IBinder;)Landroid/content/res/Configuration;\": [\n        \"android.permission.MANAGE_APP_TOKENS\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/accounts/AccountAuthenticatorActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Activity;-stopLockTask-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Activity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ActivityGroup;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityGroup;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ActivityManager;-getRecentTasks-(I I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningAppProcesses-()Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-getRunningTasks-(I)Ljava/util/List;\": [\n        \"android.permission.GET_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-killBackgroundProcesses-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-moveTaskToFront-(I I Landroid/os/Bundle;)V\": [\n        \"android.permission.BROADCAST_STICKY\",\n        \"android.permission.REORDER_TASKS\"\n    ],\n    \"Landroid/app/ActivityManager;-restartPackage-(Ljava/lang/String;)V\": [\n        \"android.permission.KILL_BACKGROUND_PROCESSES\"\n    ],\n    \"Landroid/app/AliasActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/AliasActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/AliasActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/Application;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Application;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ExpandableListActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/JobSchedulerImpl;-schedule-(Landroid/app/job/JobInfo;)I\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-disableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager$KeyguardLock;-reenableKeyguard-()V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/KeyguardManager;-exitKeyguardSecurely-(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V\": [\n        \"android.permission.DISABLE_KEYGUARD\"\n    ],\n    \"Landroid/app/ListActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/ListActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/ListActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/NativeActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/NativeActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Service;-stopSelf-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Service;-stopSelf-(I)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/Service;-stopSelfResult-(I)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/TabActivity;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/TabActivity;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-clear-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap; Landroid/graphics/Rect; Z)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setBitmap-(Landroid/graphics/Bitmap; Landroid/graphics/Rect; Z I)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setResource-(I I)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream; Landroid/graphics/Rect; Z)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-setStream-(Ljava/io/InputStream; Landroid/graphics/Rect; Z I)I\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/WallpaperManager;-suggestDesiredDimensions-(I I)V\": [\n        \"android.permission.SET_WALLPAPER_HINTS\"\n    ],\n    \"Landroid/app/admin/DevicePolicyManager;-getWifiMacAddress-(Landroid/content/ComponentName;)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupAgentHelper;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/app/backup/BackupManager;-dataChanged-()V\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Landroid/app/backup/BackupManager;-dataChanged-(Ljava/lang/String;)V\": [\n        \"android.permission.RECEIVE_BOOT_COMPLETED\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothA2dp;-isA2dpPlaying-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-cancelDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-closeProfileProxy-(I Landroid/bluetooth/BluetoothProfile;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-disable-()Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-enable-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getAddress-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeAdvertiser-()Landroid/bluetooth/le/BluetoothLeAdvertiser;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBluetoothLeScanner-()Landroid/bluetooth/le/BluetoothLeScanner;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getBondedDevices-()Ljava/util/Set;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileConnectionState-(I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getProfileProxy-(Landroid/content/Context; Landroid/bluetooth/BluetoothProfile$ServiceListener; I)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getScanMode-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-getState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isDiscovering-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isEnabled-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isMultipleAdvertisementSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isOffloadedFilteringSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-isOffloadedScanBatchingSupported-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingInsecureRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-listenUsingRfcommWithServiceRecord-(Ljava/lang/String; Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-setName-(Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startDiscovery-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-([Ljava/util/UUID; Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-startLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothAdapter;-stopLeScan-(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-connectGatt-(Landroid/content/Context; Z Landroid/bluetooth/BluetoothGattCallback; I)Landroid/bluetooth/BluetoothGatt;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createBond-()Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createInsecureRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-createRfcommSocketToServiceRecord-(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-fetchUuidsWithSdp-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBluetoothClass-()Landroid/bluetooth/BluetoothClass;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getBondState-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getName-()Ljava/lang/String;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getType-()I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-getUuids-()[Landroid/os/ParcelUuid;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothDevice;-setPin-([B)Z\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-abortReliableWrite-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-beginReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-connect-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-disconnect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-discoverServices-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-executeReliableWrite-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-readRemoteRssi-()Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-requestConnectionPriority-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-requestMtu-(I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-setCharacteristicNotification-(Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeCharacteristic-(Landroid/bluetooth/BluetoothGattCharacteristic;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGatt;-writeDescriptor-(Landroid/bluetooth/BluetoothGattDescriptor;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-addService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-cancelConnection-(Landroid/bluetooth/BluetoothDevice;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-clearServices-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-close-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-connect-(Landroid/bluetooth/BluetoothDevice; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-notifyCharacteristicChanged-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothGattCharacteristic; Z)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-removeService-(Landroid/bluetooth/BluetoothGattService;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothGattServer;-sendResponse-(Landroid/bluetooth/BluetoothDevice; I I I [B)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-isAudioConnected-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-sendVendorSpecificResultCode-(Landroid/bluetooth/BluetoothDevice; Ljava/lang/String; Ljava/lang/String;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-startVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHeadset;-stopVoiceRecognition-(Landroid/bluetooth/BluetoothDevice;)Z\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-connectChannelToSource-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-disconnectChannel-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration; I)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectedDevices-()Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getConnectionState-(Landroid/bluetooth/BluetoothDevice;)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getDevicesMatchingConnectionStates-([I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-getMainChannelFd-(Landroid/bluetooth/BluetoothDevice; Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-registerSinkAppConfiguration-(Ljava/lang/String; I Landroid/bluetooth/BluetoothHealthCallback;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothHealth;-unregisterAppConfiguration-(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectedDevices-(I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getConnectionState-(Landroid/bluetooth/BluetoothDevice; I)I\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-getDevicesMatchingConnectionStates-(I [I)Ljava/util/List;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothManager;-openGattServer-(Landroid/content/Context; Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/BluetoothSocket;-connect-()V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-startAdvertising-(Landroid/bluetooth/le/AdvertiseSettings; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseData; Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeAdvertiser;-stopAdvertising-(Landroid/bluetooth/le/AdvertiseCallback;)V\": [\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-flushPendingScanResults-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-startScan-(Ljava/util/List; Landroid/bluetooth/le/ScanSettings; Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/bluetooth/le/BluetoothLeScanner;-stopScan-(Landroid/bluetooth/le/ScanCallback;)V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.BLUETOOTH_ADMIN\"\n    ],\n    \"Landroid/content/ContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/ContextWrapper;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/ContextWrapper;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/content/MutableContextWrapper;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-getCarrierFrequencies-()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/ConsumerIrManager;-transmit-(I [I)V\": [\n        \"android.permission.TRANSMIT_IR\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-authenticate-(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject; Landroid/os/CancellationSignal; I Landroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback; Landroid/os/Handler;)V\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-hasEnrolledFingerprints-()Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/hardware/fingerprint/FingerprintManager;-isHardwareDetected-()Z\": [\n        \"android.permission.USE_FINGERPRINT\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/inputmethodservice/InputMethodService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/location/LocationManager;-addGpsStatusListener-(Landroid/location/GpsStatus$Listener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/GpsStatus$NmeaListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/OnNmeaMessageListener;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addNmeaListener-(Landroid/location/OnNmeaMessageListener; Landroid/os/Handler;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-addProximityAlert-(D D F J Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getBestProvider-(Landroid/location/Criteria; Z)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getLastKnownLocation-(Ljava/lang/String;)Landroid/location/Location;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProvider-(Ljava/lang/String;)Landroid/location/LocationProvider;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Landroid/location/Criteria; Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-getProviders-(Z)Ljava/util/List;\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-registerGnssStatusCallback-(Landroid/location/GnssStatus$Callback;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-registerGnssStatusCallback-(Landroid/location/GnssStatus$Callback; Landroid/os/Handler;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-removeUpdates-(Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(Ljava/lang/String; J F Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestLocationUpdates-(J F Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Landroid/location/Criteria; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-requestSingleUpdate-(Ljava/lang/String; Landroid/location/LocationListener; Landroid/os/Looper;)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/location/LocationManager;-sendExtraCommand-(Ljava/lang/String; Ljava/lang/String; Landroid/os/Bundle;)Z\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.ACCESS_FINE_LOCATION\",\n        \"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-play-(Landroid/content/Context; Landroid/net/Uri; Z I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AsyncPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/AudioManager;-adjustStreamVolume-(I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-setBluetoothScoOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMicrophoneMute-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setMode-(I)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setSpeakerphoneOn-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-setStreamMute-(I Z)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-setStreamVolume-(I I I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/AudioManager;-startBluetoothSco-()V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/AudioManager;-stopBluetoothSco-()V\": [\n        \"android.permission.BLUETOOTH\",\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/media/MediaPlayer;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-reset-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-setWakeMode-(Landroid/content/Context; I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaPlayer;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/MediaRouter$RouteGroup;-requestSetVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteGroup;-requestUpdateVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteInfo;-requestSetVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaRouter$RouteInfo;-requestUpdateVolume-(I)V\": [\n        \"android.permission.BLUETOOTH\"\n    ],\n    \"Landroid/media/MediaScannerConnection;-disconnect-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/media/Ringtone;-play-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setAudioAttributes-(Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-setStreamType-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/Ringtone;-stop-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(Landroid/content/Context; Landroid/net/Uri;)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-getRingtone-(I)Landroid/media/Ringtone;\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/RingtoneManager;-stopPreviousRingtone-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/media/browse/MediaBrowser;-disconnect-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetwork-()Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getActiveNetworkInfo-()Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworkInfo-()[Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getAllNetworks-()[Landroid/net/Network;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getLinkProperties-(Landroid/net/Network;)Landroid/net/LinkProperties;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkCapabilities-(Landroid/net/Network;)Landroid/net/NetworkCapabilities;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(Landroid/net/Network;)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getNetworkInfo-(I)Landroid/net/NetworkInfo;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-getRestrictBackgroundStatus-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-isActiveNetworkMetered-()Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerDefaultNetworkCallback-(Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-registerNetworkCallback-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-reportBadNetwork-(Landroid/net/Network;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Landroid/net/ConnectivityManager;-reportNetworkConnectivity-(Landroid/net/Network; Z)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.INTERNET\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestBandwidthUpdate-(Landroid/net/Network;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestNetwork-(Landroid/net/NetworkRequest; Landroid/net/ConnectivityManager$NetworkCallback;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-requestRouteToHost-(I I)Z\": [\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/ConnectivityManager;-startUsingNetworkFeature-(I Ljava/lang/String;)I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_NETWORK_STATE\"\n    ],\n    \"Landroid/net/VpnService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-onRevoke-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/net/VpnService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/VpnService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-close-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-endCall-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-setSpeakerMode-(Z)V\": [\n        \"android.permission.MODIFY_AUDIO_SETTINGS\"\n    ],\n    \"Landroid/net/sip/SipAudioCall;-startAudio-()V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/sip/SipManager;-close-(Ljava/lang/String;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-createSipSession-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-getSessionFor-(Landroid/content/Intent;)Landroid/net/sip/SipSession;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isOpened-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-isRegistered-(Ljava/lang/String;)Z\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipProfile; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-makeAudioCall-(Ljava/lang/String; Ljava/lang/String; Landroid/net/sip/SipAudioCall$Listener; I)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-open-(Landroid/net/sip/SipProfile; Landroid/app/PendingIntent; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-register-(Landroid/net/sip/SipProfile; I Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-setRegistrationListener-(Ljava/lang/String; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-takeAudioCall-(Landroid/content/Intent; Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/sip/SipManager;-unregister-(Landroid/net/sip/SipProfile; Landroid/net/sip/SipRegistrationListener;)V\": [\n        \"android.permission.USE_SIP\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-acquire-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$MulticastLock;-release-()V\": [\n        \"android.permission.CHANGE_WIFI_MULTICAST_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager$WifiLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-addNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-cancelWps-(Landroid/net/wifi/WifiManager$WpsCallback;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disableNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-disconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-enableNetwork-(I Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConfiguredNetworks-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getConnectionInfo-()Landroid/net/wifi/WifiInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getDhcpInfo-()Landroid/net/DhcpInfo;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getScanResults-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-getWifiState-()I\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-is5GHzBandSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isDeviceToApRttSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isEnhancedPowerReportingSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isP2pSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isPreferredNetworkOffloadSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isScanAlwaysAvailable-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isTdlsSupported-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-isWifiEnabled-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-pingSupplicant-()Z\": [\n        \"android.permission.ACCESS_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reassociate-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-reconnect-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-removeNetwork-(I)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-saveConfiguration-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-setWifiEnabled-(Z)Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startScan-()Z\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-startWps-(Landroid/net/wifi/WpsInfo; Landroid/net/wifi/WifiManager$WpsCallback;)V\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/WifiManager;-updateNetwork-(Landroid/net/wifi/WifiConfiguration;)I\": [\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/net/wifi/p2p/WifiP2pManager;-initialize-(Landroid/content/Context; Landroid/os/Looper; Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;\": [\n        \"android.permission.ACCESS_WIFI_STATE\",\n        \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-acquire-(J)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-release-(I)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/PowerManager$WakeLock;-setWorkSource-(Landroid/os/WorkSource;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/os/SystemVibrator;-cancel-()V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; [J I Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/os/SystemVibrator;-vibrate-(I Ljava/lang/String; J Landroid/media/AudioAttributes;)V\": [\n        \"android.permission.VIBRATE\"\n    ],\n    \"Landroid/security/KeyChain;-getCertificateChain-(Landroid/content/Context; Ljava/lang/String;)[Ljava/security/cert/X509Certificate;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/security/KeyChain;-getPrivateKey-(Landroid/content/Context; Ljava/lang/String;)Ljava/security/PrivateKey;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchGenericMotionEvent-(Landroid/view/MotionEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchKeyEvent-(Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchKeyShortcutEvent-(Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchTouchEvent-(Landroid/view/MotionEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-dispatchTrackballEvent-(Landroid/view/MotionEvent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-finish-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-onWakeUp-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/dreams/DreamService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/dreams/DreamService;-wakeUp-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/quicksettings/TileService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/service/voice/VoiceInteractionService;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/SpeechRecognizer;-destroy-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getAvailableLanguages-()Ljava/util/Set;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getDefaultLanguage-()Ljava/util/Locale;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getDefaultVoice-()Landroid/speech/tts/Voice;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getFeatures-(Ljava/util/Locale;)Ljava/util/Set;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getLanguage-()Ljava/util/Locale;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getVoice-()Landroid/speech/tts/Voice;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-getVoices-()Ljava/util/Set;\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-isLanguageAvailable-(Ljava/util/Locale;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-isSpeaking-()Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-playEarcon-(Ljava/lang/String; I Landroid/os/Bundle; Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-playEarcon-(Ljava/lang/String; I Ljava/util/HashMap;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-playSilence-(J I Ljava/util/HashMap;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-playSilentUtterance-(J I Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-setLanguage-(Ljava/util/Locale;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-setVoice-(Landroid/speech/tts/Voice;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-shutdown-()V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-speak-(Ljava/lang/CharSequence; I Landroid/os/Bundle; Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-speak-(Ljava/lang/String; I Ljava/util/HashMap;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-stop-()I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-synthesizeToFile-(Ljava/lang/CharSequence; Landroid/os/Bundle; Ljava/io/File; Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/speech/tts/TextToSpeech;-synthesizeToFile-(Ljava/lang/String; Ljava/util/HashMap; Ljava/lang/String;)I\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/telephony/PhoneNumberUtils;-isVoiceMailNumber-(Ljava/lang/String;)Z\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-downloadMultimediaMessage-(Landroid/content/Context; Ljava/lang/String; Landroid/net/Uri; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.RECEIVE_MMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-injectSmsPdu-([B Ljava/lang/String; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultimediaMessage-(Landroid/content/Context; Landroid/net/Uri; Ljava/lang/String; Landroid/os/Bundle; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getAllCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getCellLocation-()Landroid/telephony/CellLocation;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getDeviceId-(I)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getGroupIdLevel1-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getIccAuthentication-(I I Ljava/lang/String;)Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getLine1Number-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getNeighboringCellInfo-()Ljava/util/List;\": [\n        \"android.permission.ACCESS_FINE_LOCATION\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getPhoneCount-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimSerialNumber-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSimState-()I\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getSubscriberId-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailAlphaTag-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-getVoiceMailNumber-()Ljava/lang/String;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/TelephonyManager;-listen-(Landroid/telephony/PhoneStateListener; I)V\": [\n        \"android.permission.ACCESS_COARSE_LOCATION\",\n        \"android.permission.READ_PHONE_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-divideMessage-(Ljava/lang/String;)Ljava/util/ArrayList;\": [\n        \"android.permission.ACCESS_NETWORK_STATE\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendDataMessage-(Ljava/lang/String; Ljava/lang/String; S [B Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.ACCESS_NETWORK_STATE\",\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendMultipartTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/util/ArrayList; Ljava/util/ArrayList; Ljava/util/ArrayList;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/telephony/gsm/SmsManager;-sendTextMessage-(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Landroid/app/PendingIntent; Landroid/app/PendingIntent;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\",\n        \"android.permission.SEND_SMS\"\n    ],\n    \"Landroid/test/IsolatedContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/IsolatedContext;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/IsolatedContext;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/RenamingDelegatingContext;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/test/mock/MockApplication;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/test/mock/MockApplication;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-clearWallpaper-()V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcast-(Landroid/content/Intent;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-removeStickyBroadcastAsUser-(Landroid/content/Intent; Landroid/os/UserHandle;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Landroid/graphics/Bitmap;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-setWallpaper-(Ljava/io/InputStream;)V\": [\n        \"android.permission.SET_WALLPAPER\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-stopService-(Landroid/content/Intent;)Z\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/ContextThemeWrapper;-unbindService-(Landroid/content/ServiceConnection;)V\": [\n        \"android.permission.BROADCAST_STICKY\"\n    ],\n    \"Landroid/view/inputmethod/InputMethodManager;-showInputMethodAndSubtypeEnabler-(Ljava/lang/String;)V\": [\n        \"android.permission.READ_EXTERNAL_STORAGE\"\n    ],\n    \"Landroid/widget/VideoView;-getAudioSessionId-()I\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-onKeyDown-(I Landroid/view/KeyEvent;)Z\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-pause-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-resume-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoPath-(Ljava/lang/String;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-setVideoURI-(Landroid/net/Uri; Ljava/util/Map;)V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-start-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-stopPlayback-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ],\n    \"Landroid/widget/VideoView;-suspend-()V\": [\n        \"android.permission.WAKE_LOCK\"\n    ]\n}"
  },
  {
    "path": "libs/androguard/core/apk/__init__.py",
    "content": "# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\n# Python core\n\nimport binascii\nimport hashlib\nimport io\nimport os\nimport re\nimport unicodedata\nimport zipfile\nfrom hashlib import md5, sha1, sha224, sha256, sha384, sha512\nfrom struct import unpack\nfrom typing import Any, Iterator, List, Tuple, Union\nfrom xml.dom.pulldom import SAX2DOM\nfrom zlib import crc32\n\nimport lxml.sax\nfrom apkInspector.headers import ZipEntry\n\n# Used for reading Certificates\n\n# included to resolve full module path for docs\nimport asn1crypto\n\nfrom asn1crypto import cms, keys, x509\nfrom asn1crypto.util import OrderedDict\nfrom cryptography.exceptions import InvalidSignature\nfrom cryptography.hazmat.backends import default_backend\nfrom cryptography.hazmat.primitives import hashes, serialization\nfrom cryptography.hazmat.primitives.asymmetric import dsa, ec, padding, rsa\nfrom loguru import logger\n\n# External dependencies\nfrom lxml.etree import Element\n\n# Androguard\nfrom androguard.core import androconf\nfrom androguard.core.axml import (\n    END_DOCUMENT,\n    END_TAG,\n    START_TAG,\n    TEXT,\n    ARSCParser,\n    ARSCResTableConfig,\n    AXMLParser,\n    AXMLPrinter,\n    format_value,\n)\nfrom androguard.util import get_certificate_name_string\n\nNS_ANDROID_URI = 'http://schemas.android.com/apk/res/android'\nNS_ANDROID = '{{{}}}'.format(NS_ANDROID_URI)  # Namespace as used by etree\n\n# Dictionary of the different protection levels mapped to their corresponding attribute names as described in\n# https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/pm/PermissionInfo.java\nprotection_flags_to_attributes = {\n    \"0x00000000\": \"normal\",\n    \"0x00000001\": \"dangerous\",\n    \"0x00000002\": \"signature\",\n    \"0x00000003\": \"signature or system\",\n    \"0x00000004\": \"internal\",\n    \"0x00000010\": \"privileged\",\n    \"0x00000020\": \"development\",\n    \"0x00000040\": \"appop\",\n    \"0x00000080\": \"pre23\",\n    \"0x00000100\": \"installer\",\n    \"0x00000200\": \"verifier\",\n    \"0x00000400\": \"preinstalled\",\n    \"0x00000800\": \"setup\",\n    \"0x00001000\": \"instant\",\n    \"0x00002000\": \"runtime only\",\n    \"0x00004000\": \"oem\",\n    \"0x00008000\": \"vendor privileged\",\n    \"0x00010000\": \"system text classifier\",\n    \"0x00020000\": \"wellbeing\",\n    \"0x00040000\": \"documenter\",\n    \"0x00080000\": \"configurator\",\n    \"0x00100000\": \"incident report approver\",\n    \"0x00200000\": \"app predictor\",\n    \"0x00400000\": \"module\",\n    \"0x00800000\": \"companion\",\n    \"0x01000000\": \"retail demo\",\n    \"0x02000000\": \"recents\",\n    \"0x04000000\": \"role\",\n    \"0x08000000\": \"known signer\",\n}\n\n\ndef parse_lxml_dom(tree):\n    handler = SAX2DOM()\n    lxml.sax.saxify(tree, handler)\n    return handler.document\n\n\nclass Error(Exception):\n    \"\"\"Base class for exceptions in this module.\"\"\"\n\n    pass\n\n\nclass FileNotPresent(Error):\n    pass\n\n\nclass BrokenAPKError(Error):\n    pass\n\n\ndef _dump_additional_attributes(additional_attributes):\n    \"\"\"try to parse additional attributes, but ends up to hexdump if the scheme is unknown\"\"\"\n\n    attributes_raw = io.BytesIO(additional_attributes)\n    attributes_hex = binascii.hexlify(additional_attributes)\n\n    if not len(additional_attributes):\n        return attributes_hex\n\n    (len_attribute,) = unpack('<I', attributes_raw.read(4))\n    if len_attribute != 8:\n        return attributes_hex\n\n    (attr_id,) = unpack('<I', attributes_raw.read(4))\n    if attr_id != APK._APK_SIG_ATTR_V2_STRIPPING_PROTECTION:\n        return attributes_hex\n\n    (scheme_id,) = unpack('<I', attributes_raw.read(4))\n\n    return \"stripping protection set, scheme %d\" % scheme_id\n\n\ndef _dump_digests_or_signatures(digests_or_sigs):\n\n    infos = \"\"\n    for i, dos in enumerate(digests_or_sigs):\n\n        infos += \"\\n\"\n        infos += \" [%d]\\n\" % i\n        infos += \"  - Signature Id : %s\\n\" % APK._APK_SIG_ALGO_IDS.get(\n            dos[0], hex(dos[0])\n        )\n        infos += \"  - Digest: %s\" % binascii.hexlify(dos[1])\n\n    return infos\n\n\nclass APKV2SignedData:\n    \"\"\"\n    This class holds all data associated with an APK V3 SigningBlock signed data.\n    source : [apksigning v2](https://source.android.com/security/apksigning/v2.html)\n    \"\"\"\n\n    def __init__(self) -> None:\n        self._bytes = None\n        self.digests = None\n        self.certificates = None\n        self.additional_attributes = None\n\n    def __str__(self):\n\n        certs_infos = \"\"\n\n        for i,cert in enumerate(self.certificates):\n            x509_cert = asn1crypto.x509.Certificate.load(cert)\n\n            certs_infos += \"\\n\"\n            certs_infos += \" [%d]\\n\" % i\n            certs_infos += \"  - Issuer: %s\\n\" % get_certificate_name_string(\n                x509_cert.issuer, short=True\n            )\n            certs_infos += \"  - Subject: %s\\n\" % get_certificate_name_string(\n                x509_cert.subject, short=True\n            )\n            certs_infos += \"  - Serial Number: %s\\n\" % hex(\n                x509_cert.serial_number\n            )\n            certs_infos += \"  - Hash Algorithm: %s\\n\" % x509_cert.hash_algo\n            certs_infos += (\n                \"  - Signature Algorithm: %s\\n\" % x509_cert.signature_algo\n            )\n            certs_infos += (\n                \"  - Valid not before: %s\\n\"\n                % x509_cert['tbs_certificate']['validity']['not_before'].native\n            )\n            certs_infos += (\n                \"  - Valid not after: %s\"\n                % x509_cert['tbs_certificate']['validity']['not_after'].native\n            )\n\n        return \"\\n\".join(\n            [\n                'additional_attributes : {}'.format(\n                    _dump_additional_attributes(self.additional_attributes)\n                ),\n                'digests : {}'.format(\n                    _dump_digests_or_signatures(self.digests)\n                ),\n                'certificates : {}'.format(certs_infos),\n            ]\n        )\n\n\nclass APKV3SignedData(APKV2SignedData):\n    \"\"\"\n    This class holds all data associated with an APK V3 SigningBlock signed data.\n    source : [apksigning v3](https://source.android.com/security/apksigning/v3.html)\n    \"\"\"\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.minSDK = None\n        self.maxSDK = None\n\n    def __str__(self):\n\n        base_str = super().__str__()\n\n        # maxSDK is set to a negative value if there is no upper bound on the sdk targeted\n        max_sdk_str = \"%d\" % self.maxSDK\n        if self.maxSDK >= 0x7FFFFFFF:\n            max_sdk_str = \"0x%x\" % self.maxSDK\n\n        return \"\\n\".join(\n            [\n                'signer minSDK : {:d}'.format(self.minSDK),\n                'signer maxSDK : {:s}'.format(max_sdk_str),\n                base_str,\n            ]\n        )\n\n\nclass APKV2Signer:\n    \"\"\"\n    This class holds all data associated with an APK V2 SigningBlock signer.\n    source : [apksigning v2](https://source.android.com/security/apksigning/v2.html)\n    \"\"\"\n\n    def __init__(self) -> None:\n        self._bytes = None\n        self.signed_data = None\n        self.signatures = None\n        self.public_key = None\n\n    def __str__(self):\n        return \"\\n\".join(\n            [\n                '{:s}'.format(str(self.signed_data)),\n                'signatures : {}'.format(\n                    _dump_digests_or_signatures(self.signatures)\n                ),\n                'public key : {}'.format(binascii.hexlify(self.public_key)),\n            ]\n        )\n\n\nclass APKV3Signer(APKV2Signer):\n    \"\"\"\n    This class holds all data associated with an APK V3 SigningBlock signer.\n    source : [apksigning v3](https://source.android.com/security/apksigning/v3.html)\n    \"\"\"\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.minSDK = None\n        self.maxSDK = None\n\n    def __str__(self):\n\n        base_str = super().__str__()\n\n        # maxSDK is set to a negative value if there is no upper bound on the sdk targeted\n        max_sdk_str = \"%d\" % self.maxSDK\n        if self.maxSDK >= 0x7FFFFFFF:\n            max_sdk_str = \"0x%x\" % self.maxSDK\n\n        return \"\\n\".join(\n            [\n                'signer minSDK : {:d}'.format(self.minSDK),\n                'signer maxSDK : {:s}'.format(max_sdk_str),\n                base_str,\n            ]\n        )\n\n\nclass APK:\n    # Constants in ZipFile\n    _PK_END_OF_CENTRAL_DIR = b\"\\x50\\x4b\\x05\\x06\"\n    _PK_CENTRAL_DIR = b\"\\x50\\x4b\\x01\\x02\"\n\n    # Constants in the APK Signature Block\n    _APK_SIG_MAGIC = b\"APK Sig Block 42\"\n    _APK_SIG_KEY_V2_SIGNATURE = 0x7109871A\n    _APK_SIG_KEY_V3_SIGNATURE = 0xF05368C0\n    _APK_SIG_ATTR_V2_STRIPPING_PROTECTION = 0xBEEFF00D\n\n    _APK_SIG_ALGO_IDS = {\n        0x0101: \"RSASSA-PSS with SHA2-256 digest, SHA2-256 MGF1, 32 bytes of salt, trailer: 0xbc\",\n        0x0102: \"RSASSA-PSS with SHA2-512 digest, SHA2-512 MGF1, 64 bytes of salt, trailer: 0xbc\",\n        0x0103: \"RSASSA-PKCS1-v1_5 with SHA2-256 digest.\",  # This is for build systems which require deterministic signatures.\n        0x0104: \"RSASSA-PKCS1-v1_5 with SHA2-512 digest.\",  # This is for build systems which require deterministic signatures.\n        0x0201: \"ECDSA with SHA2-256 digest\",\n        0x0202: \"ECDSA with SHA2-512 digest\",\n        0x0301: \"DSA with SHA2-256 digest\",\n    }\n\n    __no_magic = False\n\n    def __init__(\n        self,\n        filename: str,\n        raw: bool = False,\n        magic_file: Union[str, None] = None,\n        skip_analysis: bool = False,\n        testzip: bool = False,\n    ) -> None:\n        \"\"\"\n        This class can access to all elements in an APK file\n\n        Examples:\n\n            >>> APK(\"myfile.apk\")\n            >>> APK(read(\"myfile.apk\"), raw=True)\n\n        :param filename: specify the path of the file, or raw data\n        :param raw: specify if the filename is a path or raw data (optional)\n        :param magic_file: specify the magic file (not used anymore - legacy only)\n        :param skip_analysis: Skip the analysis, e.g. no manifest files are read. (default: `False`)\n        :param testzip: Test the APK for integrity, e.g. if the ZIP file is broken. Throw an exception on failure (default `False`)\n        \"\"\"\n        if magic_file:\n            logger.warning(\n                \"You set magic_file but this parameter is actually unused. You should remove it.\"\n            )\n\n        self.filename = filename\n\n        self.xml = {}\n        self.axml = {}\n        self.arsc = {}\n\n        self.package = \"\"\n        self.androidversion = {}\n        self.permissions = []\n        self.uses_permissions = []\n        self.declared_permissions = {}\n        self.valid_apk = False\n\n        self._is_signed_v2 = None\n        self._is_signed_v3 = None\n        self._v2_blocks = {}\n        self._v2_signing_data = None\n        self._v3_signing_data = None\n\n        self._files = {}\n        self.files_crc32 = {}\n\n        if raw is True:\n            self.__raw = filename\n            self._sha256 = hashlib.sha256(self.__raw).hexdigest()\n            # Set the filename to something sane\n            self.filename = \"raw_apk_sha256:{}\".format(self._sha256)\n            self.zip = ZipEntry.parse(io.BytesIO(self.__raw), True)\n        else:\n            self.zip = ZipEntry.parse(filename, False)\n            self.__raw = self.zip.zip.getvalue()\n\n        if testzip:\n            logger.info(\n                \"Testing zip file integrity, this might take a while...\"\n            )\n            # Test the zipfile for integrity before continuing.\n            # This process might be slow, as the whole file is read.\n            # Therefore it is possible to enable it as a separate feature.\n            #\n            # A short benchmark showed, that testing the zip takes about 10 times longer!\n            # e.g. normal zip loading (skip_analysis=True) takes about 0.01s, where\n            # testzip takes 0.1s!\n            test_zip = zipfile.ZipFile(io.BytesIO(self.__raw), mode=\"r\")\n            ret = test_zip.testzip()\n            if ret is not None:\n                # we could print the filename here, but there are zip which are so broken\n                # That the filename is either very very long or does not make any sense.\n                # Thus we do not do it, the user might find out by using other tools.\n                raise BrokenAPKError(\n                    \"The APK is probably broken: testzip returned an error.\"\n                )\n\n        if not skip_analysis:\n            self._apk_analysis()\n\n    @staticmethod\n    def _ns(name):\n        \"\"\"\n        return the name including the Android namespace URI\n        \"\"\"\n        return NS_ANDROID + name\n\n    def _apk_analysis(self):\n        \"\"\"\n        Run analysis on the APK file.\n\n        This method is usually called by __init__ except if skip_analysis is False.\n        It will then parse the `AndroidManifest.xml` and set all fields in the APK class which can be\n        extracted from the Manifest.\n        \"\"\"\n        i = \"AndroidManifest.xml\"\n        logger.info(\"Starting analysis on {}\".format(i))\n        try:\n            manifest_data = self.zip.read(i)\n        except KeyError:\n            logger.warning(\"Missing AndroidManifest.xml. Is this an APK file?\")\n        else:\n            ap = AXMLPrinter(manifest_data)\n\n            if not ap.is_valid():\n                logger.error(\n                    \"Error while parsing AndroidManifest.xml - is the file valid?\"\n                )\n                return\n\n            self.axml[i] = ap\n            self.xml[i] = self.axml[i].get_xml_obj()\n\n            if self.axml[i].is_packed():\n                logger.warning(\n                    \"XML Seems to be packed, operations on the AndroidManifest.xml might fail.\"\n                )\n\n            if self.xml[i] is not None:\n                if self.xml[i].tag != \"manifest\":\n                    logger.error(\n                        \"AndroidManifest.xml does not start with a <manifest> tag! Is this a valid APK?\"\n                    )\n                    return\n\n                self.package = self.get_attribute_value(\"manifest\", \"package\")\n                self.androidversion[\"Code\"] = self.get_attribute_value(\n                    \"manifest\", \"versionCode\"\n                )\n                self.androidversion[\"Name\"] = self.get_attribute_value(\n                    \"manifest\", \"versionName\"\n                )\n                permission = list(\n                    self.get_all_attribute_value(\"uses-permission\", \"name\")\n                )\n                self.permissions = list(set(self.permissions + permission))\n\n                for uses_permission in self.find_tags(\"uses-permission\"):\n                    self.uses_permissions.append(\n                        [\n                            self.get_value_from_tag(uses_permission, \"name\"),\n                            self._get_permission_maxsdk(uses_permission),\n                        ]\n                    )\n\n                # getting details of the declared permissions\n                for d_perm_item in self.find_tags('permission'):\n                    d_perm_name = self._get_res_string_value(\n                        str(self.get_value_from_tag(d_perm_item, \"name\"))\n                    )\n                    d_perm_label = self._get_res_string_value(\n                        str(self.get_value_from_tag(d_perm_item, \"label\"))\n                    )\n                    d_perm_description = self._get_res_string_value(\n                        str(\n                            self.get_value_from_tag(d_perm_item, \"description\")\n                        )\n                    )\n                    d_perm_permissionGroup = self._get_res_string_value(\n                        str(\n                            self.get_value_from_tag(\n                                d_perm_item, \"permissionGroup\"\n                            )\n                        )\n                    )\n                    d_perm_protectionLevel = self._get_res_string_value(\n                        str(\n                            self.get_value_from_tag(\n                                d_perm_item, \"protectionLevel\"\n                            )\n                        )\n                    )\n\n                    d_perm_details = {\n                        \"label\": d_perm_label,\n                        \"description\": d_perm_description,\n                        \"permissionGroup\": d_perm_permissionGroup,\n                        \"protectionLevel\": d_perm_protectionLevel,\n                    }\n                    self.declared_permissions[d_perm_name] = d_perm_details\n\n                self.valid_apk = True\n                logger.info(\"APK file was successfully validated!\")\n\n        self.permission_module = androconf.load_api_specific_resource_module(\n            \"aosp_permissions\", self.get_target_sdk_version()\n        )\n        self.permission_module_min_sdk = (\n            androconf.load_api_specific_resource_module(\n                \"aosp_permissions\", self.get_min_sdk_version()\n            )\n        )\n\n    def __getstate__(self):\n        \"\"\"\n        Function for pickling APK Objects.\n\n        We remove the zip from the Object, as it is not pickable\n        And it does not make any sense to pickle it anyways.\n\n        :returns: the picklable APK Object without zip.\n        \"\"\"\n        # Upon pickling, we need to remove the ZipFile\n        x = self.__dict__\n        x['axml'] = str(x['axml'])\n        x['xml'] = str(x['xml'])\n        del x['zip']\n\n        return x\n\n    def __setstate__(self, state):\n        \"\"\"\n        Load a pickled APK Object and restore the state\n\n        We load the zip file back by reading __raw from the Object.\n\n        :param state: pickled state\n        \"\"\"\n        self.__dict__ = state\n\n        self.zip = zipfile.ZipFile(io.BytesIO(self.get_raw()), mode=\"r\")\n\n    def _get_res_string_value(self, string):\n        if not string.startswith('@string/'):\n            return string\n        string_key = string[9:]\n\n        res_parser = self.get_android_resources()\n        if not res_parser:\n            return ''\n        string_value = ''\n        for package_name in res_parser.get_packages_names():\n            extracted_values = res_parser.get_string(package_name, string_key)\n            if extracted_values:\n                string_value = extracted_values[1]\n                break\n        return string_value\n\n    def _get_permission_maxsdk(self, item):\n        maxSdkVersion = None\n        try:\n            maxSdkVersion = int(self.get_value_from_tag(item, \"maxSdkVersion\"))\n        except ValueError:\n            logger.warning(\n                str(maxSdkVersion)\n                + ' is not a valid value for <uses-permission> maxSdkVersion'\n            )\n        except TypeError:\n            pass\n        return maxSdkVersion\n\n    def is_valid_APK(self) -> bool:\n        \"\"\"\n        Return `True` if the APK is valid, `False` otherwise.\n        An APK is seen as valid, if the `AndroidManifest.xml` could be successful parsed.\n        This does not mean that the APK has a valid signature nor that the APK\n        can be installed on an Android system.\n\n        :returns: `True` if the APK is valid, `False` otherwise.\n        \"\"\"\n        return self.valid_apk\n\n    def get_filename(self) -> str:\n        \"\"\"\n        Return the filename of the APK\n\n        :returns: filename\n        \"\"\"\n        return self.filename\n\n    def get_app_name(self, locale=None) -> str:\n        \"\"\"\n        Return the appname of the APK\n        This name is read from the `AndroidManifest.xml`\n        using the application `android:label`.\n        If no label exists, the `android:label` of the main activity is used.\n\n        If there is also no main activity label, an empty string is returned.\n\n        :returns: the appname of the APK\n        \"\"\"\n\n        app_name = self.get_attribute_value('application', 'label')\n        if app_name is None:\n            activities = self.get_main_activities()\n            main_activity_name = None\n            if len(activities) > 0:\n                main_activity_name = activities.pop()\n\n            # FIXME: would need to use _format_value inside get_attribute_value for each returned name!\n            # For example, as the activity name might be foobar.foo.bar but inside the activity it is only .bar\n            app_name = self.get_attribute_value(\n                'activity', 'label', name=main_activity_name\n            )\n\n        if app_name is None:\n            # No App name set\n            # TODO return packagename instead?\n            logger.warning(\n                \"It looks like that no app name is set for the main activity!\"\n            )\n            return \"\"\n\n        if app_name.startswith(\"@\"):\n            res_parser = self.get_android_resources()\n            if not res_parser:\n                # TODO: What should be the correct return value here?\n                return app_name\n\n            res_id, package = res_parser.parse_id(app_name)\n\n            # If the package name is the same as the APK package,\n            # we should be able to resolve the ID.\n            if package and package != self.get_package():\n                if package == 'android':\n                    # TODO: we can not resolve this, as we lack framework-res.apk\n                    # one exception would be when parsing framework-res.apk directly.\n                    logger.warning(\n                        \"Resource ID with android package name encountered! \"\n                        \"Will not resolve, framework-res.apk would be required.\"\n                    )\n                    return app_name\n                else:\n                    # TODO should look this up, might be in the resources\n                    logger.warning(\n                        \"Resource ID with Package name '{}' encountered! Will not resolve\".format(\n                            package\n                        )\n                    )\n                    return app_name\n\n            try:\n                config = (\n                    ARSCResTableConfig(None, locale=locale)\n                    if locale\n                    else ARSCResTableConfig.default_config()\n                )\n                app_name = res_parser.get_resolved_res_configs(res_id, config)[\n                    0\n                ][1]\n            except Exception as e:\n                logger.warning(\"Exception selecting app name: %s\" % e)\n        return app_name\n\n    def get_app_icon(self, max_dpi: int = 65536) -> Union[str, None]:\n        \"\"\"\n        Return the first icon file name, which density is not greater than max_dpi,\n        unless exact icon resolution is set in the manifest, in which case\n        return the exact file.\n\n        This information is read from the `AndroidManifest.xml`\n\n        From <https://developer.android.com/guide/practices/screens_support.html>\n        and <https://developer.android.com/ndk/reference/group___configuration.html>\n\n        * DEFAULT                             0dpi\n        * ldpi (low)                        120dpi\n        * mdpi (medium)                     160dpi\n        * TV                                213dpi\n        * hdpi (high)                       240dpi\n        * xhdpi (extra-high)                320dpi\n        * xxhdpi (extra-extra-high)         480dpi\n        * xxxhdpi (extra-extra-extra-high)  640dpi\n        * anydpi                          65534dpi (0xFFFE)\n        * nodpi                           65535dpi (0xFFFF)\n\n        There is a difference between nodpi and anydpi:\n        nodpi will be used if no other density is specified. Or the density does not match.\n        nodpi is the fallback for everything else. If there is a resource that matches the DPI,\n        this is used.\n        anydpi is also valid for all densities but in this case, anydpi will overrule all other files!\n        Therefore anydpi is usually used with vector graphics and with constraints on the API level.\n        For example adaptive icons are usually marked as anydpi.\n\n        When it comes now to selecting an icon, there is the following flow:\n\n        1. is there an anydpi icon?\n        2. is there an icon for the dpi of the device?\n        3. is there a nodpi icon?\n        4. (only on very old devices) is there a icon with dpi 0 (the default)\n\n        For more information read here: <https://stackoverflow.com/a/34370735/446140>\n\n        :returns: the first icon file name, or None if no resources or app icon exists.\n        \"\"\"\n        main_activity_name = self.get_main_activity()\n\n        app_icon = self.get_attribute_value(\n            'activity', 'icon', name=main_activity_name\n        )\n\n        if not app_icon:\n            app_icon = self.get_attribute_value('application', 'icon')\n\n        res_parser = self.get_android_resources()\n        if not res_parser:\n            # Can not do anything below this point to resolve...\n            return None\n\n        if not app_icon:\n            res_id = res_parser.get_res_id_by_key(\n                self.package, 'mipmap', 'ic_launcher'\n            )\n            if res_id:\n                app_icon = \"@%x\" % res_id\n\n        if not app_icon:\n            res_id = res_parser.get_res_id_by_key(\n                self.package, 'drawable', 'ic_launcher'\n            )\n            if res_id:\n                app_icon = \"@%x\" % res_id\n\n        if not app_icon:\n            # If the icon can not be found, return now\n            return None\n\n        if app_icon.startswith(\"@\"):\n            app_icon_id = app_icon[1:]\n            app_icon_id = app_icon_id.split(':')[-1]\n            res_id = int(app_icon_id, 16)\n            candidates = res_parser.get_resolved_res_configs(res_id)\n\n            app_icon = None\n            current_dpi = -1\n\n            try:\n                for config, file_name in candidates:\n                    dpi = config.get_density()\n                    if current_dpi < dpi <= max_dpi:\n                        app_icon = file_name\n                        current_dpi = dpi\n            except Exception as e:\n                logger.warning(\"Exception selecting app icon: %s\" % e)\n\n        return app_icon\n\n    def get_package(self) -> str:\n        \"\"\"\n        Return the name of the package\n\n        This information is read from the `AndroidManifest.xml`\n\n        :returns: the name of the package\n        \"\"\"\n        return self.package\n\n    def get_androidversion_code(self) -> str:\n        \"\"\"\n        Return the android version code\n\n        This information is read from the `AndroidManifest.xml`\n\n        :returns: the android version code\n        \"\"\"\n        return self.androidversion[\"Code\"]\n\n    def get_androidversion_name(self) -> str:\n        \"\"\"\n        Return the android version name\n\n        This information is read from the `AndroidManifest.xml`\n\n        :returns: the android version name\n        \"\"\"\n        return self.androidversion[\"Name\"]\n\n    def get_files(self) -> list[str]:\n        \"\"\"\n        Return the file names inside the APK.\n\n        :returns: a list of filename strings inside the APK\n        \"\"\"\n        return self.zip.namelist()\n\n    def _get_file_magic_name(self, buffer: bytes) -> str:\n        \"\"\"\n        Return the filetype guessed for a buffer\n        :param buffer: bytes\n\n        :returns: guessed filetype, or \"Unknown\" if not resolved\n        \"\"\"\n        default = \"Unknown\"\n\n        # Faster way, test once, return default.\n        if self.__no_magic:\n            return default\n\n        try:\n            # Magic is optional\n            import magic\n        except ImportError:\n            self.__no_magic = True\n            logger.warning(\"No Magic library was found on your system.\")\n            return default\n        except TypeError as e:\n            self.__no_magic = True\n            logger.warning(\n                \"It looks like you have the magic python package installed but not the magic library itself!\"\n            )\n            logger.warning(\"Error from magic library: %s\", e)\n            logger.warning(\n                \"Please follow the installation instructions at https://github.com/ahupp/python-magic/#installation\"\n            )\n            logger.warning(\n                \"You can also install the 'python-magic-bin' package on Windows and MacOS\"\n            )\n            return default\n\n        try:\n            # There are several implementations of magic,\n            # unfortunately all called magic\n            # We use this one: https://github.com/ahupp/python-magic/\n            # You can also use python-magic-bin on Windows or MacOS\n            getattr(magic, \"MagicException\")\n        except AttributeError:\n            self.__no_magic = True\n            logger.warning(\n                \"Not the correct Magic library was found on your \"\n                \"system. Please install python-magic or python-magic-bin!\"\n            )\n            return default\n\n        try:\n            # 1024 byte are usually enough to test the magic\n            ftype = magic.from_buffer(buffer[:1024])\n        except magic.MagicException as e:\n            logger.exception(\"Error getting the magic type: %s\", e)\n            return default\n\n        if not ftype:\n            return default\n        else:\n            return self._patch_magic(buffer, ftype)\n\n    @property\n    def files(self) -> dict[str, str]:\n        \"\"\"\n        Returns a dictionary of filenames and detected magic type\n\n        :returns: dictionary of files and their mime type\n        \"\"\"\n        return self.get_files_types()\n\n    def get_files_types(self) -> dict[str, str]:\n        \"\"\"\n        Return the files inside the APK with their associated types (by using [python-magic](https://pypi.org/project/python-magic/))\n\n        At the same time, the CRC32 are calculated for the files.\n\n        :returns: the files inside the APK with their associated types\n        \"\"\"\n        if self._files == {}:\n            # Generate File Types / CRC List\n            for i in self.get_files():\n                buffer = self._get_crc32(i)\n                self._files[i] = self._get_file_magic_name(buffer)\n\n        return self._files\n\n    def _patch_magic(self, buffer, orig):\n        \"\"\"\n        Overwrite some probably wrong detections by mime libraries\n\n        :param buffer: bytes of the file to detect\n        :param orig: guess by mime libary\n        :returns: corrected guess\n        \"\"\"\n        if (\n            (\"Zip\" in orig)\n            or ('(JAR)' in orig)\n            and androconf.is_android_raw(buffer) == 'APK'\n        ):\n            return \"Android application package file\"\n\n        return orig\n\n    def _get_crc32(self, filename):\n        \"\"\"\n        Calculates and compares the CRC32 and returns the raw buffer.\n\n        The CRC32 is added to [files_crc32][androguard.core.apk.APK.files_crc32] dictionary, if not present.\n\n        :param filename: filename inside the zipfile\n        :rtype: bytes\n        \"\"\"\n        buffer = self.zip.read(filename)\n        if filename not in self.files_crc32:\n            self.files_crc32[filename] = crc32(buffer)\n            if (\n                self.files_crc32[filename]\n                != self.zip.infolist()[filename].crc32_of_uncompressed_data\n            ):\n                logger.error(\n                    \"File '{}' has different CRC32 after unpacking! \"\n                    \"Declared: {:08x}, Calculated: {:08x}\".format(\n                        filename,\n                        self.zip.infolist()[\n                            filename\n                        ].crc32_of_uncompressed_data,\n                        self.files_crc32[filename],\n                    )\n                )\n        return buffer\n\n    def get_files_crc32(self) -> dict[str, int]:\n        \"\"\"\n        Calculates and returns a dictionary of filenames and CRC32\n\n        :returns: dict of filename: CRC32\n        \"\"\"\n        if self.files_crc32 == {}:\n            for i in self.get_files():\n                self._get_crc32(i)\n\n        return self.files_crc32\n\n    def get_files_information(self) -> Iterator[tuple[str, str, int]]:\n        \"\"\"\n        Return the files inside the APK with their associated types and crc32\n\n        :returns: the files inside the APK with their associated types and crc32\n        \"\"\"\n        for k in self.get_files():\n            yield k, self.get_files_types()[k], self.get_files_crc32()[k]\n\n    def get_raw(self) -> bytes:\n        \"\"\"\n        Return raw bytes of the APK\n\n        :returns: bytes of the APK\n        \"\"\"\n\n        if self.__raw:\n            return self.__raw\n        else:\n            with open(self.filename, 'rb') as f:\n                self.__raw = bytearray(f.read())\n            return self.__raw\n\n    def get_file(self, filename: str) -> bytes:\n        \"\"\"\n        Return the raw data of the specified filename\n        inside the APK\n\n        :param filename: the filename to get\n        :raises FileNotPresent: if filename not found inside the apk\n        :returns: bytes of the specified filename\n        \"\"\"\n        try:\n            return self.zip.read(filename)\n        except KeyError:\n            raise FileNotPresent(filename)\n\n    def get_dex(self) -> bytes:\n        \"\"\"\n        Return the raw data of the classes dex file\n\n        This will give you the data of the file called `classes.dex`\n        inside the APK. If the APK has multiple DEX files, you need to use [get_all_dex][androguard.core.apk.APK.get_all_dex].\n\n        :raises FileNotPresent: if classes.dex is not found\n        :returns: the raw data of the classes dex file\n        \"\"\"\n        try:\n            return self.get_file(\"classes.dex\")\n        except FileNotPresent:\n            # TODO is this a good idea to return an empty string?\n            return b\"\"\n\n    def get_dex_names(self) -> list[str]:\n        \"\"\"\n        Return the names of all DEX files found in the APK.\n        This method only accounts for \"offical\" dex files, i.e. all files\n        in the root directory of the APK named `classes.dex` or `classes[0-9]+.dex`\n\n        :returns: the names of all DEX files found in the APK\n        \"\"\"\n        dexre = re.compile(r\"^classes(\\d*).dex$\")\n        return filter(lambda x: dexre.match(x), self.get_files())\n\n    def get_all_dex(self) -> Iterator[bytes]:\n        \"\"\"\n        Return the raw bytes data of all classes dex files\n\n        :returns: the raw bytes data of all classes dex files\n        \"\"\"\n        for dex_name in self.get_dex_names():\n            yield self.get_file(dex_name)\n\n    def is_multidex(self) -> bool:\n        \"\"\"\n        Test if the APK has multiple DEX files\n\n        :returns: True if multiple dex found, otherwise False\n        \"\"\"\n        dexre = re.compile(r\"^classes(\\d+)?.dex$\")\n        return (\n            len(\n                [\n                    instance\n                    for instance in self.get_files()\n                    if dexre.search(instance)\n                ]\n            )\n            > 1\n        )\n\n    def _format_value(self, value):\n        \"\"\"\n        Format a value with packagename, if not already set.\n        For example, the name `'.foobar'` will be transformed into `'package.name.foobar'`.\n\n        Names which do not contain any dots are assumed to be packagename-less as well:\n        `foobar` will also transform into `package.name.foobar`.\n\n        :param value: string value to format with the packaname\n        :returns: the formatted package name\n        \"\"\"\n        if value and self.package:\n            v_dot = value.find(\".\")\n            if v_dot == 0:\n                # Dot at the start\n                value = self.package + value\n            elif v_dot == -1:\n                # Not a single dot\n                value = self.package + \".\" + value\n        return value\n\n    def get_all_attribute_value(\n        self,\n        tag_name: str,\n        attribute: str,\n        format_value: bool = True,\n        **attribute_filter,\n    ) -> Iterator[str]:\n        \"\"\"\n        Yields all the attribute values in xml files which match with the tag name and the specific attribute\n\n        :param str tag_name: specify the tag name\n        :param str attribute: specify the attribute\n        :param bool format_value: specify if the value needs to be formatted with packagename\n\n        :returns: the attribute values\n        \"\"\"\n        tags = self.find_tags(tag_name, **attribute_filter)\n        for tag in tags:\n            value = tag.get(self._ns(attribute)) or tag.get(attribute)\n            if value is not None:\n                if format_value:\n                    yield self._format_value(value)\n                else:\n                    yield value\n\n    def get_attribute_value(\n        self,\n        tag_name: str,\n        attribute: str,\n        format_value: bool = False,\n        **attribute_filter,\n    ) -> str:\n        \"\"\"\n        Return the attribute value in xml files which matches the tag name and the specific attribute\n\n        :param str tag_name: specify the tag name\n        :param str attribute: specify the attribute\n        :param bool format_value: specify if the value needs to be formatted with packagename\n\n        :returns: the attribute value\n        \"\"\"\n\n        for value in self.get_all_attribute_value(\n            tag_name, attribute, format_value, **attribute_filter\n        ):\n            if value is not None:\n                return value\n\n    def get_value_from_tag(\n        self, tag: Element, attribute: str\n    ) -> Union[str, None]:\n        \"\"\"\n        Return the value of the android prefixed attribute in a specific tag.\n\n        This function will always try to get the attribute with a `android:` prefix first,\n        and will try to return the attribute without the prefix, if the attribute could not be found.\n        This is useful for some broken `AndroidManifest.xml`, where no android namespace is set,\n        but could also indicate malicious activity (i.e. wrongly repackaged files).\n        A warning is printed if the attribute is found without a namespace prefix.\n\n        If you require to get the exact result you need to query the tag directly:\n\n        Example:\n\n            >>> from lxml.etree import Element\n            >>> tag = Element('bar', nsmap={'android': 'http://schemas.android.com/apk/res/android'})\n            >>> tag.set('{http://schemas.android.com/apk/res/android}foobar', 'barfoo')\n            >>> tag.set('name', 'baz')\n            # Assume that `a` is some APK object\n            >>> a.get_value_from_tag(tag, 'name')\n            'baz'\n            >>> tag.get('name')\n            'baz'\n            >>> tag.get('foobar')\n            None\n            >>> a.get_value_from_tag(tag, 'foobar')\n            'barfoo'\n\n        :param lxml.etree.Element tag: specify the tag element\n        :param str attribute: specify the attribute name\n        :returns: the attribute's value, or None if the attribute is not present\n        \"\"\"\n\n        # TODO: figure out if both android:name and name tag exist which one to give preference:\n        # currently we give preference for the namespace one and fallback to the un-namespaced\n        value = tag.get(self._ns(attribute))\n        if value is None:\n            value = tag.get(attribute)\n\n            if value:\n                # If value is still None, the attribute could not be found, thus is not present\n                logger.warning(\n                    \"Failed to get the attribute '{}' on tag '{}' with namespace. \"\n                    \"But found the same attribute without namespace!\".format(\n                        attribute, tag.tag\n                    )\n                )\n        return value\n\n    def find_tags(self, tag_name: str, **attribute_filter) -> list[str]:\n        \"\"\"\n        Return a list of all the matched tags in all available xml\n\n        :param tag_name: specify the tag name\n\n        :returns: the matched tags\n        \"\"\"\n        all_tags = [\n            self.find_tags_from_xml(i, tag_name, **attribute_filter)\n            for i in self.xml\n        ]\n        return [tag for tag_list in all_tags for tag in tag_list]\n\n    def find_tags_from_xml(\n        self, xml_name: str, tag_name: str, **attribute_filter\n    ) -> list[str]:\n        \"\"\"\n        Return a list of all the matched tags in a specific xml\n        \n        :param str xml_name: specify from which xml to pick the tag from\n        :param str tag_name: specify the tag name\n\n        :returns: the matched tags\n        \"\"\"\n        xml = self.xml[xml_name]\n        if xml is None:\n            return []\n        if xml.tag == tag_name:\n            if self.is_tag_matched(xml.tag, **attribute_filter):\n                return [xml]\n            return []\n        tags = set()\n        tags.update(xml.findall(\".//\" + tag_name))\n\n        # https://github.com/androguard/androguard/pull/1053\n        # permission declared using tag <android:uses-permission...\n        tags.update(xml.findall(\".//\" + NS_ANDROID + tag_name))\n        return [\n            tag for tag in tags if self.is_tag_matched(tag, **attribute_filter)\n        ]\n\n    def is_tag_matched(self, tag: lxml.etree.Element, **attribute_filter) -> bool:\n        r\"\"\"\n        Return `True` if the attributes matches in attribute filter.\n\n        An attribute filter is a dictionary containing: {attribute_name: value}.\n        This function will return `True` if and only if all attributes have the same value.\n        This function allows to set the dictionary via kwargs, thus you can filter like this:\n\n        Example:\n\n            >>> a.is_tag_matched(tag, name=\"foobar\", other=\"barfoo\")\n\n        This function uses a fallback for attribute searching. It will by default use\n        the namespace variant but fall back to the non-namespace variant.\n        Thus specifiying `{\"name\": \"foobar\"}` will match on `<bla name=\"foobar\" \\>`\n        as well as on `<bla android:name=\"foobar\" \\>`.\n\n        :param tag: specify the tag element\n        :param attribute_filter: specify the attribute filter as dictionary\n\n        :returns: `True` if the attributes matches in attribute filter, else `False`\n        \"\"\"\n        if len(attribute_filter) <= 0:\n            return True\n        for attr, value in attribute_filter.items():\n            _value = self.get_value_from_tag(tag, attr)\n            if _value != value:\n                return False\n        return True\n\n    def get_main_activities(self) -> set[str]:\n        \"\"\"\n        Return names of the main activities\n\n        These values are read from the `AndroidManifest.xml`\n\n        :returns: names of the main activities\n        \"\"\"\n        x = set()\n        y = set()\n\n        for i in self.xml:\n            if self.xml[i] is None:\n                continue\n            activities_and_aliases = self.xml[i].findall(\n                \".//activity\"\n            ) + self.xml[i].findall(\".//activity-alias\")\n\n            for item in activities_and_aliases:\n                # Some applications have more than one MAIN activity.\n                # For example: paid and free content\n                activityEnabled = item.get(self._ns(\"enabled\"))\n                if activityEnabled == \"false\":\n                    continue\n\n                for sitem in item.findall(\".//action\"):\n                    val = sitem.get(self._ns(\"name\"))\n                    if val == \"android.intent.action.MAIN\":\n                        activity = item.get(self._ns(\"name\")) or item.get(\"name\")\n                        if activity is not None:\n                            x.add(activity)\n                        else:\n                            logger.warning('Main activity without name')\n\n                for sitem in item.findall(\".//category\"):\n                    val = sitem.get(self._ns(\"name\"))\n                    if val == \"android.intent.category.LAUNCHER\":\n                        activity = item.get(self._ns(\"name\")) or item.get(\"name\")\n                        if activity is not None:\n                            y.add(activity)\n                        else:\n                            logger.warning('Launcher activity without name')\n\n        return x.intersection(y)\n\n    def get_main_activity(self) -> Union[str, None]:\n        \"\"\"\n        Return the name of the main activity\n\n        This value is read from the `AndroidManifest.xml`\n\n        :returns: the name of the main activity\n        \"\"\"\n        activities = self.get_main_activities()\n        if len(activities) == 1:\n            return self._format_value(activities.pop())\n        elif len(activities) > 1:\n            main_activities = {self._format_value(ma) for ma in activities}\n            # sorted is necessary\n            # 9fc7d3e8225f6b377f9181a92c551814317b77e1aa0df4c6d508d24b18f0f633\n            good_main_activities = sorted(\n                main_activities.intersection(self.get_activities())\n            )\n            if good_main_activities:\n                return good_main_activities[0]\n            return sorted(main_activities)[0]\n        return None\n\n    def get_activities(self) -> list[str]:\n        \"\"\"\n        Return the `android:name` attribute of all activities\n\n        :returns: the list of `android:name` attribute of all activities\n        \"\"\"\n        return list(self.get_all_attribute_value(\"activity\", \"name\"))\n\n    def get_activity_aliases(self) -> list[dict[str, str]]:\n        \"\"\"\n        Return the `android:name` and `android:targetActivity` attribute of all activity aliases.\n\n        :returns: the list of `android:name` and `android:targetActivity` attribute of all activitiy aliases\n        \"\"\"\n        ali = []\n        for alias in self.find_tags('activity-alias'):\n            activity_alias = {}\n            for attribute in ['name', 'targetActivity']:\n                value = alias.get(attribute) or alias.get(self._ns(attribute))\n                if not value:\n                    continue\n                activity_alias[attribute] = self._format_value(value)\n            if activity_alias:\n                ali.append(activity_alias)\n        return ali\n\n    def get_services(self) -> list[str]:\n        \"\"\"\n        Return the `android:name` attribute of all services\n\n        :returns: the list of the `android:name` attribute of all services\n        \"\"\"\n        return list(self.get_all_attribute_value(\"service\", \"name\"))\n\n    def get_receivers(self) -> list[str]:\n        \"\"\"\n        Return the `android:name` attribute of all receivers\n\n        :returns: the list of the `android:name` attribute of all receivers\n        \"\"\"\n        return list(self.get_all_attribute_value(\"receiver\", \"name\"))\n\n    def get_providers(self) -> list[str]:\n        \"\"\"\n        Return the `android:name` attribute of all providers\n\n        :returns: the list of the `android:name` attribute of all providers\n        \"\"\"\n        return list(self.get_all_attribute_value(\"provider\", \"name\"))\n\n    def get_res_value(self, name: str) -> str:\n        \"\"\"\n        Return the literal value with a resource id\n\n        :returns: the literal value with a resource id\n        \"\"\"\n\n        res_parser = self.get_android_resources()\n        if not res_parser:\n            return name\n\n        res_id = res_parser.parse_id(name)[0]\n        try:\n            value = res_parser.get_resolved_res_configs(\n                res_id, ARSCResTableConfig.default_config()\n            )[0][1]\n        except Exception as e:\n            logger.warning(\"Exception get resolved resource id: %s\" % e)\n            return name\n\n        return value\n\n    def get_intent_filters(\n        self, itemtype: str, name: str\n    ) -> dict[str, list[str]]:\n        \"\"\"\n        Find intent filters for a given item and name.\n\n        Intent filter are attached to activities, services or receivers.\n        You can search for the intent filters of such items and get a dictionary of all\n        attached actions and intent categories.\n\n        :param itemtype: the type of parent item to look for, e.g. `activity`,  `service` or `receiver`\n        :param name: the `android:name` of the parent item, e.g. activity name\n        :returns: a dictionary with the keys `action` and `category` containing the `android:name` of those items\n        \"\"\"\n        attributes = {\n            \"action\": [\"name\"],\n            \"category\": [\"name\"],\n            \"data\": [\n                'scheme',\n                'host',\n                'port',\n                'path',\n                'pathPattern',\n                'pathPrefix',\n                'mimeType',\n            ],\n        }\n\n        d = {}\n        for element in attributes.keys():\n            d[element] = []\n\n        for i in self.xml:\n            # TODO: this can probably be solved using a single xpath\n            for item in self.xml[i].findall(\".//\" + itemtype):\n                if self._format_value(item.get(self._ns(\"name\"))) == name:\n                    for sitem in item.findall(\".//intent-filter\"):\n                        for element in d.keys():\n                            for ssitem in sitem.findall(element):\n                                if element == 'data':  # multiple attributes\n                                    values = {}\n                                    for attribute in attributes[element]:\n                                        value = ssitem.get(self._ns(attribute))\n                                        if value:\n                                            if value.startswith('@'):\n                                                value = self.get_res_value(\n                                                    value\n                                                )\n                                            values[attribute] = value\n\n                                    if values:\n                                        d[element].append(values)\n                                else:\n                                    for attribute in attributes[element]:\n                                        value = ssitem.get(self._ns(attribute))\n                                        if value.startswith('@'):\n                                            value = self.get_res_value(value)\n\n                                        if value not in d[element]:\n                                            d[element].append(value)\n\n        for element in list(d.keys()):\n            if not d[element]:\n                del d[element]\n\n        return d\n\n    def get_permissions(self) -> list[str]:\n        \"\"\"\n        Return permissions names declared in the `AndroidManifest.xml`.\n\n        It is possible that permissions are returned multiple times,\n        as this function does not filter the permissions, i.e. it shows you\n        exactly what was defined in the `AndroidManifest.xml`.\n\n        Implied permissions, which are granted automatically, are not returned\n        here. Use [get_uses_implied_permission_list][androguard.core.apk.APK.get_uses_implied_permission_list] if you need a list\n        of implied permissions.\n\n        :returns: A list of permissions as strings\n        \"\"\"\n        return self.permissions\n\n    def get_uses_implied_permission_list(self) -> list[str]:\n        \"\"\"\n        Return all permissions implied by the target SDK or other permissions.\n        \n        :returns: list of all permissions implied by the target SDK or other permissions as strings\n        \"\"\"\n        target_sdk_version = self.get_effective_target_sdk_version()\n\n        READ_CALL_LOG = 'android.permission.READ_CALL_LOG'\n        READ_CONTACTS = 'android.permission.READ_CONTACTS'\n        READ_EXTERNAL_STORAGE = 'android.permission.READ_EXTERNAL_STORAGE'\n        READ_PHONE_STATE = 'android.permission.READ_PHONE_STATE'\n        WRITE_CALL_LOG = 'android.permission.WRITE_CALL_LOG'\n        WRITE_CONTACTS = 'android.permission.WRITE_CONTACTS'\n        WRITE_EXTERNAL_STORAGE = 'android.permission.WRITE_EXTERNAL_STORAGE'\n\n        implied = []\n\n        implied_WRITE_EXTERNAL_STORAGE = False\n        if target_sdk_version < 4:\n            if WRITE_EXTERNAL_STORAGE not in self.permissions:\n                implied.append([WRITE_EXTERNAL_STORAGE, None])\n                implied_WRITE_EXTERNAL_STORAGE = True\n            if READ_PHONE_STATE not in self.permissions:\n                implied.append([READ_PHONE_STATE, None])\n\n        if (\n            WRITE_EXTERNAL_STORAGE in self.permissions\n            or implied_WRITE_EXTERNAL_STORAGE\n        ) and READ_EXTERNAL_STORAGE not in self.permissions:\n            maxSdkVersion = None\n            for name, version in self.uses_permissions:\n                if name == WRITE_EXTERNAL_STORAGE:\n                    maxSdkVersion = version\n                    break\n            implied.append([READ_EXTERNAL_STORAGE, maxSdkVersion])\n\n        if target_sdk_version < 16:\n            if (\n                READ_CONTACTS in self.permissions\n                and READ_CALL_LOG not in self.permissions\n            ):\n                implied.append([READ_CALL_LOG, None])\n            if (\n                WRITE_CONTACTS in self.permissions\n                and WRITE_CALL_LOG not in self.permissions\n            ):\n                implied.append([WRITE_CALL_LOG, None])\n\n        return implied\n\n    def _update_permission_protection_level(\n        self, protection_level, sdk_version\n    ):\n        if not sdk_version or int(sdk_version) <= 15:\n            return protection_level.replace('Or', '|').lower()\n        return protection_level\n\n    def _fill_deprecated_permissions(self, permissions):\n        min_sdk = self.get_min_sdk_version()\n        target_sdk = self.get_target_sdk_version()\n        filled_permissions = permissions.copy()\n        for permission in filled_permissions:\n            protection_level, label, description = filled_permissions[\n                permission\n            ]\n            if (\n                not label or not description\n            ) and permission in self.permission_module_min_sdk:\n                x = self.permission_module_min_sdk[permission]\n                protection_level = self._update_permission_protection_level(\n                    x['protectionLevel'], min_sdk\n                )\n                filled_permissions[permission] = [\n                    protection_level,\n                    x['label'],\n                    x['description'],\n                ]\n            else:\n                filled_permissions[permission] = [\n                    self._update_permission_protection_level(\n                        protection_level, target_sdk\n                    ),\n                    label,\n                    description,\n                ]\n        return filled_permissions\n\n    def get_details_permissions(self) -> dict[str, list[str]]:\n        \"\"\"\n        Return permissions with details.\n\n        This can only return details about the permission, if the permission is\n        defined in the AOSP.\n\n        :returns: permissions with details: dict of `{permission: [protectionLevel, label, description]}`\n        \"\"\"\n        l = {}\n\n        for i in self.permissions:\n            if i in self.permission_module:\n                x = self.permission_module[i]\n                l[i] = [x[\"protectionLevel\"], x[\"label\"], x[\"description\"]]\n            elif i in self.declared_permissions:\n                protectionLevel_hex = self.declared_permissions[i][\n                    \"protectionLevel\"\n                ]\n                protectionLevel = protection_flags_to_attributes[\n                    protectionLevel_hex\n                ]\n                l[i] = [\n                    protectionLevel,\n                    \"Unknown permission from android reference\",\n                    \"Unknown permission from android reference\",\n                ]\n            else:\n                # Is there a valid case not belonging to the above two?\n                logger.info(f\"Unknown permission {i}\")\n        return self._fill_deprecated_permissions(l)\n\n    def get_requested_aosp_permissions(self) -> list[str]:\n        \"\"\"\n        Returns requested permissions declared within AOSP project.\n\n        This includes several other permissions as well, which are in the platform apps.\n\n        :returns: requested permissions\n        \"\"\"\n        aosp_permissions = []\n        all_permissions = self.get_permissions()\n        for perm in all_permissions:\n            if perm in list(self.permission_module.keys()):\n                aosp_permissions.append(perm)\n        return aosp_permissions\n\n    def get_requested_aosp_permissions_details(self) -> dict[str, list[str]]:\n        \"\"\"\n        Returns requested aosp permissions with details.\n\n        :returns: requested aosp permissions\n        \"\"\"\n        l = {}\n        for i in self.permissions:\n            try:\n                l[i] = self.permission_module[i]\n            except KeyError:\n                # if we have not found permission do nothing\n                continue\n        return l\n\n    def get_requested_third_party_permissions(self) -> list[str]:\n        \"\"\"\n        Returns list of requested permissions not declared within AOSP project.\n\n        :returns: requested permissions\n        \"\"\"\n        third_party_permissions = []\n        all_permissions = self.get_permissions()\n        for perm in all_permissions:\n            if perm not in list(self.permission_module.keys()):\n                third_party_permissions.append(perm)\n        return third_party_permissions\n\n    def get_declared_permissions(self) -> list[str]:\n        \"\"\"\n        Returns list of the declared permissions.\n\n        :returns: list of declared permissions\n        \"\"\"\n        return list(self.declared_permissions.keys())\n\n    def get_declared_permissions_details(self) -> dict[str, list[str]]:\n        \"\"\"\n        Returns declared permissions with the details.\n\n        :returns: declared permissions\n        \"\"\"\n        return self.declared_permissions\n\n    def get_max_sdk_version(self) -> str:\n        \"\"\"\n        Return the `android:maxSdkVersion` attribute\n\n        :returns: the `android:maxSdkVersion` attribute\n        \"\"\"\n        return self.get_attribute_value(\"uses-sdk\", \"maxSdkVersion\")\n\n    def get_min_sdk_version(self) -> str:\n        \"\"\"\n          Return the `android:minSdkVersion` attribute\n\n          :returns: the `android:minSdkVersion` attribute\n        \"\"\"\n        return self.get_attribute_value(\"uses-sdk\", \"minSdkVersion\")\n\n    def get_target_sdk_version(self) -> str:\n        \"\"\"\n        Return the `android:targetSdkVersion` attribute\n\n        :returns: the `android:targetSdkVersion` attribute\n        \"\"\"\n        return self.get_attribute_value(\"uses-sdk\", \"targetSdkVersion\")\n\n    def get_effective_target_sdk_version(self) -> int:\n        \"\"\"\n        Return the effective `targetSdkVersion`, always returns int > 0.\n\n        If the `targetSdkVersion` is not set, it defaults to 1.  This is\n        set based on defaults as defined in:\n        <https://developer.android.com/guide/topics/manifest/uses-sdk-element.html>\n\n        :returns: the effective `targetSdkVersion`\n        \"\"\"\n        target_sdk_version = self.get_target_sdk_version()\n        if not target_sdk_version:\n            target_sdk_version = self.get_min_sdk_version()\n        try:\n            return int(target_sdk_version)\n        except (ValueError, TypeError):\n            return 1\n\n    def get_libraries(self) -> list[str]:\n        \"\"\"\n        Return the `android:name` attributes for libraries\n\n        :returns: the `android:name` attributes\n        \"\"\"\n        return list(self.get_all_attribute_value(\"uses-library\", \"name\"))\n\n    def get_features(self) -> list[str]:\n        \"\"\"\n        Return a list of all `android:names` found for the tag `uses-feature`\n        in the `AndroidManifest.xml`\n\n        :returns: the `android:names` found\n        \"\"\"\n        return list(self.get_all_attribute_value(\"uses-feature\", \"name\"))\n\n    def is_wearable(self) -> bool:\n        \"\"\"\n        Checks if this application is build for wearables by\n        checking if it uses the feature 'android.hardware.type.watch'\n        See: https://developer.android.com/training/wearables/apps/creating.html for more information.\n\n        Not every app is setting this feature (not even the example Google provides),\n        so it might be wise to not 100% rely on this feature.\n\n        :returns: `True` if wearable, `False` otherwise\n        \"\"\"\n        return 'android.hardware.type.watch' in self.get_features()\n\n    def is_leanback(self) -> bool:\n        \"\"\"\n        Checks if this application is build for TV (Leanback support)\n        by checkin if it uses the feature 'android.software.leanback'\n\n        :returns: `True` if leanback feature is used, `False` otherwise\n        \"\"\"\n        return 'android.software.leanback' in self.get_features()\n\n    def is_androidtv(self) -> bool:\n        \"\"\"\n        Checks if this application does not require a touchscreen,\n        as this is the rule to get into the TV section of the Play Store\n        See: https://developer.android.com/training/tv/start/start.html for more information.\n\n        :returns: `True` if 'android.hardware.touchscreen' is not required, `False` otherwise\n        \"\"\"\n        return (\n            self.get_attribute_value(\n                'uses-feature',\n                'name',\n                required=\"false\",\n                name=\"android.hardware.touchscreen\",\n            )\n            == \"android.hardware.touchscreen\"\n        )\n\n    def get_certificate_der(\n        self, filename: str, max_sdk_version: int = None\n    ) -> Union[bytes, None]:\n        \"\"\"\n        Return the DER coded X.509 certificate from the signature file.\n        If minSdkVersion is prior to Android N only the first SignerInfo is used.\n        If signed attributes are present, they are taken into account\n        Note that unsupported critical extensions and key usage are not verified!\n        [V1SchemeVerifier.java](https://android.googlesource.com/platform/tools/apksig/+/refs/tags/platform-tools-34.0.5/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#668)\n\n        :param filename: Signature filename in APK\n        :param max_sdk_version: An optional integer parameter for the max sdk version\n        :returns: DER coded X.509 certificate as binary or None\n        \"\"\"\n\n        # Get the signature\n        pkcs7message = self.get_file(filename)\n        # Get the .SF\n        sf_filename = os.path.splitext(filename)[0] + '.SF'\n        sf_object = self.get_file(sf_filename)\n        # Load the signature\n        signed_data = cms.ContentInfo.load(pkcs7message)\n        # Locate the SignerInfo structure\n        signer_infos = signed_data['content']['signer_infos']\n        if not signer_infos:\n            logger.error(\n                'No signer information found in the PKCS7 object. The APK may not be properly signed.'\n            )\n            return None\n\n        # Prior to Android N, Android attempts to verify only the first SignerInfo. From N onwards, Android attempts\n        # to verify all SignerInfos and then picks the first verified SignerInfo.\n        min_sdk_version = self.get_min_sdk_version()\n        if (\n            min_sdk_version is None or int(min_sdk_version) < 24\n        ):  # AndroidSdkVersion.N\n            logger.info(\n                f\"minSdkVersion: {min_sdk_version} is less than 24. Getting the first signerInfo only!\"\n            )\n            unverified_signer_infos_to_try = [signer_infos[0]]\n        else:\n            unverified_signer_infos_to_try = signer_infos\n\n        # Extract certificates from the PKCS7 object\n        certificates = signed_data['content']['certificates']\n        return_certificate = None\n        list_certificates_verified = []\n        for signer_info in unverified_signer_infos_to_try:\n            try:\n                matching_certificate_verified = (\n                    self.verify_signer_info_against_sig_file(\n                        signed_data,\n                        certificates,\n                        signer_info,\n                        sf_object,\n                        max_sdk_version,\n                    )\n                )\n            except (ValueError, TypeError, OSError, InvalidSignature) as e:\n                logger.error(\n                    f\"The following exception was raised while verifying the certificate: {e}\"\n                )\n                return (\n                    None  # the validation stops due to the exception raised!\n                )\n            if matching_certificate_verified is not None:\n                list_certificates_verified.append(\n                    matching_certificate_verified\n                )\n        if not list_certificates_verified:\n            logger.error(\n                f\"minSdkVersion: {min_sdk_version}, # of SignerInfos: {len(unverified_signer_infos_to_try)}. None Verified!\"\n            )\n        else:\n            return_certificate = list_certificates_verified[0]\n        return return_certificate\n\n    def verify_signer_info_against_sig_file(\n        self,\n        signed_data: asn1crypto.cms.ContentInfo,\n        certificates: asn1crypto.cms.CertificateSet,\n        signer_info: asn1crypto.cms.SignerInfo,\n        sf_object: str,\n        max_sdk_version: Union[int, None],\n    ) -> Union[bytes, None]:\n        matching_certificate = self.find_certificate(certificates, signer_info)\n        matching_certificate_verified = None\n        digest_algorithm, crypto_hash_algorithm = self.get_hash_algorithm(\n            signer_info\n        )\n        if matching_certificate is None:\n            raise ValueError(\n                \"Signing certificate referenced in SignerInfo not found in SignedData\"\n            )\n        else:\n            if signer_info['signed_attrs'].native:\n                logger.info(\"Signed Attributes detected!\")\n                signed_attrs = signer_info['signed_attrs']\n                signed_attrs_dict = OrderedDict()\n                for attr in signed_attrs:\n                    if attr['type'].dotted in signed_attrs_dict:\n                        raise ValueError(\n                            f\"Duplicate signed attribute: {attr['type'].dotted}\"\n                        )\n                    signed_attrs_dict[attr['type'].dotted] = attr['values']\n\n                # Check content type attribute (for Android N and newer)\n                if max_sdk_version is None or int(max_sdk_version) >= 24:\n                    content_type_oid = (\n                        '1.2.840.113549.1.9.3'  # OID for contentType\n                    )\n                    if content_type_oid not in signed_attrs_dict:\n                        raise ValueError(\n                            \"No Content Type in signed attributes\"\n                        )\n                    content_type = signed_attrs_dict[content_type_oid][\n                        0\n                    ].native\n                    if (\n                        content_type\n                        != signed_data['content']['encap_content_info'][\n                            'content_type'\n                        ].native\n                    ):\n                        logger.error(\n                            \"Content Type mismatch. Continuing to next SignerInfo, if any.\"\n                        )\n                        return None\n\n                # Check message digest attribute\n                message_digest_oid = (\n                    '1.2.840.113549.1.9.4'  # OID for messageDigest\n                )\n                if message_digest_oid not in signed_attrs_dict:\n                    raise ValueError(\"No content digest in signed attributes\")\n                expected_signature_file_digest = signed_attrs_dict[\n                    message_digest_oid\n                ][0].native\n                hash_algo = digest_algorithm()\n                hash_algo.update(sf_object)\n                actual_digest = hash_algo.digest()\n\n                # Compare digests\n                if actual_digest != expected_signature_file_digest:\n                    logger.error(\n                        \"Digest mismatch. Continuing to next SignerInfo, if any.\"\n                    )\n                    return None\n\n                signed_attrs_dump = signed_attrs.dump()\n                # Modify the first byte to 0x31 for UNIVERSAL SET\n                signed_attrs_dump = b'\\x31' + signed_attrs_dump[1:]\n                matching_certificate_verified = self.verify_signature(\n                    signer_info,\n                    matching_certificate,\n                    signed_attrs_dump,\n                    crypto_hash_algorithm,\n                )\n            else:\n                matching_certificate_verified = self.verify_signature(\n                    signer_info,\n                    matching_certificate,\n                    sf_object,\n                    crypto_hash_algorithm,\n                )\n        return matching_certificate_verified\n\n    @staticmethod\n    def verify_signature(\n        signer_info: asn1crypto.cms.SignerInfo,\n        matching_certificate,\n        signed_data,\n        crypto_hash_algorithm\n    ) -> bytes:\n        matching_certificate_verified = None\n        signature = signer_info['signature'].native\n\n        # Load the certificate using asn1crypto as it can handle more cases (v1-only-with-rsa-1024-cert-not-der.apk)\n        cert = x509.Certificate.load(matching_certificate.chosen.dump())\n        public_key_info = cert.public_key\n\n        # Convert the ASN.1 public key to a cryptography-compatible object\n        public_key_der = public_key_info.dump()\n        public_key = serialization.load_der_public_key(\n            public_key_der, backend=default_backend()\n        )\n\n        try:\n            # RSA Key\n            if isinstance(public_key, rsa.RSAPublicKey):\n                public_key.verify(\n                    signature,\n                    signed_data,\n                    padding.PKCS1v15(),\n                    crypto_hash_algorithm(),\n                )\n\n            # DSA Key\n            elif isinstance(public_key, dsa.DSAPublicKey):\n                public_key.verify(\n                    signature, signed_data, crypto_hash_algorithm()\n                )\n\n            # EC Key\n            elif isinstance(public_key, ec.EllipticCurvePublicKey):\n                public_key.verify(\n                    signature, signed_data, ec.ECDSA(crypto_hash_algorithm())\n                )\n\n            else:\n                raise ValueError(\n                    f\"Unsupported key algorithm: {public_key.__class__.__name__.lower()}\"\n                )\n\n            # If verification succeeds, return the certificate\n            matching_certificate_verified = matching_certificate.chosen.dump()\n\n        except InvalidSignature:\n            logger.info(\n                f\"The public key of the certificate: {hashlib.sha256(matching_certificate.chosen.dump()).hexdigest()} \"\n                f\"is not associated with the signature!\"\n            )\n\n        return matching_certificate_verified\n\n    @staticmethod\n    def get_hash_algorithm(signer_info: asn1crypto.cms.SignerInfo) -> dict[str, hashes.HashAlgorithm]:\n        # Determine the hash algorithm from the SignerInfo\n        digest_algorithm = signer_info['digest_algorithm']['algorithm'].native\n        # Map the digest algorithm to a hash function\n        hash_algorithms = {\n            'md5': (md5, hashes.MD5),\n            'sha1': (sha1, hashes.SHA1),\n            'sha224': (sha224, hashes.SHA224),\n            'sha256': (sha256, hashes.SHA256),\n            'sha384': (sha384, hashes.SHA384),\n            'sha512': (sha512, hashes.SHA512),\n        }\n        if digest_algorithm not in hash_algorithms:\n            raise ValueError(f\"Unsupported hash algorithm: {digest_algorithm}\")\n        return hash_algorithms[digest_algorithm]\n\n    def find_certificate(\n        self,\n        signed_data_certificates: asn1crypto.cms.CertificateSet,\n        signer_info: asn1crypto.cms.SignerInfo) -> Union[asn1crypto.x509.Certificate, None]:\n        \"\"\"\n        From the bag of certs, obtain the certificate referenced by the `asn1crypto.cms.SignerInfo`.\n\n        :param signed_data_certificates: List of certificates in the SignedData.\n        :param signer_info: `SignerInfo` object containing the issuer and serial number reference.\n\n        :returns: The matching certificate if found, otherwise None.\n        \"\"\"\n        matching_certificate = None\n        issuer_and_serial_number = signer_info['sid']\n        issuer_str = self.canonical_name(\n            issuer_and_serial_number.chosen['issuer']\n        )\n        serial_number = issuer_and_serial_number.native['serial_number']\n\n        # # Create a x509.Name object for the issuer in the SignerInfo\n        # issuer_name = x509.Name.build(issuer)\n        # issuer_str = self.canonical_name(issuer_name)\n\n        for cert in signed_data_certificates:\n            if cert.name == 'certificate':\n                cert_issuer = self.canonical_name(\n                    cert.chosen['tbs_certificate']['issuer']\n                )\n                cert_serial_number = cert.native['tbs_certificate'][\n                    'serial_number'\n                ]\n\n                # Compare the canonical string representations of the issuers and the serial numbers\n                if (\n                    cert_issuer == issuer_str\n                    and cert_serial_number == serial_number\n                ):\n                    matching_certificate = cert\n                    break\n\n        return matching_certificate\n\n    def get_certificate(self, filename: str) -> Union[asn1crypto.x509.Certificate, None]:\n        \"\"\"\n        Return a X.509 certificate object by giving the name in the apk file\n\n        :param filename: filename of the signature file in the APK\n        :returns: the certificate object\n        \"\"\"\n        cert = self.get_certificate_der(filename)\n        if cert:\n            certificate = asn1crypto.x509.Certificate.load(cert)\n        else:\n            certificate = None\n        return certificate\n\n    def canonical_name(self, name: asn1crypto.x509.Name, android: bool = False) -> str:\n        \"\"\"\n        ```\n         * Method is dual-licensed under the Apache License 2.0 and GPLv3+.\n         * The original author has granted permission to use this code snippet under the\n         * Apache License 2.0 for inclusion in this project.\n         * https://github.com/obfusk/x509_canonical_name.py/blob/master/x509_canonical_name.py\n        ```\n\n        Returns canonical representation of `asn1crypto.x509.Name` as str (with raw control characters\n        in places those are not stripped by normalisation).\n        \"\"\"\n        # return \",\".join(\"+\".join(f\"{t}:{v}\" for _, t, v in avas) for avas in self.comparison_name(name))\n        return \",\".join(\n            \"+\".join(f\"{t}={v}\" for t, v in avas)\n            for avas in self.comparison_name(name, android=android)\n        )\n\n    def comparison_name(\n        self, name: x509.Name, *, android: bool = False\n    ) -> List[List[Tuple[str, str]]]:\n        \"\"\"\n        ```\n         * Method is dual-licensed under the Apache License 2.0 and GPLv3+.\n         * The original author has granted permission to use this code snippet under the\n         * Apache License 2.0 for inclusion in this project.\n         * https://github.com/obfusk/x509_canonical_name.py/blob/master/x509_canonical_name.py\n        ```\n\n        Canonical representation of x509.Name as nested list.\n\n        Returns a list of RDNs which are a list of AVAs which are a (type, value)\n        tuple, where type is the standard name or dotted OID, and value is the\n        normalised string representation of the value.\n        \"\"\"\n\n        return [\n            [(t, nv) for _, t, nv, _ in avas]\n            for avas in self.x509_ordered_name(name, android=android)\n        ]\n\n    @staticmethod\n    def x509_ordered_name(\n        name: x509.Name,\n        *,  # type: ignore[no-any-unimported]\n        android: bool = False,\n    ) -> List[List[Tuple[int, str, str, str]]]:\n        \"\"\"\n        ```\n         * Method is dual-licensed under the Apache License 2.0 and GPLv3+.\n         * The original author has granted permission to use this code snippet under the\n         * Apache License 2.0 for inclusion in this project.\n         * https://github.com/obfusk/x509_canonical_name.py/blob/master/x509_canonical_name.py\n        ```\n\n        Representation of `x509.Name` as nested list, in canonical ordering (but also\n        including non-canonical pre-normalised string values).\n\n        Returns a list of RDNs which are a list of AVAs which are a (oid, type,\n        normalised_value, esc_value) tuple, where oid is 0 for standard names and 1\n        for dotted OIDs, type is the standard name or dotted OID, normalised_value\n        is the normalised string representation of the value, and esc_value is the\n        string value before normalisation (but after escaping).\n\n        NB: control characters are not escaped, only characters in \",+<>;\\\"\\\\\" and\n        \"#\" at the start (before \"whitespace\" trimming) are.\n\n        [X500Principal.getName](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/javax/security/auth/x500/X500Principal.html#getName(java.lang.String))\n        [AVA.java](https://github.com/openjdk/jdk/blob/jdk-21%2B35/src/java.base/share/classes/sun/security/x509/AVA.java#L805)\n        [RDN.java (472)](https://github.com/openjdk/jdk/blob/jdk-21%2B35/src/java.base/share/classes/sun/security/x509/RDN.java#L472)\n        [RDN.java (481)](https://android.googlesource.com/platform/libcore/+/refs/heads/android14-release/ojluni/src/main/java/sun/security/x509/RDN.java#481)\n        \"\"\"\n\n        def key(\n            ava: Tuple[int, str, str, str]\n        ) -> Tuple[int, Union[str, List[int]], str]:\n            o, t, nv, _ = ava\n            if android and o:\n                return o, [int(x) for x in t.split(\".\")], nv\n            return o, t, nv\n\n        DS, U8, PS = (\n            x509.DirectoryString,\n            x509.UTF8String,\n            x509.PrintableString,\n        )\n        oids = {\n            \"2.5.4.3\": (\"common_name\", \"cn\"),\n            \"2.5.4.6\": (\"country_name\", \"c\"),\n            \"2.5.4.7\": (\"locality_name\", \"l\"),\n            \"2.5.4.8\": (\"state_or_province_name\", \"st\"),\n            \"2.5.4.9\": (\"street_address\", \"street\"),\n            \"2.5.4.10\": (\"organization_name\", \"o\"),\n            \"2.5.4.11\": (\"organizational_unit_name\", \"ou\"),\n            \"0.9.2342.19200300.100.1.1\": (\"user_id\", \"uid\"),\n            \"0.9.2342.19200300.100.1.25\": (\"domain_component\", \"dc\"),\n        }\n        esc = {ord(c): f\"\\\\{c}\" for c in \",+<>;\\\"\\\\\"}\n        cws = \"\".join(\n            chr(i) for i in range(32 + 1)\n        )  # control (but not esc) and whitespace\n        data = []\n        for rdn in reversed(name.chosen):\n            avas = []\n            for ava in rdn:\n                at, av = ava[\"type\"], ava[\"value\"]\n                if at.dotted in oids:\n                    o, t = 0, oids[at.dotted][1]  # order standard before OID\n                else:\n                    o, t = 1, at.dotted\n                if o or not (\n                    isinstance(av, DS) and isinstance(av.chosen, (U8, PS))\n                ):\n                    ev = nv = \"#\" + binascii.hexlify(av.dump()).decode()\n                else:\n                    ev = (av.native or \"\").translate(esc)\n                    if ev.startswith(\"#\"):\n                        ev = \"\\\\\" + ev\n                    nv = unicodedata.normalize(\n                        \"NFKD\",\n                        re.sub(r\" +\", \" \", ev).strip(cws).upper().lower(),\n                    )\n                avas.append((o, t, nv, ev))\n            data.append(sorted(avas, key=key))\n        return data\n\n    def new_zip(\n        self,\n        filename: str,\n        deleted_files: Union[str, None] = None,\n        new_files: dict = {},\n    ) -> None:\n        \"\"\"\n        Create a new zip file\n\n        :param filename: the output filename of the zip\n        :param deleted_files: a regex pattern to remove specific file, or `None`\n        :param new_files: a dictionnary of new files (key:filename, value:content of the file)\n        \"\"\"\n        zout = zipfile.ZipFile(filename, 'w')\n\n        for item in self.zip.infolist():\n            # Block one: deleted_files, or deleted_files and new_files\n            if deleted_files is not None:\n                if re.match(deleted_files, item) is None:\n                    # if the regex of deleted_files doesn't match the filename\n                    if new_files is not False:\n                        if item in new_files:\n                            # and if the filename is in new_files\n                            zout.writestr(item, new_files[item])\n                            continue\n                    # Otherwise, write the original file.\n                    buffer = self.zip.read(item)\n                    zout.writestr(item, buffer)\n            # Block two: deleted_files is None, new_files is not empty\n            elif new_files is not False:\n                if item in new_files:\n                    zout.writestr(item, new_files[item])\n                else:\n                    buffer = self.zip.read(item)\n                    zout.writestr(item, buffer)\n            # Block three: deleted_files is None, new_files is empty.\n            # Just write out the default zip\n            else:\n                buffer = self.zip.read(item)\n                zout.writestr(item, buffer)\n        zout.close()\n\n    def get_android_manifest_axml(self) -> Union[AXMLPrinter, None]:\n        \"\"\"\n        Return the [AXMLPrinter][androguard.core.axml.AXMLPrinter] object which corresponds to the `AndroidManifest.xml` file\n\n        :returns: the `AXMLPrinter` object\n        \"\"\"\n        try:\n            return self.axml[\"AndroidManifest.xml\"]\n        except KeyError:\n            return None\n\n    def get_android_manifest_xml(self) -> Union[lxml.etree.Element, None]:\n        \"\"\"\n        Return the parsed xml object which corresponds to the `AndroidManifest.xml` file\n\n        :returns: the parsed xml object\n        \"\"\"\n        try:\n            return self.xml[\"AndroidManifest.xml\"]\n        except KeyError:\n            return None\n\n    def get_android_resources(self) -> Union[ARSCParser, None]:\n        \"\"\"\n        Return the [ARSCParser][androguard.core.axml.ARSCParser] object which corresponds to the `resources.arsc` file\n\n        :returns: the `ARSCParser` object\n        \"\"\"\n        try:\n            return self.arsc[\"resources.arsc\"]\n        except KeyError:\n            if \"resources.arsc\" not in self.zip.namelist():\n                # There is a rare case, that no resource file is supplied.\n                # Maybe it was added manually, thus we check here\n                return None\n            self.arsc[\"resources.arsc\"] = ARSCParser(\n                self.zip.read(\"resources.arsc\")\n            )\n            return self.arsc[\"resources.arsc\"]\n\n    def is_signed(self) -> bool:\n        \"\"\"\n        Returns true if any of v1, v2, or v3 signatures were found.\n\n        :returns: True if any of v1, v2, or v3 signatures were found, else False\n        \"\"\"\n        return (\n            self.is_signed_v1() or self.is_signed_v2() or self.is_signed_v3()\n        )\n\n    def is_signed_v1(self) -> bool:\n        \"\"\"\n        Returns `True` if a v1 / JAR signature was found.\n\n        Returning `True` does not mean that the file is properly signed!\n        It just says that there is a signature file which needs to be validated.\n\n        :returns: `True` if a v1 / JAR signature was found, else `False`\n        \"\"\"\n        return self.get_signature_name() is not None\n\n    def is_signed_v2(self) -> bool:\n        \"\"\"\n        Returns `True` of a v2 / APK signature was found.\n\n        Returning `True` does not mean that the file is properly signed!\n        It just says that there is a signature file which needs to be validated.\n\n        :returns: `True` of a v2 / APK signature was found, else `False`\n        \"\"\"\n        if self._is_signed_v2 is None:\n            self.parse_v2_v3_signature()\n\n        return self._is_signed_v2\n\n    def is_signed_v3(self) -> bool:\n        \"\"\"\n        Returns `True` of a v3 / APK signature was found.\n\n        Returning `True` does not mean that the file is properly signed!\n        It just says that there is a signature file which needs to be validated.\n\n        :returns: `True` of a v3 / APK signature was found, else `False`\n        \"\"\"\n        if self._is_signed_v3 is None:\n            self.parse_v2_v3_signature()\n\n        return self._is_signed_v3\n\n    def read_uint32_le(self, io_stream) -> int:\n        \"\"\"read a `uint32_le` from `io_stream`\n        \n        :param io_stream: the stream to get a `uint32_le` from\n        :return: the `uint32_le` value\n        \"\"\"\n        (value,) = unpack('<I', io_stream.read(4))\n        return value\n\n    def parse_signatures_or_digests(\n        self, digest_bytes: bytes\n    ) -> list[tuple[int, bytes]]:\n        \"\"\"Parse digests\n        \n        :param digest_bytes: the digests bytes\n        :returns: a list of tuple where the first element is the `algorithm_id` and the second is the digest bytes\n        \"\"\"\n        \n        if not len(digest_bytes):\n            return []\n\n        digests = []\n        block = io.BytesIO(digest_bytes)\n\n        data_len = self.read_uint32_le(block)\n        while block.tell() < data_len:\n\n            algorithm_id = self.read_uint32_le(block)\n            digest_len = self.read_uint32_le(block)\n            digest = block.read(digest_len)\n\n            digests.append((algorithm_id, digest))\n\n        return digests\n\n    def parse_v2_v3_signature(self) -> None:\n        # Need to find an v2 Block in the APK.\n        # The Google Docs gives you the following rule:\n        # * go to the end of the ZIP File\n        # * search for the End of Central directory\n        # * then jump to the beginning of the central directory\n        # * Read now the magic of the signing block\n        # * before the magic there is the size_of_block, so we can jump to\n        # the beginning.\n        # * There should be again the size_of_block\n        # * Now we can read the Key-Values\n        # * IDs with an unknown value should be ignored.\n        f = io.BytesIO(self.get_raw())\n\n        size_central = None\n        offset_central = None\n\n        # Go to the end\n        f.seek(-1, io.SEEK_END)\n        # we know the minimal length for the central dir is 16+4+2\n        f.seek(-20, io.SEEK_CUR)\n\n        while f.tell() > 0:\n            f.seek(-1, io.SEEK_CUR)\n            (r,) = unpack('<4s', f.read(4))\n            if r == self._PK_END_OF_CENTRAL_DIR:\n                # Read central dir\n                (\n                    this_disk,\n                    disk_central,\n                    this_entries,\n                    total_entries,\n                    size_central,\n                    offset_central,\n                ) = unpack('<HHHHII', f.read(16))\n                # TODO according to the standard we need to check if the\n                # end of central directory is the last item in the zip file\n                # TODO We also need to check if the central dir is exactly\n                # before the end of central dir...\n\n                # These things should not happen for APKs\n                if this_disk != 0:\n                    logger.warning(\n                        \"This is a multi disk ZIP! Attempting to process its signature anyway!\"\n                    )\n                if disk_central != 0:\n                    logger.warning(\n                        \"This is a multi disk ZIP! Attempting to process its signature anyway!\"\n                    )\n                break\n            f.seek(-4, io.SEEK_CUR)\n\n        if not offset_central:\n            return\n\n        f.seek(offset_central)\n        (r,) = unpack('<4s', f.read(4))\n        f.seek(-4, io.SEEK_CUR)\n        if r != self._PK_CENTRAL_DIR:\n            raise BrokenAPKError(\"No Central Dir at specified offset\")\n\n        # Go back and check if we have a magic\n        end_offset = f.tell()\n        f.seek(-24, io.SEEK_CUR)\n        size_of_block, magic = unpack('<Q16s', f.read(24))\n\n        self._is_signed_v2 = False\n        self._is_signed_v3 = False\n\n        if magic != self._APK_SIG_MAGIC:\n            return\n\n        # go back size_of_blocks + 8 and read size_of_block again\n        f.seek(-(size_of_block + 8), io.SEEK_CUR)\n        (size_of_block_start,) = unpack(\"<Q\", f.read(8))\n        if size_of_block_start != size_of_block:\n            raise BrokenAPKError(\"Sizes at beginning and end does not match!\")\n\n        # Store all blocks\n        while f.tell() < end_offset - 24:\n            size, key = unpack('<QI', f.read(12))\n            value = f.read(size - 4)\n            if key in self._v2_blocks:\n                # TODO: Store the duplicate V2 Signature blocks and offer a way to show them\n                # https://github.com/androguard/androguard/issues/1030\n                logger.warning(\n                    \"Duplicate block ID in APK Signing Block: {}\".format(key)\n                )\n            else:\n                self._v2_blocks[key] = value\n\n        # Test if a signature is found\n        if self._APK_SIG_KEY_V2_SIGNATURE in self._v2_blocks:\n            self._is_signed_v2 = True\n\n        if self._APK_SIG_KEY_V3_SIGNATURE in self._v2_blocks:\n            self._is_signed_v3 = True\n\n    def parse_v3_signing_block(self) -> None:\n        \"\"\"\n        Parse the V2 signing block and extract all features\n        \"\"\"\n\n        self._v3_signing_data = []\n\n        # calling is_signed_v3 should also load the signature, if any\n        if not self.is_signed_v3():\n            return\n\n        block_bytes = self._v2_blocks[self._APK_SIG_KEY_V3_SIGNATURE]\n        block = io.BytesIO(block_bytes)\n        view = block.getvalue()\n\n        # V3 signature Block data format:\n        #\n        # * signer:\n        #    * signed data:\n        #        * digests:\n        #            * signature algorithm ID (uint32)\n        #            * digest (length-prefixed)\n        #        * certificates\n        #        * minSDK\n        #        * maxSDK\n        #        * additional attributes\n        #    * minSDK\n        #    * maxSDK\n        #    * signatures\n        #    * publickey\n        size_sequence = self.read_uint32_le(block)\n        if size_sequence + 4 != len(block_bytes):\n            raise BrokenAPKError(\n                \"size of sequence and blocksize does not match\"\n            )\n\n        while block.tell() < len(block_bytes):\n            off_signer = block.tell()\n            size_signer = self.read_uint32_le(block)\n\n            # read whole signed data, since we might to parse\n            # content within the signed data, and mess up offset\n            len_signed_data = self.read_uint32_le(block)\n            signed_data_bytes = block.read(len_signed_data)\n            signed_data = io.BytesIO(signed_data_bytes)\n\n            # Digests\n            len_digests = self.read_uint32_le(signed_data)\n            raw_digests = signed_data.read(len_digests)\n            digests = self.parse_signatures_or_digests(raw_digests)\n\n            # Certs\n            certs = []\n            len_certs = self.read_uint32_le(signed_data)\n            start_certs = signed_data.tell()\n            while signed_data.tell() < start_certs + len_certs:\n\n                len_cert = self.read_uint32_le(signed_data)\n                cert = signed_data.read(len_cert)\n                certs.append(cert)\n\n            # versions\n            signed_data_min_sdk = self.read_uint32_le(signed_data)\n            signed_data_max_sdk = self.read_uint32_le(signed_data)\n\n            # Addional attributes\n            len_attr = self.read_uint32_le(signed_data)\n            attr = signed_data.read(len_attr)\n\n            signed_data_object = APKV3SignedData()\n            signed_data_object._bytes = signed_data_bytes\n            signed_data_object.digests = digests\n            signed_data_object.certificates = certs\n            signed_data_object.additional_attributes = attr\n            signed_data_object.minSDK = signed_data_min_sdk\n            signed_data_object.maxSDK = signed_data_max_sdk\n\n            # versions (should be the same as signed data's versions)\n            signer_min_sdk = self.read_uint32_le(block)\n            signer_max_sdk = self.read_uint32_le(block)\n\n            # Signatures\n            len_sigs = self.read_uint32_le(block)\n            raw_sigs = block.read(len_sigs)\n            sigs = self.parse_signatures_or_digests(raw_sigs)\n\n            # PublicKey\n            len_publickey = self.read_uint32_le(block)\n            publickey = block.read(len_publickey)\n\n            signer = APKV3Signer()\n            signer._bytes = view[off_signer : off_signer + size_signer]\n            signer.signed_data = signed_data_object\n            signer.signatures = sigs\n            signer.public_key = publickey\n            signer.minSDK = signer_min_sdk\n            signer.maxSDK = signer_max_sdk\n\n            self._v3_signing_data.append(signer)\n\n    def parse_v2_signing_block(self) -> None:\n        \"\"\"\n        Parse the V2 signing block and extract all features\n        \"\"\"\n\n        self._v2_signing_data = []\n\n        # calling is_signed_v2 should also load the signature\n        if not self.is_signed_v2():\n            return\n\n        block_bytes = self._v2_blocks[self._APK_SIG_KEY_V2_SIGNATURE]\n        block = io.BytesIO(block_bytes)\n        view = block.getvalue()\n\n        # V2 signature Block data format:\n        #\n        # * signer:\n        #    * signed data:\n        #        * digests:\n        #            * signature algorithm ID (uint32)\n        #            * digest (length-prefixed)\n        #        * certificates\n        #        * additional attributes\n        #    * signatures\n        #    * publickey\n\n        size_sequence = self.read_uint32_le(block)\n        if size_sequence + 4 != len(block_bytes):\n            raise BrokenAPKError(\n                \"size of sequence and blocksize does not match\"\n            )\n\n        while block.tell() < len(block_bytes):\n            off_signer = block.tell()\n            size_signer = self.read_uint32_le(block)\n\n            # read whole signed data, since we might to parse\n            # content within the signed data, and mess up offset\n            len_signed_data = self.read_uint32_le(block)\n            signed_data_bytes = block.read(len_signed_data)\n            signed_data = io.BytesIO(signed_data_bytes)\n\n            # Digests\n            len_digests = self.read_uint32_le(signed_data)\n            raw_digests = signed_data.read(len_digests)\n            digests = self.parse_signatures_or_digests(raw_digests)\n\n            # Certs\n            certs = []\n            len_certs = self.read_uint32_le(signed_data)\n            start_certs = signed_data.tell()\n            while signed_data.tell() < start_certs + len_certs:\n                len_cert = self.read_uint32_le(signed_data)\n                cert = signed_data.read(len_cert)\n                certs.append(cert)\n\n            # Additional attributes\n            len_attr = self.read_uint32_le(signed_data)\n            attributes = signed_data.read(len_attr)\n\n            signed_data_object = APKV2SignedData()\n            signed_data_object._bytes = signed_data_bytes\n            signed_data_object.digests = digests\n            signed_data_object.certificates = certs\n            signed_data_object.additional_attributes = attributes\n\n            # Signatures\n            len_sigs = self.read_uint32_le(block)\n            raw_sigs = block.read(len_sigs)\n            sigs = self.parse_signatures_or_digests(raw_sigs)\n\n            # PublicKey\n            len_publickey = self.read_uint32_le(block)\n            publickey = block.read(len_publickey)\n\n            signer = APKV2Signer()\n            signer._bytes = view[off_signer : off_signer + size_signer]\n            signer.signed_data = signed_data_object\n            signer.signatures = sigs\n            signer.public_key = publickey\n\n            self._v2_signing_data.append(signer)\n\n    def get_public_keys_der_v3(self) -> list[bytes]:\n        \"\"\"\n        Return a list of DER coded X.509 public keys from the v3 signature block\n\n        :returns: the list of public key bytes\n        \"\"\"\n\n        if self._v3_signing_data == None:\n            self.parse_v3_signing_block()\n\n        public_keys = []\n\n        for signer in self._v3_signing_data:\n            public_keys.append(signer.public_key)\n\n        return public_keys\n\n    def get_public_keys_der_v2(self) -> list[bytes]:\n        \"\"\"\n        Return a list of DER coded X.509 public keys from the v3 signature block\n\n        :returns: the list of public key bytes\n        \"\"\"\n\n        if self._v2_signing_data == None:\n            self.parse_v2_signing_block()\n\n        public_keys = []\n\n        for signer in self._v2_signing_data:\n            public_keys.append(signer.public_key)\n\n        return public_keys\n\n    def get_certificates_der_v3(self) -> list[bytes]:\n        \"\"\"\n        Return a list of DER coded X.509 certificates from the v3 signature block\n\n        :returns: the list of public key bytes\n        \"\"\"\n\n        if self._v3_signing_data == None:\n            self.parse_v3_signing_block()\n\n        certs = []\n        for signed_data in [\n            signer.signed_data for signer in self._v3_signing_data\n        ]:\n            for cert in signed_data.certificates:\n                certs.append(cert)\n\n        return certs\n\n    def get_certificates_der_v2(self) -> list[bytes]:\n        \"\"\"\n        Return a list of DER coded X.509 certificates from the v3 signature block\n\n        :returns: the list of public key bytes\n        \"\"\"\n\n        if self._v2_signing_data == None:\n            self.parse_v2_signing_block()\n\n        certs = []\n        for signed_data in [\n            signer.signed_data for signer in self._v2_signing_data\n        ]:\n            for cert in signed_data.certificates:\n                certs.append(cert)\n\n        return certs\n\n    def get_public_keys_v3(self) -> list[asn1crypto.keys.PublicKeyInfo]:\n        \"\"\"\n        Return a list of `asn1crypto.keys.PublicKeyInfo` which are found\n        in the v3 signing block.\n\n        :returns: a list of the found `asn1crypto.keys.PublicKeyInfo`\n        \"\"\"\n        return [\n            keys.PublicKeyInfo.load(pkey)\n            for pkey in self.get_public_keys_der_v3()\n        ]\n\n    def get_public_keys_v2(self) -> list[asn1crypto.keys.PublicKeyInfo]:\n        \"\"\"\n        Return a list of `asn1crypto.keys.PublicKeyInfo` which are found\n        in the v2 signing block.\n\n        :returns: a list of the found `asn1crypto.keys.PublicKeyInfo`\n        \"\"\"\n        return [\n            keys.PublicKeyInfo.load(pkey)\n            for pkey in self.get_public_keys_der_v2()\n        ]\n\n    def get_certificates_v3(self) -> list[asn1crypto.x509.Certificate]:\n        \"\"\"\n        Return a list of `asn1crypto.x509.Certificate` which are found\n        in the v3 signing block.\n        Note that we simply extract all certificates regardless of the signer.\n        Therefore this is just a list of all certificates found in all signers.\n\n        :returns: a list of the found `asn1crypto.x509.Certificate`\n        \"\"\"\n        return [\n            x509.Certificate.load(cert)\n            for cert in self.get_certificates_der_v3()\n        ]\n\n    def get_certificates_v2(self) -> list[asn1crypto.x509.Certificate]:\n        \"\"\"\n        Return a list of `asn1crypto.x509.Certificate` which are found\n        in the v2 signing block.\n        Note that we simply extract all certificates regardless of the signer.\n        Therefore this is just a list of all certificates found in all signers.\n\n        :returns: a list of the found `asn1crypto.x509.Certificate`\n        \"\"\"\n        return [\n            x509.Certificate.load(cert)\n            for cert in self.get_certificates_der_v2()\n        ]\n\n    def get_certificates_v1(self) -> list[Union[x509.Certificate, None]]:\n        \"\"\"\n        Return a list of verified `asn1crypto.x509.Certificate` which are found\n        in the META-INF folder (v1 signing).\n        \"\"\"\n        certs = []\n        for x in self.get_signature_names():\n            cc = self.get_certificate_der(x)\n            if cc is not None:\n                certs.append(x509.Certificate.load(cc))\n        return certs\n\n    def get_certificates(self) -> list[asn1crypto.x509.Certificate]:\n        \"\"\"\n        Return a list of unique `asn1crypto.x509.Certificate` which are found\n        in v1, v2 and v3 signing\n        Note that we simply extract all certificates regardless of the signer.\n        Therefore this is just a list of all certificates found in all signers.\n        Exception is v1, for which the certificate returned is verified.\n        \n        :returns: a list of the found `asn1crypto.x509.Certificate`\n        \"\"\"\n        fps = []\n        certs = []\n        for x in (\n            self.get_certificates_v1()\n            + self.get_certificates_v2()\n            + self.get_certificates_v3()\n        ):\n            if x.sha256 not in fps:\n                fps.append(x.sha256)\n                certs.append(x)\n        return certs\n\n    def get_signature_name(self) -> Union[str, None]:\n        \"\"\"\n        Return the name of the first signature file found.\n\n        :returns: the name of the first signature file, or `None` if not signed\n        \"\"\"\n        if self.get_signature_names():\n            return self.get_signature_names()[0]\n        else:\n            # Unsigned APK\n            return None\n\n    def get_signature_names(self) -> list[str]:\n        \"\"\"\n        Return a list of the signature file names (v1 Signature / JAR\n        Signature)\n\n        :returns: List of filenames matching a Signature\n        \"\"\"\n        signature_expr = re.compile(r'\\AMETA-INF/(?s:.)*\\.(DSA|EC|RSA)\\Z')\n        signatures = []\n\n        for i in self.get_files():\n            if signature_expr.search(i):\n                if \"{}.SF\".format(i.rsplit(\".\", 1)[0]) in self.get_files():\n                    signatures.append(i)\n                else:\n                    logger.warning(\n                        \"v1 signature file {} missing .SF file - Partial signature!\".format(\n                            i\n                        )\n                    )\n\n        return signatures\n\n    def get_signature(self) -> Union[str, None]:\n        \"\"\"\n        Return the data of the first signature file found (v1 Signature / JAR\n        Signature)\n\n        :returns: First signature name or None if not signed\n        \"\"\"\n        if self.get_signatures():\n            return self.get_signatures()[0]\n        else:\n            return None\n\n    def get_signatures(self) -> list[bytes]:\n        \"\"\"\n        Return a list of the data of the signature files.\n        Only v1 / JAR Signing.\n\n        :returns: list of bytes\n        \"\"\"\n        signature_expr = re.compile(r'\\AMETA-INF/(?s:.)*\\.(DSA|EC|RSA)\\Z')\n        signature_datas = []\n\n        for i in self.get_files():\n            if signature_expr.search(i):\n                signature_datas.append(self.get_file(i))\n\n        return signature_datas\n\n    def show(self) -> None:\n        self.get_files_types()\n\n        print(\"FILES: \")\n        for i in self.get_files():\n            try:\n                print(\"\\t\", i, self._files[i], \"%x\" % self.files_crc32[i])\n            except KeyError:\n                print(\"\\t\", i, \"%x\" % self.files_crc32[i])\n\n        print(\"DECLARED PERMISSIONS:\")\n        declared_permissions = self.get_declared_permissions()\n        for i in declared_permissions:\n            print(\"\\t\", i)\n\n        print(\"REQUESTED PERMISSIONS:\")\n        requested_permissions = self.get_permissions()\n        for i in requested_permissions:\n            print(\"\\t\", i)\n\n        print(\"MAIN ACTIVITY: \", self.get_main_activity())\n\n        print(\"ACTIVITIES: \")\n        activities = self.get_activities()\n        for i in activities:\n            filters = self.get_intent_filters(\"activity\", i)\n            print(\"\\t\", i, filters or \"\")\n\n        print(\"SERVICES: \")\n        services = self.get_services()\n        for i in services:\n            filters = self.get_intent_filters(\"service\", i)\n            print(\"\\t\", i, filters or \"\")\n\n        print(\"RECEIVERS: \")\n        receivers = self.get_receivers()\n        for i in receivers:\n            filters = self.get_intent_filters(\"receiver\", i)\n            print(\"\\t\", i, filters or \"\")\n\n        print(\"PROVIDERS: \", self.get_providers())\n\n        if self.is_signed_v1():\n            print(\"CERTIFICATES v1:\")\n            for c in self.get_signature_names():\n                show_Certificate(self.get_certificate(c))\n\n        if self.is_signed_v2():\n            print(\"CERTIFICATES v2:\")\n            for c in self.get_certificates_v2():\n                show_Certificate(c)\n\n\ndef show_Certificate(cert:asn1crypto.x509.Certificate, short:bool=False) -> None:\n    \"\"\"\n    Print Fingerprints, Issuer and Subject of an X509 Certificate.\n\n    :param cert: `asn1crypto.x509.Certificate` to print\n    :param short: Print in shortform for DN (Default: False)\n    \"\"\"\n    print(\"SHA1 Fingerprint: {}\".format(cert.sha1_fingerprint))\n    print(\"SHA256 Fingerprint: {}\".format(cert.sha256_fingerprint))\n    print(\n        \"Issuer: {}\".format(\n            get_certificate_name_string(cert.issuer.native, short=short)\n        )\n    )\n    print(\n        \"Subject: {}\".format(\n            get_certificate_name_string(cert.subject.native, short=short)\n        )\n    )\n\n\ndef ensure_final_value(packageName: str, arsc: ARSCParser, value: str) -> str:\n    \"\"\"Ensure incoming value is always the value, not the resid\n\n    androguard will sometimes return the Android \"resId\" aka\n    Resource ID instead of the actual value.  This checks whether\n    the value is actually a resId, then performs the Android\n    Resource lookup as needed.\n\n    :returns: the final Android Resource value\n    \"\"\"\n    if value:\n        returnValue = value\n        if value[0] == '@':\n            # TODO: @packagename:DEADBEEF is not supported here!\n            try:  # can be a literal value or a resId\n                res_id = int('0x' + value[1:], 16)\n                res_id = arsc.get_id(packageName, res_id)[1]\n                returnValue = arsc.get_string(packageName, res_id)[1]\n            except (ValueError, TypeError):\n                pass\n        return returnValue\n    return ''\n\n\ndef get_apkid(apkfile: str) -> tuple[str, str, str]:\n    \"\"\"Read (appid, versionCode, versionName) from an APK\n\n    This first tries to do quick binary XML parsing to just get the\n    values that are needed.  It will fallback to full androguard\n    parsing, which is slow, if it can't find the versionName value or\n    versionName is set to a Android String Resource (e.g. an integer\n    hex value that starts with @).\n\n    :raises RuntimeError: if manifest is malformed\n    :returns: tuple of format (appid, versionCode, versionName) of a given apkfile\n    \"\"\"\n    logger.debug(\"GET_APKID\")\n\n    if not os.path.exists(apkfile):\n        logger.error(\"'{apkfile}' does not exist!\".format(apkfile=apkfile))\n\n    appid = None\n    versionCode = None\n    versionName = None\n    apk = ZipEntry.parse(apkfile, False)\n    manifest = apk.read('AndroidManifest.xml')\n    axml = AXMLParser(manifest)\n    count = 0\n    while axml.is_valid():\n        _type = next(axml)\n        count += 1\n        if _type == START_TAG:\n            for i in range(0, axml.getAttributeCount()):\n                name = axml.getAttributeName(i)\n                _type = axml.getAttributeValueType(i)\n                _data = axml.getAttributeValueData(i)\n                value = format_value(\n                    _type, _data, lambda _: axml.getAttributeValue(i)\n                )\n                if appid is None and name == 'package':\n                    appid = value\n                elif versionCode is None and name == 'versionCode':\n                    if value.startswith('0x'):\n                        versionCode = str(int(value, 16))\n                    else:\n                        versionCode = value\n                elif versionName is None and name == 'versionName':\n                    versionName = value\n\n            if axml.name == 'manifest':\n                break\n        elif _type == END_TAG or _type == TEXT or _type == END_DOCUMENT:\n            raise RuntimeError(\n                '{path}: <manifest> must be the first element in AndroidManifest.xml'.format(\n                    path=apkfile\n                )\n            )\n\n    if not versionName or versionName[0] == '@':\n        a = APK(apkfile)\n        versionName = ensure_final_value(\n            a.package, a.get_android_resources(), a.get_androidversion_name()\n        )\n    if not versionName:\n        versionName = ''  # versionName is expected to always be a str\n\n    return appid, versionCode, versionName.strip('\\0')\n"
  },
  {
    "path": "libs/androguard/core/axml/__init__.py",
    "content": "# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nimport binascii\nimport collections\nimport io\nimport re\nfrom collections import defaultdict\nfrom struct import pack, unpack\nfrom typing import BinaryIO, Union\nfrom xml.sax.saxutils import escape\n\nfrom loguru import logger\nfrom lxml import etree\n\nfrom androguard.core.resources import public\n\nfrom .types import *\n\n# Constants for ARSC Files\n# see http://aospxref.com/android-13.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#233\nRES_NULL_TYPE = 0x0000\nRES_STRING_POOL_TYPE = 0x0001\nRES_TABLE_TYPE = 0x0002\nRES_XML_TYPE = 0x0003\n\nRES_XML_FIRST_CHUNK_TYPE = 0x0100\nRES_XML_START_NAMESPACE_TYPE = 0x0100\nRES_XML_END_NAMESPACE_TYPE = 0x0101\nRES_XML_START_ELEMENT_TYPE = 0x0102\nRES_XML_END_ELEMENT_TYPE = 0x0103\nRES_XML_CDATA_TYPE = 0x0104\nRES_XML_LAST_CHUNK_TYPE = 0x017F\n\nRES_XML_RESOURCE_MAP_TYPE = 0x0180\n\nRES_TABLE_PACKAGE_TYPE = 0x0200\nRES_TABLE_TYPE_TYPE = 0x0201\nRES_TABLE_TYPE_SPEC_TYPE = 0x0202\nRES_TABLE_LIBRARY_TYPE = 0x0203\nRES_TABLE_OVERLAYABLE_TYPE = 0x0204\nRES_TABLE_OVERLAYABLE_POLICY_TYPE = 0x0205\nRES_TABLE_STAGED_ALIAS_TYPE = 0x0206\n# Flags in the STRING Section\nSORTED_FLAG = 1 << 0\nUTF8_FLAG = 1 << 8\n\n# Position of the fields inside an attribute\nATTRIBUTE_IX_NAMESPACE_URI = 0\nATTRIBUTE_IX_NAME = 1\nATTRIBUTE_IX_VALUE_STRING = 2\nATTRIBUTE_IX_VALUE_TYPE = 3\nATTRIBUTE_IX_VALUE_DATA = 4\nATTRIBUTE_LENGTH = 5\n\n# Internally used state variables for AXMLParser\nSTART_DOCUMENT = 0\nEND_DOCUMENT = 1\nSTART_TAG = 2\nEND_TAG = 3\nTEXT = 4\n\n# Table used to lookup functions to determine the value representation in ARSCParser\nTYPE_TABLE = {\n    TYPE_ATTRIBUTE: \"attribute\",\n    TYPE_DIMENSION: \"dimension\",\n    TYPE_FLOAT: \"float\",\n    TYPE_FRACTION: \"fraction\",\n    TYPE_INT_BOOLEAN: \"int_boolean\",\n    TYPE_INT_COLOR_ARGB4: \"int_color_argb4\",\n    TYPE_INT_COLOR_ARGB8: \"int_color_argb8\",\n    TYPE_INT_COLOR_RGB4: \"int_color_rgb4\",\n    TYPE_INT_COLOR_RGB8: \"int_color_rgb8\",\n    TYPE_INT_DEC: \"int_dec\",\n    TYPE_INT_HEX: \"int_hex\",\n    TYPE_NULL: \"null\",\n    TYPE_REFERENCE: \"reference\",\n    TYPE_STRING: \"string\",\n}\n\nRADIX_MULTS = [0.00390625, 3.051758e-005, 1.192093e-007, 4.656613e-010]\nDIMENSION_UNITS = [\"px\", \"dip\", \"sp\", \"pt\", \"in\", \"mm\"]\nFRACTION_UNITS = [\"%\", \"%p\"]\n\nCOMPLEX_UNIT_MASK = 0x0F\n\n\nclass ResParserError(Exception):\n    \"\"\"Exception for the parsers\"\"\"\n\n    pass\n\n\ndef complexToFloat(xcomplex) -> float:\n    \"\"\"\n    Convert a complex unit into float\n    \"\"\"\n    return float(xcomplex & 0xFFFFFF00) * RADIX_MULTS[(xcomplex >> 4) & 3]\n\n\nclass StringBlock:\n    \"\"\"\n    StringBlock is a CHUNK inside an AXML File: `ResStringPool_header`\n    It contains all strings, which are used by referencing to ID's\n\n    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#436\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, header: ARSCHeader) -> None:\n        \"\"\"\n        :param buff: buffer which holds the string block\n        :param header: a instance of [ARSCHeader][androguard.core.axml.ARSCHeader]\n        \"\"\"\n        self._cache = {}\n        self.header = header\n        # We already read the header (which was chunk_type and chunk_size\n        # Now, we read the string_count:\n        self.stringCount = unpack('<I', buff.read(4))[0]\n        # style_count\n        self.styleCount = unpack('<I', buff.read(4))[0]\n\n        # flags\n        self.flags = unpack('<I', buff.read(4))[0]\n        self.m_isUTF8 = (self.flags & UTF8_FLAG) != 0\n\n        # string_pool_offset\n        # The string offset is counted from the beginning of the string section\n        self.stringsOffset = unpack('<I', buff.read(4))[0]\n        # check if the stringCount is correct\n        if (\n            self.stringsOffset - (self.styleCount * 4 + 28)\n        ) / 4 != self.stringCount:\n            self.stringCount = int(\n                (self.stringsOffset - (self.styleCount * 4 + 28)) / 4\n            )\n\n        # style_pool_offset\n        # The styles offset is counted as well from the beginning of the string section\n        self.stylesOffset = unpack('<I', buff.read(4))[0]\n\n        # Check if they supplied a stylesOffset even if the count is 0:\n        if self.styleCount == 0 and self.stylesOffset > 0:\n            logger.info(\n                \"Styles Offset given, but styleCount is zero. \"\n                \"This is not a problem but could indicate packers.\"\n            )\n\n        self.m_stringOffsets = []\n        self.m_styleOffsets = []\n        self.m_charbuff = \"\"\n        self.m_styles = []\n\n        # Next, there is a list of string following.\n        # This is only a list of offsets (4 byte each)\n        for i in range(self.stringCount):\n            self.m_stringOffsets.append(unpack('<I', buff.read(4))[0])\n\n        # And a list of styles\n        # again, a list of offsets\n        for i in range(self.styleCount):\n            self.m_styleOffsets.append(unpack('<I', buff.read(4))[0])\n\n        # FIXME it is probably better to parse n strings and not calculate the size\n        size = self.header.size - self.stringsOffset\n\n        # if there are styles as well, we do not want to read them too.\n        # Only read them, if no\n        if self.stylesOffset != 0 and self.styleCount != 0:\n            size = self.stylesOffset - self.stringsOffset\n\n        if (size % 4) != 0:\n            logger.warning(\"Size of strings is not aligned by four bytes.\")\n\n        self.m_charbuff = buff.read(size)\n\n        if self.stylesOffset != 0 and self.styleCount != 0:\n            size = self.header.size - self.stylesOffset\n\n            if (size % 4) != 0:\n                logger.warning(\"Size of styles is not aligned by four bytes.\")\n\n            for i in range(0, size // 4):\n                self.m_styles.append(unpack('<I', buff.read(4))[0])\n\n    def __repr__(self):\n        return \"<StringPool #strings={}, #styles={}, UTF8={}>\".format(\n            self.stringCount, self.styleCount, self.m_isUTF8\n        )\n\n    def __getitem__(self, idx):\n        \"\"\"\n        Returns the string at the index in the string table\n\n        :returns: the string\n        \"\"\"\n        return self.getString(idx)\n\n    def __len__(self):\n        \"\"\"\n        Get the number of strings stored in this table\n\n        :return: the number of strings\n        \"\"\"\n        return self.stringCount\n\n    def __iter__(self):\n        \"\"\"\n        Iterable over all strings\n\n        :returns: a generator over all strings\n        \"\"\"\n        for i in range(self.stringCount):\n            yield self.getString(i)\n\n    def getString(self, idx: int) -> str:\n        \"\"\"\n        Return the string at the index in the string table\n\n        :param idx: index in the string table\n        :return: the string\n        \"\"\"\n        if idx in self._cache:\n            return self._cache[idx]\n\n        if idx < 0 or not self.m_stringOffsets or idx >= self.stringCount:\n            return \"\"\n\n        offset = self.m_stringOffsets[idx]\n\n        if self.m_isUTF8:\n            self._cache[idx] = self._decode8(offset)\n        else:\n            self._cache[idx] = self._decode16(offset)\n\n        return self._cache[idx]\n\n    def getStyle(self, idx: int) -> int:\n        \"\"\"\n        Return the style associated with the index\n\n        :param idx: index of the style\n        :return: the style integer\n        \"\"\"\n        return self.m_styles[idx]\n\n    def _decode8(self, offset: int) -> str:\n        \"\"\"\n        Decode an UTF-8 String at the given offset\n\n        :param offset: offset of the string inside the data\n        :raises ResParserError: if string is not null terminated\n        :return: the decoded string\n        \"\"\"\n        # UTF-8 Strings contain two lengths, as they might differ:\n        # 1) the UTF-16 length\n        str_len, skip = self._decode_length(offset, 1)\n        offset += skip\n\n        # 2) the utf-8 string length\n        encoded_bytes, skip = self._decode_length(offset, 1)\n        offset += skip\n\n        # Two checks should happen here:\n        # a) offset + encoded_bytes surpassing the string_pool length and\n        # b) non-null terminated strings which should be rejected\n        # platform/frameworks/base/libs/androidfw/ResourceTypes.cpp#789\n        if len(self.m_charbuff) < (offset + encoded_bytes):\n            logger.warning(\n                f\"String size: {offset + encoded_bytes} is exceeding string pool size. Returning empty string.\"\n            )\n            return \"\"\n        data = self.m_charbuff[offset : offset + encoded_bytes]\n\n        if self.m_charbuff[offset + encoded_bytes] != 0:\n            raise ResParserError(\n                \"UTF-8 String is not null terminated! At offset={}\".format(\n                    offset\n                )\n            )\n\n        return self._decode_bytes(data, 'utf-8', str_len)\n\n    def _decode16(self, offset: int) -> str:\n        \"\"\"\n        Decode an UTF-16 String at the given offset\n\n        :param offset: offset of the string inside the data\n        :raises ResParserError: if string is not null terminated\n\n        :return: the decoded string\n        \"\"\"\n        str_len, skip = self._decode_length(offset, 2)\n        offset += skip\n\n        # The len is the string len in utf-16 units\n        encoded_bytes = str_len * 2\n\n        # Two checks should happen here:\n        # a) offset + encoded_bytes surpassing the string_pool length and\n        # b) non-null terminated strings which should be rejected\n        # platform/frameworks/base/libs/androidfw/ResourceTypes.cpp#789\n        if len(self.m_charbuff) < (offset + encoded_bytes):\n            logger.warning(\n                f\"String size: {offset + encoded_bytes} is exceeding string pool size. Returning empty string.\"\n            )\n            return \"\"\n\n        data = self.m_charbuff[offset : offset + encoded_bytes]\n\n        if (\n            self.m_charbuff[\n                offset + encoded_bytes : offset + encoded_bytes + 2\n            ]\n            != b\"\\x00\\x00\"\n        ):\n            raise ResParserError(\n                \"UTF-16 String is not null terminated! At offset={}\".format(\n                    offset\n                )\n            )\n\n        return self._decode_bytes(data, 'utf-16', str_len)\n\n    @staticmethod\n    def _decode_bytes(data: bytes, encoding: str, str_len: int) -> str:\n        \"\"\"\n        Generic decoding with length check.\n        The string is decoded from bytes with the given encoding, then the length\n        of the string is checked.\n        The string is decoded using the \"replace\" method.\n\n        :param data: bytes\n        :param encoding: encoding name (\"utf-8\" or \"utf-16\")\n        :param str_len: length of the decoded string\n        :return: the decoded bytes\n        \"\"\"\n        string = data.decode(encoding, 'replace')\n        if len(string) != str_len:\n            logger.warning(\"invalid decoded string length\")\n        return string\n\n    def _decode_length(self, offset: int, sizeof_char: int) -> tuple[int, int]:\n        \"\"\"\n        Generic Length Decoding at offset of string\n\n        The method works for both 8 and 16 bit Strings.\n        Length checks are enforced:\n        * 8 bit strings: maximum of 0x7FFF bytes (See\n        http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/ResourceTypes.cpp#692)\n        * 16 bit strings: maximum of 0x7FFFFFF bytes (See\n        http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/ResourceTypes.cpp#670)\n\n        :param offset: offset into the string data section of the beginning of\n        the string\n        :param sizeof_char: number of bytes per char (1 = 8bit, 2 = 16bit)\n        :returns: tuple of (length, read bytes)\n        \"\"\"\n        sizeof_2chars = sizeof_char << 1\n        fmt = \"<2{}\".format('B' if sizeof_char == 1 else 'H')\n        highbit = 0x80 << (8 * (sizeof_char - 1))\n\n        length1, length2 = unpack(\n            fmt, self.m_charbuff[offset : (offset + sizeof_2chars)]\n        )\n\n        if (length1 & highbit) != 0:\n            length = ((length1 & ~highbit) << (8 * sizeof_char)) | length2\n            size = sizeof_2chars\n        else:\n            length = length1\n            size = sizeof_char\n\n        # These are true asserts, as the size should never be less than the values\n        if sizeof_char == 1:\n            assert (\n                length <= 0x7FFF\n            ), \"length of UTF-8 string is too large! At offset={}\".format(\n                offset\n            )\n        else:\n            assert (\n                length <= 0x7FFFFFFF\n            ), \"length of UTF-16 string is too large!  At offset={}\".format(\n                offset\n            )\n\n        return length, size\n\n    def show(self) -> None:\n        \"\"\"\n        Print some information on stdout about the string table\n        \"\"\"\n        print(\n            \"StringBlock(stringsCount=0x%x, \"\n            \"stringsOffset=0x%x, \"\n            \"stylesCount=0x%x, \"\n            \"stylesOffset=0x%x, \"\n            \"flags=0x%x\"\n            \")\"\n            % (\n                self.stringCount,\n                self.stringsOffset,\n                self.styleCount,\n                self.stylesOffset,\n                self.flags,\n            )\n        )\n\n        if self.stringCount > 0:\n            print()\n            print(\"String Table: \")\n            for i, s in enumerate(self):\n                print(\"{:08d} {}\".format(i, repr(s)))\n\n        if self.styleCount > 0:\n            print()\n            print(\"Styles Table: \")\n            for i in range(self.styleCount):\n                print(\"{:08d} {}\".format(i, repr(self.getStyle(i))))\n\n\nclass AXMLParser:\n    \"\"\"\n    `AXMLParser` reads through all chunks in the AXML file\n    and implements a state machine to return information about\n    the current chunk, which can then be read by [AXMLPrinter][androguard.core.axml.AXMLPrinter].\n\n    An AXML file is a file which contains multiple chunks of data, defined\n    by the `ResChunk_header`.\n    There is no real file magic but as the size of the first header is fixed\n    and the `type` of the `ResChunk_header` is set to `RES_XML_TYPE`, a file\n    will usually start with `0x03000800`.\n    But there are several examples where the `type` is set to something\n    else, probably in order to fool parsers.\n\n    Typically the `AXMLParser` is used in a loop which terminates if `m_event` is set to `END_DOCUMENT`.\n    You can use the `next()` function to get the next chunk.\n    Note that not all chunk types are yielded from the iterator! Some chunks are processed in\n    the `AXMLParser` only.\n    The parser will set [is_valid][androguard.core.axml.AXMLParser.is_valid] to `False` if it parses something not valid.\n    Messages what is wrong are logged.\n\n    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#563\n    \"\"\"\n\n    def __init__(self, raw_buff: bytes) -> None:\n        logger.debug(\"AXMLParser\")\n\n        self._reset()\n\n        self._valid = True\n        self.axml_tampered = False\n        self.buff = io.BufferedReader(io.BytesIO(raw_buff))\n        self.buff_size = self.buff.raw.getbuffer().nbytes\n        self.packerwarning = False\n\n        # Minimum is a single ARSCHeader, which would be a strange edge case...\n        if self.buff_size < 8:\n            logger.error(\n                \"Filesize is too small to be a valid AXML file! Filesize: {}\".format(\n                    self.buff_size\n                )\n            )\n            self._valid = False\n            return\n\n        # This would be even stranger, if an AXML file is larger than 4GB...\n        # But this is not possible as the maximum chunk size is a unsigned 4 byte int.\n        if self.buff_size > 0xFFFFFFFF:\n            logger.error(\n                \"Filesize is too large to be a valid AXML file! Filesize: {}\".format(\n                    self.buff_size\n                )\n            )\n            self._valid = False\n            return\n\n        try:\n            axml_header = ARSCHeader(self.buff)\n            logger.debug(\"FIRST HEADER {}\".format(axml_header))\n        except ResParserError as e:\n            logger.error(\"Error parsing first resource header: %s\", e)\n            self._valid = False\n            return\n\n        self.filesize = axml_header.size\n\n        if axml_header.header_size == 28024:\n            # Can be a common error: the file is not an AXML but a plain XML\n            # The file will then usually start with '<?xm' / '3C 3F 78 6D'\n            logger.warning(\n                \"Header size is 28024! Are you trying to parse a plain XML file?\"\n            )\n\n        if axml_header.header_size != 8:\n            logger.error(\n                \"This does not look like an AXML file. header size does not equal 8! header size = {}\".format(\n                    axml_header.header_size\n                )\n            )\n            self._valid = False\n            return\n\n        if self.filesize > self.buff_size:\n            logger.error(\n                \"This does not look like an AXML file. Declared filesize does not match real size: {} vs {}\".format(\n                    self.filesize, self.buff_size\n                )\n            )\n            self._valid = False\n            return\n\n        if self.filesize < self.buff_size:\n            # The file can still be parsed up to the point where the chunk should end.\n            self.axml_tampered = True\n            logger.warning(\n                \"Declared filesize ({}) is smaller than total file size ({}). \"\n                \"Was something appended to the file? Trying to parse it anyways.\".format(\n                    self.filesize, self.buff_size\n                )\n            )\n\n        # Not that severe of an error, we have plenty files where this is not\n        # set correctly\n        if axml_header.type != RES_XML_TYPE:\n            self.axml_tampered = True\n            logger.warning(\n                \"AXML file has an unusual resource type! \"\n                \"Malware likes to to such stuff to anti androguard! \"\n                \"But we try to parse it anyways. Resource Type: 0x{:04x}\".format(\n                    axml_header.type\n                )\n            )\n\n        # Now we parse the STRING POOL\n        try:\n            header = ARSCHeader(self.buff, expected_type=RES_STRING_POOL_TYPE)\n            logger.debug(\"STRING_POOL {}\".format(header))\n        except ResParserError as e:\n            logger.error(\n                \"Error parsing resource header of string pool: {}\".format(e)\n            )\n            self._valid = False\n            return\n\n        if header.header_size != 0x1C:\n            logger.error(\n                \"This does not look like an AXML file. String chunk header size does not equal 28! header size = {}\".format(\n                    header.header_size\n                )\n            )\n            self._valid = False\n            return\n\n        self.sb = StringBlock(self.buff, header)\n\n        self.buff.seek(axml_header.header_size + header.size)\n\n        # Stores resource ID mappings, if any\n        self.m_resourceIDs = []\n\n        # Store a list of prefix/uri mappings encountered\n        self.namespaces = []\n\n    def is_valid(self) -> bool:\n        \"\"\"\n        Get the state of the [AXMLPrinter][androguard.core.axml.AXMLPrinter].\n        if an error happend somewhere in the process of parsing the file,\n        this flag is set to `False`.\n\n        :returns: `True` if the `AXMLPrinter` finished parsing, or `False` if an error occurred\n        \"\"\"\n        logger.debug(self._valid)\n        return self._valid\n\n    def _reset(self):\n        self.m_event = -1\n        self.m_lineNumber = -1\n        self.m_name = -1\n        self.m_namespaceUri = -1\n        self.m_attributes = []\n        self.m_idAttribute = -1\n        self.m_classAttribute = -1\n        self.m_styleAttribute = -1\n\n    def __next__(self):\n        self._do_next()\n        return self.m_event\n\n    def _do_next(self):\n        logger.debug(\"M_EVENT {}\".format(self.m_event))\n\n        if self.m_event == END_DOCUMENT:\n            return\n\n        self._reset()\n        while self._valid:\n            # Stop at the declared filesize or at the end of the file\n            if self.buff.tell() == self.filesize:\n                self.m_event = END_DOCUMENT\n                break\n\n            # Again, we read an ARSCHeader\n            try:\n                possible_types = {256, 257, 258, 259, 260, 384}\n                h = ARSCHeader(self.buff, possible_types=possible_types)\n                logger.debug(\"NEXT HEADER {}\".format(h))\n            except ResParserError as e:\n                logger.error(\"Error parsing resource header: {}\".format(e))\n                self._valid = False\n                return\n\n            # Special chunk: Resource Map. This chunk might be contained inside\n            # the file, after the string pool.\n            if h.type == RES_XML_RESOURCE_MAP_TYPE:\n                logger.debug(\"AXML contains a RESOURCE MAP\")\n                # Check size: < 8 bytes mean that the chunk is not complete\n                # Should be aligned to 4 bytes.\n                if h.size < 8 or (h.size % 4) != 0:\n                    logger.error(\n                        \"Invalid chunk size in chunk XML_RESOURCE_MAP\"\n                    )\n                    self._valid = False\n                    return\n\n                for i in range((h.size - h.header_size) // 4):\n                    self.m_resourceIDs.append(\n                        unpack('<L', self.buff.read(4))[0]\n                    )\n\n                continue\n\n            # Parse now the XML chunks.\n            # unknown chunk types might cause problems, but we can skip them!\n            if (\n                h.type < RES_XML_FIRST_CHUNK_TYPE\n                or h.type > RES_XML_LAST_CHUNK_TYPE\n            ):\n                # h.size is the size of the whole chunk including the header.\n                # We read already 8 bytes of the header, thus we need to\n                # subtract them.\n                logger.error(\n                    \"Not a XML resource chunk type: 0x{:04x}. Skipping {} bytes\".format(\n                        h.type, h.size\n                    )\n                )\n                self.buff.seek(h.end)\n                continue\n\n            # Check that we read a correct header\n            if h.header_size != 0x10:\n                logger.error(\n                    \"XML Resource Type Chunk header size does not match 16! \"\n                    \"At chunk type 0x{:04x}, declared header size=0x{:04x}, chunk size=0x{:04x}\".format(\n                        h.type, h.header_size, h.size\n                    )\n                )\n                self.buff.seek(h.end)\n                continue\n\n            # Line Number of the source file, only used as meta information\n            (self.m_lineNumber,) = unpack('<L', self.buff.read(4))\n\n            # Comment_Index (usually 0xFFFFFFFF)\n            (self.m_comment_index,) = unpack('<L', self.buff.read(4))\n\n            if self.m_comment_index != 0xFFFFFFFF and h.type in [\n                RES_XML_START_NAMESPACE_TYPE,\n                RES_XML_END_NAMESPACE_TYPE,\n            ]:\n                logger.warning(\n                    \"Unhandled Comment at namespace chunk: '{}'\".format(\n                        self.sb[self.m_comment_index]\n                    )\n                )\n\n            if h.type == RES_XML_START_NAMESPACE_TYPE:\n                (prefix,) = unpack('<L', self.buff.read(4))\n                (uri,) = unpack('<L', self.buff.read(4))\n\n                s_prefix = self.sb[prefix]\n                s_uri = self.sb[uri]\n\n                logger.debug(\n                    \"Start of Namespace mapping: prefix {}: '{}' --> uri {}: '{}'\".format(\n                        prefix, s_prefix, uri, s_uri\n                    )\n                )\n\n                if s_uri == '':\n                    logger.warning(\n                        \"Namespace prefix '{}' resolves to empty URI. \"\n                        \"This might be a packer.\".format(s_prefix)\n                    )\n\n                if (prefix, uri) in self.namespaces:\n                    logger.debug(\n                        \"Namespace mapping ({}, {}) already seen! \"\n                        \"This is usually not a problem but could indicate packers or broken AXML compilers.\".format(\n                            prefix, uri\n                        )\n                    )\n                self.namespaces.append((prefix, uri))\n\n                # We can continue with the next chunk, as we store the namespace\n                # mappings for each tag\n                continue\n\n            if h.type == RES_XML_END_NAMESPACE_TYPE:\n                # END_PREFIX contains again prefix and uri field\n                (prefix,) = unpack('<L', self.buff.read(4))\n                (uri,) = unpack('<L', self.buff.read(4))\n\n                # We remove the last namespace mapping matching\n                if (prefix, uri) in self.namespaces:\n                    self.namespaces.remove((prefix, uri))\n                else:\n                    logger.warning(\n                        \"Reached a NAMESPACE_END without having the namespace stored before? \"\n                        \"Prefix ID: {}, URI ID: {}\".format(prefix, uri)\n                    )\n\n                # We can continue with the next chunk, as we store the namespace\n                # mappings for each tag\n                continue\n\n            # START_TAG is the start of a new tag.\n            if h.type == RES_XML_START_ELEMENT_TYPE:\n                # The TAG consists of some fields:\n                # * (chunk_size, line_number, comment_index - we read before)\n                # * namespace_uri\n                # * name\n                # * flags\n                # * attribute_count\n                # * class_attribute\n                # After that, there are two lists of attributes, 20 bytes each\n\n                # Namespace URI (String ID)\n                (self.m_namespaceUri,) = unpack('<L', self.buff.read(4))\n                # Name of the Tag (String ID)\n                (self.m_name,) = unpack('<L', self.buff.read(4))\n                self.at_start, self.at_size = unpack('<HH', self.buff.read(4))\n                # Attribute Count\n                (attributeCount,) = unpack('<L', self.buff.read(4))\n                # Class Attribute\n                (self.m_classAttribute,) = unpack('<L', self.buff.read(4))\n\n                self.m_idAttribute = (attributeCount >> 16) - 1\n                self.m_attribute_count = attributeCount & 0xFFFF\n                self.m_styleAttribute = (self.m_classAttribute >> 16) - 1\n                self.m_classAttribute = (self.m_classAttribute & 0xFFFF) - 1\n\n                # Now, we parse the attributes.\n                # Each attribute has 5 fields of 4 byte\n                for i in range(0, self.m_attribute_count):\n                    # Each field is linearly parsed into the array\n                    # Each Attribute contains:\n                    # * Namespace URI (String ID)\n                    # * Name (String ID)\n                    # * Value\n                    # * Type\n                    # * Data\n                    for j in range(0, ATTRIBUTE_LENGTH):\n                        self.m_attributes.append(\n                            unpack('<L', self.buff.read(4))[0]\n                        )\n                    if self.at_size != 20:\n                        self.buff.read(self.at_size - 20)\n\n                # Then there are class_attributes\n                for i in range(\n                    ATTRIBUTE_IX_VALUE_TYPE,\n                    len(self.m_attributes),\n                    ATTRIBUTE_LENGTH,\n                ):\n                    self.m_attributes[i] = self.m_attributes[i] >> 24\n\n                self.m_event = START_TAG\n                break\n\n            if h.type == RES_XML_END_ELEMENT_TYPE:\n                (self.m_namespaceUri,) = unpack('<L', self.buff.read(4))\n                (self.m_name,) = unpack('<L', self.buff.read(4))\n\n                self.m_event = END_TAG\n                break\n\n            if h.type == RES_XML_CDATA_TYPE:\n                # The CDATA field is like an attribute.\n                # It contains an index into the String pool\n                # as well as a typed value.\n                # usually, this typed value is set to UNDEFINED\n\n                # ResStringPool_ref data --> uint32_t index\n                (self.m_name,) = unpack('<L', self.buff.read(4))\n\n                # Res_value typedData:\n                # uint16_t size\n                # uint8_t res0 -> always zero\n                # uint8_t dataType\n                # uint32_t data\n                # For now, we ingore these values\n                size, res0, dataType, data = unpack(\"<HBBL\", self.buff.read(8))\n\n                logger.debug(\n                    \"found a CDATA Chunk: \"\n                    \"index={: 6d}, size={: 4d}, res0={: 4d}, dataType={: 4d}, data={: 4d}\".format(\n                        self.m_name, size, res0, dataType, data\n                    )\n                )\n\n                self.m_event = TEXT\n                break\n\n            # Still here? Looks like we read an unknown XML header, try to skip it...\n            logger.warning(\n                \"Unknown XML Chunk: 0x{:04x}, skipping {} bytes.\".format(\n                    h.type, h.size\n                )\n            )\n            self.buff.seek(h.end)\n\n    @property\n    def name(self) -> str:\n        \"\"\"\n        Return the String associated with the tag name\n\n        :returns: the string\n        \"\"\"\n        if self.m_name == -1 or (\n            self.m_event != START_TAG and self.m_event != END_TAG\n        ):\n            return ''\n\n        return self.sb[self.m_name]\n\n    @property\n    def comment(self) -> Union[str, None]:\n        \"\"\"\n        Return the comment at the current position or None if no comment is given\n\n        This works only for Tags, as the comments of Namespaces are silently dropped.\n        Currently, there is no way of retrieving comments of namespaces.\n\n        :returns: the comment string, or None if no comment exists\n        \"\"\"\n        if self.m_comment_index == 0xFFFFFFFF:\n            return None\n\n        return self.sb[self.m_comment_index]\n\n    @property\n    def namespace(self) -> str:\n        \"\"\"\n        Return the Namespace URI (if any) as a String for the current tag\n\n        :returns: the namespace uri, or empty if namespace does not exist\n        \"\"\"\n        if self.m_name == -1 or (\n            self.m_event != START_TAG and self.m_event != END_TAG\n        ):\n            return ''\n\n        # No Namespace\n        if self.m_namespaceUri == 0xFFFFFFFF:\n            return ''\n\n        return self.sb[self.m_namespaceUri]\n\n    @property\n    def nsmap(self) -> dict[str, str]:\n        \"\"\"\n        Returns the current namespace mapping as a dictionary\n\n        there are several problems with the map and we try to guess a few\n        things here:\n\n        1) a URI can be mapped by many prefixes, so it is to decide which one to take\n        2) a prefix might map to an empty string (some packers)\n        3) uri+prefix mappings might be included several times\n        4) prefix might be empty\n\n        :returns: the namespace mapping dictionary\n        \"\"\"\n\n        NSMAP = dict()\n        # solve 3) by using a set\n        for k, v in set(self.namespaces):\n            s_prefix = self.sb[k]\n            s_uri = self.sb[v]\n            # Solve 2) & 4) by not including\n            if s_uri != \"\" and s_prefix != \"\":\n                # solve 1) by using the last one in the list\n                NSMAP[s_prefix] = s_uri.strip()\n\n        return NSMAP\n\n    @property\n    def text(self) -> str:\n        \"\"\"\n        Return the String assosicated with the current text\n\n        :returns: the string associated with the current text\n        \"\"\"\n        if self.m_name == -1 or self.m_event != TEXT:\n            return ''\n\n        return self.sb[self.m_name]\n\n    def getName(self) -> str:\n        \"\"\"\n        Legacy only!\n        use `name` attribute instead\n        \"\"\"\n        return self.name\n\n    def getText(self) -> str:\n        \"\"\"\n        Legacy only!\n        use `text` attribute instead\n        \"\"\"\n        return self.text\n\n    def getPrefix(self) -> str:\n        \"\"\"\n        Legacy only!\n        use `namespace` attribute instead\n        \"\"\"\n        return self.namespace\n\n    def _get_attribute_offset(self, index: int):\n        \"\"\"\n        Return the start inside the m_attributes array for a given attribute\n        \"\"\"\n        if self.m_event != START_TAG:\n            logger.warning(\"Current event is not START_TAG.\")\n\n        offset = index * ATTRIBUTE_LENGTH\n        if offset >= len(self.m_attributes):\n            logger.warning(\"Invalid attribute index\")\n\n        return offset\n\n    def getAttributeCount(self) -> int:\n        \"\"\"\n        Return the number of Attributes for a Tag\n        or -1 if not in a tag\n\n        :returns: the number of attributes\n        \"\"\"\n        if self.m_event != START_TAG:\n            return -1\n\n        return self.m_attribute_count\n\n    def getAttributeUri(self, index:int) -> int:\n        \"\"\"\n        Returns the numeric ID for the namespace URI of an attribute\n\n        :returns: the namespace URI numeric id\n        \"\"\"\n        logger.debug(index)\n\n        offset = self._get_attribute_offset(index)\n        uri = self.m_attributes[offset + ATTRIBUTE_IX_NAMESPACE_URI]\n\n        return uri\n\n    def getAttributeNamespace(self, index:int) -> str:\n        \"\"\"\n        Return the Namespace URI (if any) for the attribute\n\n        :returns: the attribute uri, or empty string if no namespace\n        \"\"\"\n        logger.debug(index)\n\n        uri = self.getAttributeUri(index)\n\n        # No Namespace\n        if uri == 0xFFFFFFFF:\n            return ''\n\n        return self.sb[uri]\n\n    def getAttributeName(self, index:int) -> str:\n        \"\"\"\n        Returns the String which represents the attribute name\n\n        :returns: the attribute name\n        \"\"\"\n        logger.debug(index)\n        offset = self._get_attribute_offset(index)\n        name = self.m_attributes[offset + ATTRIBUTE_IX_NAME]\n\n        res = self.sb[name]\n        # If the result is a (null) string, we need to look it up.\n        if name < len(self.m_resourceIDs):\n            attr = self.m_resourceIDs[name]\n            if attr in public.SYSTEM_RESOURCES['attributes']['inverse']:\n                res = public.SYSTEM_RESOURCES['attributes']['inverse'][\n                    attr\n                ].replace(\"_\", \":\")\n                if res != self.sb[name]:\n                    self.packerwarning = True\n\n        if not res or res == \":\":\n            # Attach the HEX Number, so for multiple missing attributes we do not run\n            # into problems.\n            res = 'android:UNKNOWN_SYSTEM_ATTRIBUTE_{:08x}'.format(attr)\n        return res\n\n    def getAttributeValueType(self, index: int):\n        \"\"\"\n        Return the type of the attribute at the given index\n\n        :param index: index of the attribute\n        \"\"\"\n        logger.debug(index)\n\n        offset = self._get_attribute_offset(index)\n        return self.m_attributes[offset + ATTRIBUTE_IX_VALUE_TYPE]\n\n    def getAttributeValueData(self, index: int):\n        \"\"\"\n        Return the data of the attribute at the given index\n\n        :param index: index of the attribute\n        \"\"\"\n        logger.debug(index)\n\n        offset = self._get_attribute_offset(index)\n        return self.m_attributes[offset + ATTRIBUTE_IX_VALUE_DATA]\n\n    def getAttributeValue(self, index: int) -> str:\n        \"\"\"\n        This function is only used to look up strings\n        All other work is done by\n        [format_value][androguard.core.axml.format_value]\n        # FIXME should unite those functions\n        :param index: index of the attribute\n        :returns: the string\n        \"\"\"\n        logger.debug(index)\n\n        offset = self._get_attribute_offset(index)\n        valueType = self.m_attributes[offset + ATTRIBUTE_IX_VALUE_TYPE]\n        if valueType == TYPE_STRING:\n            valueString = self.m_attributes[offset + ATTRIBUTE_IX_VALUE_STRING]\n            return self.sb[valueString]\n        return ''\n\n\ndef format_value(\n    _type: int, _data: int, lookup_string=lambda ix: \"<string>\"\n) -> str:\n    \"\"\"\n    Format a value based on type and data.\n    By default, no strings are looked up and `\"<string>\"` is returned.\n    You need to define `lookup_string` in order to actually lookup strings from\n    the string table.\n\n    :param _type: The numeric type of the value\n    :param _data: The numeric data of the value\n    :param lookup_string: A function how to resolve strings from integer IDs\n    :returns: the formatted string\n    \"\"\"\n\n    # Function to prepend android prefix for attributes/references from the\n    # android library\n    fmt_package = lambda x: \"android:\" if x >> 24 == 1 else \"\"\n\n    # Function to represent integers\n    fmt_int = lambda x: (0x7FFFFFFF & x) - 0x80000000 if x > 0x7FFFFFFF else x\n\n    if _type == TYPE_STRING:\n        return lookup_string(_data)\n\n    elif _type == TYPE_ATTRIBUTE:\n        return \"?{}{:08X}\".format(fmt_package(_data), _data)\n\n    elif _type == TYPE_REFERENCE:\n        return \"@{}{:08X}\".format(fmt_package(_data), _data)\n\n    elif _type == TYPE_FLOAT:\n        return \"%f\" % unpack(\"=f\", pack(\"=L\", _data))[0]\n\n    elif _type == TYPE_INT_HEX:\n        return \"0x%08X\" % _data\n\n    elif _type == TYPE_INT_BOOLEAN:\n        if _data == 0:\n            return \"false\"\n        return \"true\"\n\n    elif _type == TYPE_DIMENSION:\n        return \"{:f}{}\".format(\n            complexToFloat(_data), DIMENSION_UNITS[_data & COMPLEX_UNIT_MASK]\n        )\n\n    elif _type == TYPE_FRACTION:\n        return \"{:f}{}\".format(\n            complexToFloat(_data) * 100,\n            FRACTION_UNITS[_data & COMPLEX_UNIT_MASK],\n        )\n\n    elif TYPE_FIRST_COLOR_INT <= _type <= TYPE_LAST_COLOR_INT:\n        return \"#%08X\" % _data\n\n    elif TYPE_FIRST_INT <= _type <= TYPE_LAST_INT:\n        return \"%d\" % fmt_int(_data)\n\n    return \"<0x{:X}, type 0x{:02X}>\".format(_data, _type)\n\n\nclass AXMLPrinter:\n    \"\"\"\n    Converter for AXML Files into a lxml ElementTree, which can easily be\n    converted into XML.\n\n    A Reference Implementation can be found at http://androidxref.com/9.0.0_r3/xref/frameworks/base/tools/aapt/XMLNode.cpp\n    \"\"\"\n\n    __charrange = None\n    __replacement = None\n\n    def __init__(self, raw_buff: bytes) -> bytes:\n        logger.debug(\"AXMLPrinter\")\n\n        self.axml = AXMLParser(raw_buff)\n\n        self.root = None\n        self.packerwarning = False\n        cur = []\n\n        while self.axml.is_valid():\n            _type = next(self.axml)\n            logger.debug(\"DEBUG ARSC TYPE {}\".format(_type))\n\n            if _type == START_TAG:\n                if not self.axml.name:  # Check if the name is empty\n                    logger.debug(\"Empty tag name, skipping to next element\")\n                    continue  # Skip this iteration\n                uri = self._print_namespace(self.axml.namespace)\n                uri, name = self._fix_name(uri, self.axml.name)\n                tag = \"{}{}\".format(uri, name)\n\n                comment = self.axml.comment\n                if comment:\n                    if self.root is None:\n                        logger.warning(\n                            \"Can not attach comment with content '{}' without root!\".format(\n                                comment\n                            )\n                        )\n                    else:\n                        cur[-1].append(etree.Comment(comment))\n\n                logger.debug(\n                    \"START_TAG: {} (line={})\".format(\n                        tag, self.axml.m_lineNumber\n                    )\n                )\n\n                try:\n                    elem = etree.Element(tag, nsmap=self.axml.nsmap)\n                except ValueError as e:\n                    logger.error(e)\n                    # nsmap= {'<!--': 'http://schemas.android.com/apk/res/android'} | pull/1056\n                    if 'Invalid namespace prefix' in str(e):\n                        corrected_nsmap = self.clean_and_replace_nsmap(\n                            self.axml.nsmap, str(e).split(\"'\")[1]\n                        )\n                        elem = etree.Element(tag, nsmap=corrected_nsmap)\n                    else:\n                        raise\n\n                for i in range(self.axml.getAttributeCount()):\n                    uri = self._print_namespace(\n                        self.axml.getAttributeNamespace(i)\n                    )\n                    uri, name = self._fix_name(\n                        uri, self.axml.getAttributeName(i)\n                    )\n                    value = self._fix_value(self._get_attribute_value(i))\n\n                    logger.debug(\n                        \"found an attribute: {}{}='{}'\".format(\n                            uri, name, value.encode(\"utf-8\")\n                        )\n                    )\n                    if \"{}{}\".format(uri, name) in elem.attrib:\n                        logger.warning(\n                            \"Duplicate attribute '{}{}'! Will overwrite!\".format(\n                                uri, name\n                            )\n                        )\n                    elem.set(\"{}{}\".format(uri, name), value)\n\n                if self.root is None:\n                    self.root = elem\n                else:\n                    if not cur:\n                        # looks like we lost the root?\n                        logger.error(\n                            \"No more elements available to attach to! Is the XML malformed?\"\n                        )\n                        break\n                    cur[-1].append(elem)\n                cur.append(elem)\n\n            if _type == END_TAG:\n                if not cur:\n                    logger.warning(\n                        \"Too many END_TAG! No more elements available to attach to!\"\n                    )\n                else:\n                    if not self.axml.name:  # Check if the name is empty\n                        logger.debug(\n                            \"Empty tag name at END_TAG, skipping to next element\"\n                        )\n                        continue\n\n                name = self.axml.name\n                uri = self._print_namespace(self.axml.namespace)\n                tag = \"{}{}\".format(uri, name)\n                if cur[-1].tag != tag:\n                    logger.warning(\n                        \"Closing tag '{}' does not match current stack! At line number: {}. Is the XML malformed?\".format(\n                            self.axml.name, self.axml.m_lineNumber\n                        )\n                    )\n                cur.pop()\n            if _type == TEXT:\n                logger.debug(\"TEXT for {}\".format(cur[-1]))\n                cur[-1].text = self.axml.text\n            if _type == END_DOCUMENT:\n                # Check if all namespace mappings are closed\n                if len(self.axml.namespaces) > 0:\n                    logger.warning(\n                        \"Not all namespace mappings were closed! Malformed AXML?\"\n                    )\n                break\n\n    def clean_and_replace_nsmap(self, nsmap, invalid_prefix):\n        correct_prefix = 'android'\n        corrected_nsmap = {}\n        for prefix, uri in nsmap.items():\n            if prefix.startswith(invalid_prefix):\n                corrected_nsmap[correct_prefix] = uri\n            else:\n                corrected_nsmap[prefix] = uri\n        return corrected_nsmap\n\n    def get_buff(self) -> bytes:\n        \"\"\"\n        Returns the raw XML file without prettification applied.\n\n        :returns: bytes, encoded as UTF-8\n        \"\"\"\n        return self.get_xml(pretty=False)\n\n    def get_xml(self, pretty: bool = True) -> bytes:\n        \"\"\"\n        Get the XML as an UTF-8 string\n\n        :returns: bytes encoded as UTF-8\n        \"\"\"\n        return etree.tostring(self.root, encoding=\"utf-8\", pretty_print=pretty)\n\n    def get_xml_obj(self) -> etree.Element:\n        \"\"\"\n        Get the XML as an ElementTree object\n\n        :returns: `lxml.etree.Element` object\n        \"\"\"\n        return self.root\n\n    def is_valid(self) -> bool:\n        \"\"\"\n        Return the state of the [AXMLParser][androguard.core.axml.AXMLParser].\n        If this flag is set to `False`, the parsing has failed, thus\n        the resulting XML will not work or will even be empty.\n\n        :returns: `True` if the `AXMLParser` finished parsing, or `False` if an error occurred\n        \"\"\"\n        return self.axml.is_valid()\n\n    def is_packed(self) -> bool:\n        \"\"\"\n        Returns True if the AXML is likely to be packed\n\n        Packers do some weird stuff and we try to detect it.\n        Sometimes the files are not packed but simply broken or compiled with\n        some broken version of a tool.\n        Some file corruption might also be appear to be a packed file.\n\n        :returns: True if packer detected, False otherwise\n        \"\"\"\n        return self.packerwarning or self.axml.packerwarning\n\n    def _get_attribute_value(self, index: int):\n        \"\"\"\n        Wrapper function for format_value to resolve the actual value of an attribute in a tag\n        :param index: index of the current attribute\n        :return: formatted value\n        \"\"\"\n        _type = self.axml.getAttributeValueType(index)\n        _data = self.axml.getAttributeValueData(index)\n\n        return format_value(\n            _type, _data, lambda _: self.axml.getAttributeValue(index)\n        )\n\n    def _fix_name(self, prefix, name) -> tuple[str, str]:\n        \"\"\"\n        Apply some fixes to element named and attribute names.\n        Try to get conform to:\n        > Like element names, attribute names are case-sensitive and must start with a letter or underscore.\n        > The rest of the name can contain letters, digits, hyphens, underscores, and periods.\n        See: <https://msdn.microsoft.com/en-us/library/ms256152(v=vs.110).aspx>\n\n        This function tries to fix some broken namespace mappings.\n        In some cases, the namespace prefix is inside the name and not in the prefix field.\n        Then, the tag name will usually look like 'android:foobar'.\n        If and only if the namespace prefix is inside the namespace mapping and the actual prefix field is empty,\n        we will strip the prefix from the attribute name and return the fixed prefix URI instead.\n        Otherwise replacement rules will be applied.\n\n        The replacement rules work in that way, that all unwanted characters are replaced by underscores.\n        In other words, all characters except the ones listed above are replaced.\n\n        :param name: Name of the attribute or tag\n        :param prefix: The existing prefix uri as found in the AXML chunk\n        :return: a fixed version of prefix and name\n        \"\"\"\n        if not name[0].isalpha() and name[0] != \"_\":\n            logger.warning(\n                \"Invalid start for name '{}'. \"\n                \"XML name must start with a letter.\".format(name)\n            )\n            self.packerwarning = True\n            name = \"_{}\".format(name)\n        if (\n            name.startswith(\"android:\")\n            and prefix == ''\n            and 'android' in self.axml.nsmap\n        ):\n            # Seems be a common thing...\n            logger.info(\n                \"Name '{}' starts with 'android:' prefix but 'android' is a known prefix. Replacing prefix.\".format(\n                    name\n                )\n            )\n            prefix = self._print_namespace(self.axml.nsmap['android'])\n            name = name[len(\"android:\") :]\n            # It looks like this is some kind of packer... Not sure though.\n            self.packerwarning = True\n        elif \":\" in name and prefix == '':\n            self.packerwarning = True\n            embedded_prefix, new_name = name.split(\":\", 1)\n            if embedded_prefix in self.axml.nsmap:\n                logger.info(\n                    \"Prefix '{}' is in namespace mapping, assume that it is a prefix.\"\n                )\n                prefix = self._print_namespace(\n                    self.axml.nsmap[embedded_prefix]\n                )\n                name = new_name\n            else:\n                # Print out an extra warning\n                logger.warning(\n                    \"Confused: name contains a unknown namespace prefix: '{}'. \"\n                    \"This is either a broken AXML file or some attempt to break stuff.\".format(\n                        name\n                    )\n                )\n        if not re.match(r\"^[a-zA-Z0-9._-]*$\", name):\n            logger.warning(\n                \"Name '{}' contains invalid characters!\".format(name)\n            )\n            self.packerwarning = True\n            name = re.sub(r\"[^a-zA-Z0-9._-]\", \"_\", name)\n\n        return prefix, name\n\n    def _fix_value(self, value):\n        \"\"\"\n        Return a cleaned version of a value\n        according to the specification:\n        > Char\t   ::=   \t#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]\n\n        See <https://www.w3.org/TR/xml/#charsets>\n\n        :param value: a value to clean\n        :return: the cleaned value\n        \"\"\"\n        if not self.__charrange or not self.__replacement:\n            self.__charrange = re.compile(\n                '^[\\u0020-\\uD7FF\\u0009\\u000A\\u000D\\uE000-\\uFFFD\\U00010000-\\U0010FFFF]*$'\n            )\n            self.__replacement = re.compile(\n                '[^\\u0020-\\uD7FF\\u0009\\u000A\\u000D\\uE000-\\uFFFD\\U00010000-\\U0010FFFF]'\n            )\n\n        # Reading string until \\x00. This is the same as aapt does.\n        if \"\\x00\" in value:\n            self.packerwarning = True\n            logger.warning(\n                \"Null byte found in attribute value at position {}: \"\n                \"Value(hex): '{}'\".format(\n                    value.find(\"\\x00\"), binascii.hexlify(value.encode(\"utf-8\"))\n                )\n            )\n            value = value[: value.find(\"\\x00\")]\n\n        if not self.__charrange.match(value):\n            logger.warning(\n                \"Invalid character in value found. Replacing with '_'.\"\n            )\n            self.packerwarning = True\n            value = self.__replacement.sub('_', value)\n        return value\n\n    def _print_namespace(self, uri):\n        if uri != \"\":\n            uri = \"{{{}}}\".format(uri)\n        return uri\n\n\n# See http://aospxref.com/android-13.0.0_r3/xref/frameworks/native/include/android/configuration.h#56\n\nACONFIGURATION_ORIENTATION_ANY = 0x0000\nACONFIGURATION_ORIENTATION_PORT = 0x0001\nACONFIGURATION_ORIENTATION_LAND = 0x0002\nACONFIGURATION_ORIENTATION_SQUARE = 0x0003\nACONFIGURATION_TOUCHSCREEN_ANY = 0x0000\nACONFIGURATION_TOUCHSCREEN_NOTOUCH = 0x0001\nACONFIGURATION_TOUCHSCREEN_STYLUS = 0x0002\nACONFIGURATION_TOUCHSCREEN_FINGER = 0x0003\nACONFIGURATION_DENSITY_DEFAULT = 0\nACONFIGURATION_DENSITY_LOW = 120\nACONFIGURATION_DENSITY_MEDIUM = 160\nACONFIGURATION_DENSITY_TV = 213\nACONFIGURATION_DENSITY_HIGH = 240\nACONFIGURATION_DENSITY_XHIGH = 320\nACONFIGURATION_DENSITY_XXHIGH = 480\nACONFIGURATION_DENSITY_XXXHIGH = 640\nACONFIGURATION_DENSITY_ANY = 0xFFFE\nACONFIGURATION_DENSITY_NONE = 0xFFFF\nACONFIGURATION_KEYBOARD_ANY = 0x0000\nACONFIGURATION_KEYBOARD_NOKEYS = 0x0001\nACONFIGURATION_KEYBOARD_QWERTY = 0x0002\nACONFIGURATION_KEYBOARD_12KEY = 0x0003\nACONFIGURATION_NAVIGATION_ANY = 0x0000\nACONFIGURATION_NAVIGATION_NONAV = 0x0001\nACONFIGURATION_NAVIGATION_DPAD = 0x0002\nACONFIGURATION_NAVIGATION_TRACKBALL = 0x0003\nACONFIGURATION_NAVIGATION_WHEEL = 0x0004\nACONFIGURATION_KEYSHIDDEN_ANY = 0x0000\nACONFIGURATION_KEYSHIDDEN_NO = 0x0001\nACONFIGURATION_KEYSHIDDEN_YES = 0x0002\nACONFIGURATION_KEYSHIDDEN_SOFT = 0x0003\nACONFIGURATION_NAVHIDDEN_ANY = 0x0000\nACONFIGURATION_NAVHIDDEN_NO = 0x0001\nACONFIGURATION_NAVHIDDEN_YES = 0x0002\nACONFIGURATION_SCREENSIZE_ANY = 0x00\nACONFIGURATION_SCREENSIZE_SMALL = 0x01\nACONFIGURATION_SCREENSIZE_NORMAL = 0x02\nACONFIGURATION_SCREENSIZE_LARGE = 0x03\nACONFIGURATION_SCREENSIZE_XLARGE = 0x04\nACONFIGURATION_SCREENLONG_ANY = 0x00\nACONFIGURATION_SCREENLONG_NO = 0x1\nACONFIGURATION_SCREENLONG_YES = 0x2\nACONFIGURATION_SCREENROUND_ANY = 0x00\nACONFIGURATION_SCREENROUND_NO = 0x1\nACONFIGURATION_SCREENROUND_YES = 0x2\nACONFIGURATION_WIDE_COLOR_GAMUT_ANY = 0x00\nACONFIGURATION_WIDE_COLOR_GAMUT_NO = 0x1\nACONFIGURATION_WIDE_COLOR_GAMUT_YES = 0x2\nACONFIGURATION_HDR_ANY = 0x00\nACONFIGURATION_HDR_NO = 0x1\nACONFIGURATION_HDR_YES = 0x2\nACONFIGURATION_UI_MODE_TYPE_ANY = 0x00\nACONFIGURATION_UI_MODE_TYPE_NORMAL = 0x01\nACONFIGURATION_UI_MODE_TYPE_DESK = 0x02\nACONFIGURATION_UI_MODE_TYPE_CAR = 0x03\nACONFIGURATION_UI_MODE_TYPE_TELEVISION = 0x04\nACONFIGURATION_UI_MODE_TYPE_APPLIANCE = 0x05\nACONFIGURATION_UI_MODE_TYPE_WATCH = 0x06\nACONFIGURATION_UI_MODE_TYPE_VR_HEADSET = 0x07\nACONFIGURATION_UI_MODE_NIGHT_ANY = 0x00\nACONFIGURATION_UI_MODE_NIGHT_NO = 0x1\nACONFIGURATION_UI_MODE_NIGHT_YES = 0x2\nACONFIGURATION_SCREEN_WIDTH_DP_ANY = 0x0000\nACONFIGURATION_SCREEN_HEIGHT_DP_ANY = 0x0000\nACONFIGURATION_SMALLEST_SCREEN_WIDTH_DP_ANY = 0x0000\nACONFIGURATION_LAYOUTDIR_ANY = 0x00\nACONFIGURATION_LAYOUTDIR_LTR = 0x01\nACONFIGURATION_LAYOUTDIR_RTL = 0x02\nACONFIGURATION_MCC = 0x0001\nACONFIGURATION_MNC = 0x0002\nACONFIGURATION_LOCALE = 0x0004\nACONFIGURATION_TOUCHSCREEN = 0x0008\nACONFIGURATION_KEYBOARD = 0x0010\nACONFIGURATION_KEYBOARD_HIDDEN = 0x0020\nACONFIGURATION_NAVIGATION = 0x0040\nACONFIGURATION_ORIENTATION = 0x0080\nACONFIGURATION_DENSITY = 0x0100\nACONFIGURATION_SCREEN_SIZE = 0x0200\nACONFIGURATION_VERSION = 0x0400\nACONFIGURATION_SCREEN_LAYOUT = 0x0800\nACONFIGURATION_UI_MODE = 0x1000\nACONFIGURATION_SMALLEST_SCREEN_SIZE = 0x2000\nACONFIGURATION_LAYOUTDIR = 0x4000\nACONFIGURATION_SCREEN_ROUND = 0x8000\nACONFIGURATION_COLOR_MODE = 0x10000\nACONFIGURATION_MNC_ZERO = 0xFFFF\n\n# See http://aospxref.com/android-13.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#946\n\nORIENTATION_ANY = ACONFIGURATION_ORIENTATION_ANY\nORIENTATION_PORT = ACONFIGURATION_ORIENTATION_PORT\nORIENTATION_LAND = ACONFIGURATION_ORIENTATION_LAND\nORIENTATION_SQUARE = ACONFIGURATION_ORIENTATION_SQUARE\n\nTOUCHSCREEN_ANY = ACONFIGURATION_TOUCHSCREEN_ANY\nTOUCHSCREEN_NOTOUCH = ACONFIGURATION_TOUCHSCREEN_NOTOUCH\nTOUCHSCREEN_STYLUS = ACONFIGURATION_TOUCHSCREEN_STYLUS\nTOUCHSCREEN_FINGER = ACONFIGURATION_TOUCHSCREEN_FINGER\n\nDENSITY_DEFAULT = ACONFIGURATION_DENSITY_DEFAULT\nDENSITY_LOW = ACONFIGURATION_DENSITY_LOW\nDENSITY_MEDIUM = ACONFIGURATION_DENSITY_MEDIUM\nDENSITY_TV = ACONFIGURATION_DENSITY_TV\nDENSITY_HIGH = ACONFIGURATION_DENSITY_HIGH\nDENSITY_XHIGH = ACONFIGURATION_DENSITY_XHIGH\nDENSITY_XXHIGH = ACONFIGURATION_DENSITY_XXHIGH\nDENSITY_XXXHIGH = ACONFIGURATION_DENSITY_XXXHIGH\nDENSITY_ANY = ACONFIGURATION_DENSITY_ANY\nDENSITY_NONE = ACONFIGURATION_DENSITY_NONE\n\nKEYBOARD_ANY = ACONFIGURATION_KEYBOARD_ANY\nKEYBOARD_NOKEYS = ACONFIGURATION_KEYBOARD_NOKEYS\nKEYBOARD_QWERTY = ACONFIGURATION_KEYBOARD_QWERTY\nKEYBOARD_12KEY = ACONFIGURATION_KEYBOARD_12KEY\n\nNAVIGATION_ANY = ACONFIGURATION_NAVIGATION_ANY\nNAVIGATION_NONAV = ACONFIGURATION_NAVIGATION_NONAV\nNAVIGATION_DPAD = ACONFIGURATION_NAVIGATION_DPAD\nNAVIGATION_TRACKBALL = ACONFIGURATION_NAVIGATION_TRACKBALL\nNAVIGATION_WHEEL = ACONFIGURATION_NAVIGATION_WHEEL\n\nMASK_KEYSHIDDEN = 0x0003\nKEYSHIDDEN_ANY = ACONFIGURATION_KEYSHIDDEN_ANY\nKEYSHIDDEN_NO = ACONFIGURATION_KEYSHIDDEN_NO\nKEYSHIDDEN_YES = ACONFIGURATION_KEYSHIDDEN_YES\nKEYSHIDDEN_SOFT = ACONFIGURATION_KEYSHIDDEN_SOFT\n\nMASK_NAVHIDDEN = 0x000C\nSHIFT_NAVHIDDEN = 2\nNAVHIDDEN_ANY = ACONFIGURATION_NAVHIDDEN_ANY << SHIFT_NAVHIDDEN\nNAVHIDDEN_NO = ACONFIGURATION_NAVHIDDEN_NO << SHIFT_NAVHIDDEN\nNAVHIDDEN_YES = ACONFIGURATION_NAVHIDDEN_YES << SHIFT_NAVHIDDEN\n\nSCREENWIDTH_ANY = 0\nSCREENHEIGHT_ANY = 0\nSDKVERSION_ANY = 0\nMINORVERSION_ANY = 0\n\nMASK_SCREENSIZE = 0x0F\nSCREENSIZE_ANY = ACONFIGURATION_SCREENSIZE_ANY\nSCREENSIZE_SMALL = ACONFIGURATION_SCREENSIZE_SMALL\nSCREENSIZE_NORMAL = ACONFIGURATION_SCREENSIZE_NORMAL\nSCREENSIZE_LARGE = ACONFIGURATION_SCREENSIZE_LARGE\nSCREENSIZE_XLARGE = ACONFIGURATION_SCREENSIZE_XLARGE\n\nMASK_SCREENLONG = 0x30\nSHIFT_SCREENLONG = 4\nSCREENLONG_ANY = ACONFIGURATION_SCREENLONG_ANY << SHIFT_SCREENLONG\nSCREENLONG_NO = ACONFIGURATION_SCREENLONG_NO << SHIFT_SCREENLONG\nSCREENLONG_YES = ACONFIGURATION_SCREENLONG_YES << SHIFT_SCREENLONG\n\nMASK_LAYOUTDIR = 0xC0\nSHIFT_LAYOUTDIR = 6\nLAYOUTDIR_ANY = ACONFIGURATION_LAYOUTDIR_ANY << SHIFT_LAYOUTDIR\nLAYOUTDIR_LTR = ACONFIGURATION_LAYOUTDIR_LTR << SHIFT_LAYOUTDIR\nLAYOUTDIR_RTL = ACONFIGURATION_LAYOUTDIR_RTL << SHIFT_LAYOUTDIR\n\nMASK_UI_MODE_TYPE = 0x0F\nUI_MODE_TYPE_ANY = ACONFIGURATION_UI_MODE_TYPE_ANY\nUI_MODE_TYPE_NORMAL = ACONFIGURATION_UI_MODE_TYPE_NORMAL\nUI_MODE_TYPE_DESK = ACONFIGURATION_UI_MODE_TYPE_DESK\nUI_MODE_TYPE_CAR = ACONFIGURATION_UI_MODE_TYPE_CAR\nUI_MODE_TYPE_TELEVISION = ACONFIGURATION_UI_MODE_TYPE_TELEVISION\nUI_MODE_TYPE_APPLIANCE = ACONFIGURATION_UI_MODE_TYPE_APPLIANCE\nUI_MODE_TYPE_WATCH = ACONFIGURATION_UI_MODE_TYPE_WATCH\nUI_MODE_TYPE_VR_HEADSET = ACONFIGURATION_UI_MODE_TYPE_VR_HEADSET\n\nMASK_UI_MODE_NIGHT = 0x30\nSHIFT_UI_MODE_NIGHT = 4\nUI_MODE_NIGHT_ANY = ACONFIGURATION_UI_MODE_NIGHT_ANY << SHIFT_UI_MODE_NIGHT\nUI_MODE_NIGHT_NO = ACONFIGURATION_UI_MODE_NIGHT_NO << SHIFT_UI_MODE_NIGHT\nUI_MODE_NIGHT_YES = ACONFIGURATION_UI_MODE_NIGHT_YES << SHIFT_UI_MODE_NIGHT\n\nMASK_SCREENROUND = 0x03\nSCREENROUND_ANY = ACONFIGURATION_SCREENROUND_ANY\nSCREENROUND_NO = ACONFIGURATION_SCREENROUND_NO\nSCREENROUND_YES = ACONFIGURATION_SCREENROUND_YES\n\nMASK_WIDE_COLOR_GAMUT = 0x03\nWIDE_COLOR_GAMUT_ANY = ACONFIGURATION_WIDE_COLOR_GAMUT_ANY\nWIDE_COLOR_GAMUT_NO = ACONFIGURATION_WIDE_COLOR_GAMUT_NO\nWIDE_COLOR_GAMUT_YES = ACONFIGURATION_WIDE_COLOR_GAMUT_YES\n\nMASK_HDR = 0x0C\nSHIFT_HDR = 2\nHDR_ANY = ACONFIGURATION_HDR_ANY << SHIFT_HDR\nHDR_NO = ACONFIGURATION_HDR_NO << SHIFT_HDR\nHDR_YES = ACONFIGURATION_HDR_YES << SHIFT_HDR\n\n\nclass ARSCParser:\n    \"\"\"\n    Parser for resource.arsc files\n\n    The ARSC File is, like the binary XML format, a chunk based format.\n    Both formats are actually identical but use different chunks in order to store the data.\n\n    The most outer chunk in the ARSC file is a chunk of type `RES_TABLE_TYPE`.\n    Inside this chunk is a StringPool and at least one package.\n\n    Each package is a chunk of type `RES_TABLE_PACKAGE_TYPE`.\n    It contains again many more chunks.\n    \"\"\"\n\n    def __init__(self, raw_buff: bytes) -> None:\n        \"\"\"\n        :param bytes raw_buff: the raw bytes of the file\n        \"\"\"\n        self.buff = io.BufferedReader(io.BytesIO(raw_buff))\n        self.buff_size = self.buff.raw.getbuffer().nbytes\n\n        if self.buff_size < 8 or self.buff_size > 0xFFFFFFFF:\n            raise ResParserError(\n                \"Invalid file size {} for a resources.arsc file!\".format(\n                    self.buff_size\n                )\n            )\n\n        self.analyzed = False\n        self._resolved_strings = None\n        self.packages = defaultdict(list)\n        self.values = {}\n        self.resource_values = defaultdict(defaultdict)\n        self.resource_configs = defaultdict(lambda: defaultdict(set))\n        self.resource_keys = defaultdict(lambda: defaultdict(defaultdict))\n        self.stringpool_main = None\n\n        # First, there is a ResTable_header.\n        self.header = ARSCHeader(self.buff, expected_type=RES_TABLE_TYPE)\n\n        # More sanity checks...\n        if self.header.header_size != 12:\n            logger.warning(\n                \"The ResTable_header has an unexpected header size! Expected 12 bytes, got {}.\".format(\n                    self.header.header_size\n                )\n            )\n\n        if self.header.size > self.buff_size:\n            raise ResParserError(\n                \"The file seems to be truncated. Refuse to parse the file! Filesize: {}, declared size: {}\".format(\n                    self.buff_size, self.header.size\n                )\n            )\n\n        if self.header.size < self.buff_size:\n            logger.warning(\n                \"The Resource file seems to have data appended to it. Filesize: {}, declared size: {}\".format(\n                    self.buff_size, self.header.size\n                )\n            )\n\n        # The ResTable_header contains the packageCount, i.e. the number of ResTable_package\n        self.packageCount = unpack('<I', self.buff.read(4))[0]\n\n        # Even more sanity checks...\n        if self.packageCount < 1:\n            logger.warning(\n                \"The number of packages is smaller than one. There should be at least one package!\"\n            )\n\n        logger.debug(\n            \"Parsed ResTable_header with {} package(s) inside.\".format(\n                self.packageCount\n            )\n        )\n\n        # skip to the start of the first chunk's data, skipping trailing header bytes (there should be none)\n        self.buff.seek(self.header.start + self.header.header_size)\n\n        # Now parse the data:\n        # We should find one ResStringPool_header and one or more ResTable_package chunks inside\n        while self.buff.tell() <= self.header.end - ARSCHeader.SIZE:\n            res_header = ARSCHeader(self.buff)\n\n            if res_header.end > self.header.end:\n                # this inner chunk crosses the boundary of the table chunk\n                logger.warning(\n                    \"Invalid chunk found! It is larger than the outer chunk: %s\",\n                    res_header,\n                )\n                break\n\n            if res_header.type == RES_STRING_POOL_TYPE:\n                # There should be only one StringPool per resource table.\n                if self.stringpool_main:\n                    logger.warning(\n                        \"Already found a ResStringPool_header, but there should be only one! Will not parse the Pool again.\"\n                    )\n                else:\n                    self.stringpool_main = StringBlock(self.buff, res_header)\n                    logger.debug(\n                        \"Found the main string pool: %s\", self.stringpool_main\n                    )\n\n            elif res_header.type == RES_TABLE_PACKAGE_TYPE:\n                if len(self.packages) > self.packageCount:\n                    raise ResParserError(\n                        \"Got more packages ({}) than expected ({})\".format(\n                            len(self.packages), self.packageCount\n                        )\n                    )\n\n                current_package = ARSCResTablePackage(self.buff, res_header)\n                package_name = current_package.get_name()\n\n                # After the Header, we have the resource type symbol table\n                self.buff.seek(\n                    current_package.header.start + current_package.typeStrings\n                )\n                type_sp_header = ARSCHeader(\n                    self.buff, expected_type=RES_STRING_POOL_TYPE\n                )\n                mTableStrings = StringBlock(self.buff, type_sp_header)\n\n                # Next, we should have the resource key symbol table\n                self.buff.seek(\n                    current_package.header.start + current_package.keyStrings\n                )\n                key_sp_header = ARSCHeader(\n                    self.buff, expected_type=RES_STRING_POOL_TYPE\n                )\n                mKeyStrings = StringBlock(self.buff, key_sp_header)\n\n                # Add them to the dict of read packages\n                self.packages[package_name].append(current_package)\n                self.packages[package_name].append(mTableStrings)\n                self.packages[package_name].append(mKeyStrings)\n\n                pc = PackageContext(\n                    current_package,\n                    self.stringpool_main,\n                    mTableStrings,\n                    mKeyStrings,\n                )\n                logger.debug(\"Constructed a PackageContext: %s\", pc)\n\n                # skip to the first header in this table package chunk\n                # FIXME is this correct? We have already read the first two sections!\n                # self.buff.set_idx(res_header.start + res_header.header_size)\n                # this looks more like we want: (???)\n                # FIXME it looks like that the two string pools we have read might not be concatenated to each other,\n                # thus jumping to the sum of the sizes might not be correct...\n                next_idx = (\n                    res_header.start\n                    + res_header.header_size\n                    + type_sp_header.size\n                    + key_sp_header.size\n                )\n\n                if next_idx != self.buff.tell():\n                    # If this happens, we have a testfile ;)\n                    logger.error(\"This looks like an odd resources.arsc file!\")\n                    logger.error(\n                        \"Please report this error including the file you have parsed!\"\n                    )\n                    logger.error(\n                        \"next_idx = {}, current buffer position = {}\".format(\n                            next_idx, self.buff.tell()\n                        )\n                    )\n                    logger.error(\n                        \"Please open a issue at https://github.com/androguard/androguard/issues\"\n                    )\n                    logger.error(\"Thank you!\")\n\n                self.buff.seek(next_idx)\n\n                # Read all other headers\n                while self.buff.tell() <= res_header.end - ARSCHeader.SIZE:\n                    pkg_chunk_header = ARSCHeader(self.buff)\n                    logger.debug(\"Found a header: {}\".format(pkg_chunk_header))\n                    if (\n                        pkg_chunk_header.start + pkg_chunk_header.size\n                        > res_header.end\n                    ):\n                        # we are way off the package chunk; bail out\n                        break\n\n                    self.packages[package_name].append(pkg_chunk_header)\n\n                    if pkg_chunk_header.type == RES_TABLE_TYPE_SPEC_TYPE:\n                        self.packages[package_name].append(\n                            ARSCResTypeSpec(self.buff, pc)\n                        )\n\n                    elif pkg_chunk_header.type == RES_TABLE_TYPE_TYPE:\n                        # Parse a RES_TABLE_TYPE\n                        # http://androidxref.com/9.0.0_r3/xref/frameworks/base/tools/aapt2/format/binary/BinaryResourceParser.cpp#311\n                        start_of_chunk = self.buff.tell() - 8\n                        expected_end_of_chunk = (\n                            start_of_chunk + pkg_chunk_header.size\n                        )\n                        a_res_type = ARSCResType(self.buff, pc)\n                        self.packages[package_name].append(a_res_type)\n                        self.resource_configs[package_name][a_res_type].add(\n                            a_res_type.config\n                        )\n\n                        logger.debug(\"Config: {}\".format(a_res_type.config))\n\n                        entries = []\n                        FLAG_OFFSET16 = 0x02\n                        NO_ENTRY_16 = 0xFFFF\n                        NO_ENTRY_32 = 0xFFFFFFFF\n                        expected_entries_start = (\n                            start_of_chunk + a_res_type.entriesStart\n                        )\n\n                        # Helper function to convert 16-bit offset to 32-bit\n                        def offset_from16(off16):\n                            return (\n                                NO_ENTRY_16\n                                if off16 == NO_ENTRY_16\n                                else off16 * 4\n                            )\n\n                        for i in range(0, a_res_type.entryCount):\n                            current_package.mResId = (\n                                current_package.mResId & 0xFFFF0000 | i\n                            )\n                            # Check if FLAG_OFFSET16 is set\n                            if a_res_type.flags & FLAG_OFFSET16:\n                                # Read as 16-bit offset\n                                offset_16 = unpack('<H', self.buff.read(2))[0]\n                                offset = offset_from16(offset_16)\n                                if offset == NO_ENTRY_16:\n                                    continue\n                            else:\n                                # Read as 32-bit offset\n                                offset = unpack('<I', self.buff.read(4))[0]\n                                if offset == NO_ENTRY_32:\n                                    continue\n                            entries.append((offset, current_package.mResId))\n\n                        self.packages[package_name].append(entries)\n\n                        base_offset = self.buff.tell()\n                        if base_offset + ((4 - (base_offset % 4)) % 4) != expected_entries_start:\n                            # FIXME: seems like I am missing 2 bytes here in some cases, though it does not affect the result\n                            logger.warning(\n                                \"Something is off here! We are not where the entries should start.\"\n                            )\n                        base_offset = expected_entries_start\n                        for entry_offset, res_id in entries:\n                            if entry_offset != -1:\n                                ate = ARSCResTableEntry(\n                                    self.buff,\n                                    base_offset + entry_offset,\n                                    expected_end_of_chunk,\n                                    res_id,\n                                    pc,\n                                )\n                                self.packages[package_name].append(ate)\n                                if ate.is_weak():\n                                    # FIXME we are not sure how to implement the FLAG_WEAK!\n                                    # We saw the following: There is just a single Res_value after the ARSCResTableEntry\n                                    # and then comes the next ARSCHeader.\n                                    # Therefore we think this means all entries are somehow replicated?\n                                    # So we do some kind of hack here. We set the idx to the entry again...\n                                    # Now we will read all entries!\n                                    # Not sure if this is a good solution though\n                                    self.buff.seek(ate.start)\n                    elif pkg_chunk_header.type == RES_TABLE_LIBRARY_TYPE:\n                        logger.warning(\n                            \"RES_TABLE_LIBRARY_TYPE chunk is not supported\"\n                        )\n                    else:\n                        # Unknown / not-handled chunk type\n                        logger.warning(\n                            \"Unknown chunk type encountered inside RES_TABLE_PACKAGE: %s\",\n                            pkg_chunk_header,\n                        )\n\n                    # skip to the next chunk\n                    self.buff.seek(pkg_chunk_header.end)\n            else:\n                # Unknown / not-handled chunk type\n                logger.warning(\n                    \"Unknown chunk type encountered: %s\", res_header\n                )\n\n            # move to the next resource chunk\n            self.buff.seek(res_header.end)\n\n    def _analyse(self):\n        if self.analyzed:\n            return\n\n        self.analyzed = True\n\n        for package_name in self.packages:\n            self.values[package_name] = {}\n\n            nb = 3\n            while nb < len(self.packages[package_name]):\n                header = self.packages[package_name][nb]\n                if isinstance(header, ARSCHeader):\n                    if header.type == RES_TABLE_TYPE_TYPE:\n                        a_res_type = self.packages[package_name][nb + 1]\n\n                        locale = a_res_type.config.get_language_and_region()\n\n                        c_value = self.values[package_name].setdefault(\n                            locale, {\"public\": []}\n                        )\n\n                        entries = self.packages[package_name][nb + 2]\n                        nb_i = 0\n                        for entry, res_id in entries:\n                            if entry != -1:\n                                ate = self.packages[package_name][\n                                    nb + 3 + nb_i\n                                ]\n\n                                self.resource_values[ate.mResId][\n                                    a_res_type.config\n                                ] = ate\n                                self.resource_keys[package_name][\n                                    a_res_type.get_type()\n                                ][ate.get_value()] = ate.mResId\n\n                                if ate.get_index() != -1:\n                                    c_value[\"public\"].append(\n                                        (\n                                            a_res_type.get_type(),\n                                            ate.get_value(),\n                                            ate.mResId,\n                                        )\n                                    )\n\n                                if a_res_type.get_type() not in c_value:\n                                    c_value[a_res_type.get_type()] = []\n\n                                if a_res_type.get_type() == \"string\":\n                                    c_value[\"string\"].append(\n                                        self.get_resource_string(ate)\n                                    )\n\n                                elif a_res_type.get_type() == \"id\":\n                                    if (\n                                        not ate.is_complex()\n                                        and not ate.is_compact()\n                                    ):\n                                        c_value[\"id\"].append(\n                                            self.get_resource_id(ate)\n                                        )\n\n                                elif a_res_type.get_type() == \"bool\":\n                                    if (\n                                        not ate.is_complex()\n                                        and not ate.is_compact()\n                                    ):\n                                        c_value[\"bool\"].append(\n                                            self.get_resource_bool(ate)\n                                        )\n\n                                elif a_res_type.get_type() == \"integer\":\n                                    if ate.is_compact():\n                                        c_value[\"integer\"].append(ate.data)\n                                    else:\n                                        c_value[\"integer\"].append(\n                                            self.get_resource_integer(ate)\n                                        )\n\n                                elif a_res_type.get_type() == \"color\":\n                                    if not ate.is_compact():\n                                        c_value[\"color\"].append(\n                                            self.get_resource_color(ate)\n                                        )\n\n                                elif a_res_type.get_type() == \"dimen\":\n                                    if not ate.is_compact():\n                                        c_value[\"dimen\"].append(\n                                            self.get_resource_dimen(ate)\n                                        )\n\n                                nb_i += 1\n                        nb += (\n                            3 + nb_i - 1\n                        )  # -1 to account for the nb+=1 on the next line\n                nb += 1\n\n    def get_resource_string(self, ate: ARSCResTableEntry) -> list:\n        return [ate.get_value(), ate.get_key_data()]\n\n    def get_resource_id(self, ate: ARSCResTableEntry) -> list[str]:\n        x = [ate.get_value()]\n        if ate.key.get_data() == 0:\n            x.append(\"false\")\n        elif ate.key.get_data() == 1:\n            x.append(\"true\")\n        return x\n\n    def get_resource_bool(self, ate: ARSCResTableEntry) -> list[str]:\n        x = [ate.get_value()]\n        if ate.key.get_data() == 0:\n            x.append(\"false\")\n        elif ate.key.get_data() == -1:\n            x.append(\"true\")\n        return x\n\n    def get_resource_integer(self, ate: ARSCResTableEntry) -> list:\n        return [ate.get_value(), ate.key.get_data()]\n\n    def get_resource_color(self, ate: ARSCResTableEntry) -> list:\n        entry_data = ate.key.get_data()\n        return [\n            ate.get_value(),\n            \"#{:02x}{:02x}{:02x}{:02x}\".format(\n                ((entry_data >> 24) & 0xFF),\n                ((entry_data >> 16) & 0xFF),\n                ((entry_data >> 8) & 0xFF),\n                (entry_data & 0xFF),\n            ),\n        ]\n\n    def get_resource_dimen(self, ate: ARSCResTableEntry) -> list:\n        try:\n            return [\n                ate.get_value(),\n                \"{}{}\".format(\n                    complexToFloat(ate.key.get_data()),\n                    DIMENSION_UNITS[ate.key.get_data() & COMPLEX_UNIT_MASK],\n                ),\n            ]\n        except IndexError:\n            logger.debug(\n                \"Out of range dimension unit index for {}: {}\".format(\n                    complexToFloat(ate.key.get_data()),\n                    ate.key.get_data() & COMPLEX_UNIT_MASK,\n                )\n            )\n            return [ate.get_value(), ate.key.get_data()]\n\n    # FIXME\n    def get_resource_style(self, ate: ARSCResTableEntry) -> list:\n        return [\"\", \"\"]\n\n    def get_packages_names(self) -> list[str]:\n        \"\"\"\n        Retrieve a list of all package names, which are available\n        in the given resources.arsc.\n        \"\"\"\n        return list(self.packages.keys())\n\n    def get_locales(self, package_name: str) -> list[str]:\n        \"\"\"\n        Retrieve a list of all available locales in a given packagename.\n\n        :param package_name: the package name to get locales of\n        :returns: a list of locale strings\n        \"\"\"\n        self._analyse()\n        return list(self.values[package_name].keys())\n\n    def get_types(\n        self, package_name: str, locale: str = '\\x00\\x00'\n    ) -> list[str]:\n        \"\"\"\n        Retrieve a list of all types which are available in the given\n        package and locale.\n\n        :param package_name: the package name to get types of\n        :param locale: the locale to get types of (default: '\\x00\\x00')\n        :returns: a list of type strings\n        \"\"\"\n        self._analyse()\n        return list(self.values[package_name][locale].keys())\n\n    def get_public_resources(\n        self, package_name: str, locale: str = '\\x00\\x00'\n    ) -> bytes:\n        \"\"\"\n        Get the XML (as string) of all resources of type 'public'.\n\n        The public resources table contains the IDs for each item.\n\n        :param package_name: the package name to get the resources for\n        :param locale: the locale to get the resources for (default: '\\x00\\x00')\n        :returns: the public xml bytes\n        \"\"\"\n\n        self._analyse()\n\n        buff = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n'\n        buff += '<resources>\\n'\n\n        try:\n            for i in self.values[package_name][locale][\"public\"]:\n                buff += (\n                    '<public type=\"{}\" name=\"{}\" id=\"0x{:08x}\" />\\n'.format(\n                        i[0], i[1], i[2]\n                    )\n                )\n        except KeyError:\n            pass\n\n        buff += '</resources>\\n'\n\n        return buff.encode('utf-8')\n\n    def get_string_resources(\n        self, package_name: str, locale: str = '\\x00\\x00'\n    ) -> bytes:\n        \"\"\"\n        Get the XML (as string) of all resources of type 'string'.\n\n        Read more about string resources:\n        <https://developer.android.com/guide/topics/resources/string-resource.html>\n\n        :param package_name: the package name to get the resources for\n        :param locale: the locale to get the resources for (default: '\\x00\\x00')\n        :returns: the string xml bytes\n        \"\"\"\n        self._analyse()\n\n        buff = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n'\n        buff += '<resources>\\n'\n\n        try:\n            for i in self.values[package_name][locale][\"string\"]:\n                if any(map(i[1].__contains__, '<&>')):\n                    value = '<![CDATA[%s]]>' % i[1]\n                else:\n                    value = i[1]\n                buff += '<string name=\"{}\">{}</string>\\n'.format(i[0], value)\n        except KeyError:\n            pass\n\n        buff += '</resources>\\n'\n\n        return buff.encode('utf-8')\n\n    def get_strings_resources(self) -> bytes:\n        \"\"\"\n        Get the XML (as string) of all resources of type 'string'.\n        This is a combined variant, which has all locales and all package names\n        stored.\n\n        :returns: the string, locales, and package name xml bytes\n        \"\"\"\n        self._analyse()\n\n        buff = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n'\n\n        buff += \"<packages>\\n\"\n        for package_name in self.get_packages_names():\n            buff += \"<package name=\\\"%s\\\">\\n\" % package_name\n\n            for locale in self.get_locales(package_name):\n                buff += \"<locale value=%s>\\n\" % repr(locale)\n\n                buff += '<resources>\\n'\n                try:\n                    for i in self.values[package_name][locale][\"string\"]:\n                        buff += '<string name=\"{}\">{}</string>\\n'.format(\n                            i[0], escape(i[1])\n                        )\n                except KeyError:\n                    pass\n\n                buff += '</resources>\\n'\n                buff += '</locale>\\n'\n\n            buff += \"</package>\\n\"\n\n        buff += \"</packages>\\n\"\n\n        return buff.encode('utf-8')\n\n    def get_id_resources(\n        self, package_name: str, locale: str = '\\x00\\x00'\n    ) -> bytes:\n        \"\"\"\n        Get the XML (as string) of all resources of type 'id'.\n\n        Read more about ID resources:\n        <https://developer.android.com/guide/topics/resources/more-resources.html#Id>\n\n        :param package_name: the package name to get the resources for\n        :param locale: the locale to get the resources for (default: '\\x00\\x00')\n\n        :returns: the id resources xml bytes\n        \"\"\"\n        self._analyse()\n\n        buff = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n'\n        buff += '<resources>\\n'\n\n        try:\n            for i in self.values[package_name][locale][\"id\"]:\n                if len(i) == 1:\n                    buff += '<item type=\"id\" name=\"%s\"/>\\n' % (i[0])\n                else:\n                    buff += '<item type=\"id\" name=\"{}\">{}</item>\\n'.format(\n                        i[0], escape(i[1])\n                    )\n        except KeyError:\n            pass\n\n        buff += '</resources>\\n'\n\n        return buff.encode('utf-8')\n\n    def get_bool_resources(\n        self, package_name: str, locale: str = '\\x00\\x00'\n    ) -> bytes:\n        \"\"\"\n        Get the XML (as string) of all resources of type 'bool'.\n\n        Read more about bool resources:\n        <https://developer.android.com/guide/topics/resources/more-resources.html#Bool>\n\n        :param package_name: the package name to get the resources for\n        :param locale: the locale to get the resources for (default: '\\x00\\x00')\n\n        :returns: the bool resources xml bytes\n        \"\"\"\n        self._analyse()\n\n        buff = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n'\n        buff += '<resources>\\n'\n\n        try:\n            for i in self.values[package_name][locale][\"bool\"]:\n                buff += '<bool name=\"{}\">{}</bool>\\n'.format(i[0], i[1])\n        except KeyError:\n            pass\n\n        buff += '</resources>\\n'\n\n        return buff.encode('utf-8')\n\n    def get_integer_resources(\n        self, package_name: str, locale: str = '\\x00\\x00'\n    ) -> bytes:\n        \"\"\"\n        Get the XML (as string) of all resources of type 'integer'.\n\n        Read more about integer resources:\n        <https://developer.android.com/guide/topics/resources/more-resources.html#Integer>\n\n        :param package_name: the package name to get the resources for\n        :param locale: the locale to get the resources for (default: '\\x00\\x00')\n\n        :returns: the integer resources xml bytes\n        \"\"\"\n        self._analyse()\n\n        buff = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n'\n        buff += '<resources>\\n'\n\n        try:\n            for i in self.values[package_name][locale][\"integer\"]:\n                buff += '<integer name=\"{}\">{}</integer>\\n'.format(i[0], i[1])\n        except KeyError:\n            pass\n\n        buff += '</resources>\\n'\n\n        return buff.encode('utf-8')\n\n    def get_color_resources(\n        self, package_name: str, locale: str = '\\x00\\x00'\n    ) -> bytes:\n        \"\"\"\n        Get the XML (as string) of all resources of type 'color'.\n\n        Read more about color resources:\n        <https://developer.android.com/guide/topics/resources/more-resources.html#Color>\n\n        :param package_name: the package name to get the resources for\n        :param locale: the locale to get the resources for (default: '\\x00\\x00')\n\n        :returns: the color resources xml bytes\n        \"\"\"\n        self._analyse()\n\n        buff = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n'\n        buff += '<resources>\\n'\n\n        try:\n            for i in self.values[package_name][locale][\"color\"]:\n                buff += '<color name=\"{}\">{}</color>\\n'.format(i[0], i[1])\n        except KeyError:\n            pass\n\n        buff += '</resources>\\n'\n\n        return buff.encode('utf-8')\n\n    def get_dimen_resources(\n        self, package_name: str, locale: str = '\\x00\\x00'\n    ) -> bytes:\n        \"\"\"\n        Get the XML (as string) of all resources of type 'dimen'.\n\n        Read more about Dimension resources:\n        <https://developer.android.com/guide/topics/resources/more-resources.html#Dimension>\n\n        :param package_name: the package name to get the resources for\n        :param locale: the locale to get the resources for (default: '\\x00\\x00')\n\n        :returns: the dimen resource xml bytes\n        \"\"\"\n        self._analyse()\n\n        buff = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n'\n        buff += '<resources>\\n'\n\n        try:\n            for i in self.values[package_name][locale][\"dimen\"]:\n                buff += '<dimen name=\"{}\">{}</dimen>\\n'.format(i[0], i[1])\n        except KeyError:\n            pass\n\n        buff += '</resources>\\n'\n\n        return buff.encode('utf-8')\n\n    def get_id(\n        self, package_name: str, rid: int, locale: str = '\\x00\\x00'\n    ) -> tuple:\n        \"\"\"\n        Returns the tuple `(resource_type, resource_name, resource_id)`\n        for the given resource_id.\n\n        :param package_name: package name to query\n        :param rid: the resource_id\n        :param locale: specific locale\n        :returns: tuple of (resource_type, resource_name, resource_id)\n        \"\"\"\n        self._analyse()\n\n        try:\n            for i in self.values[package_name][locale][\"public\"]:\n                if i[2] == rid:\n                    return i\n        except KeyError:\n            pass\n        return None, None, None\n\n    class ResourceResolver:\n        \"\"\"\n        Resolves resources by ID and configuration.\n        This resolver deals with complex resources as well as with references.\n        \"\"\"\n\n        def __init__(\n            self,\n            android_resources: ARSCParser,\n            config: Union[ARSCResTableConfig, None] = None,\n        ) -> None:\n            \"\"\"\n            :param ARSCParser android_resources: A resource parser\n            :param ARSCResTableConfig config: The desired configuration or None to resolve all.\n            \"\"\"\n            self.resources = android_resources\n            self.wanted_config = config\n\n        def resolve(self, res_id: int) -> list[tuple[ARSCResTableConfig, str]]:\n            \"\"\"\n            the given ID into the Resource and returns a list of matching resources.\n\n            :param int res_id: numerical ID of the resource\n            :returns: a list of tuples of (ARSCResTableConfig, str)\n            \"\"\"\n            result = []\n            self._resolve_into_result(result, res_id, self.wanted_config)\n            return result\n\n        def _resolve_into_result(self, result, res_id, config):\n            # First: Get all candidates\n            configs = self.resources.get_res_configs(res_id, config)\n\n            for config, ate in configs:\n                # deconstruct them and check if more candidates are generated\n                self.put_ate_value(result, ate, config)\n\n        def put_ate_value(\n            self,\n            result: list,\n            ate: ARSCResTableEntry,\n            config: ARSCResTableConfig,\n        ) -> None:\n            \"\"\"\n            Put a [ARSCResTableEntry][androguard.core.axml.ARSCResTableEntry] into the list of results\n            :param result: results array\n            :param ate:\n            :param config:\n            \"\"\"\n            if ate.is_complex():\n                complex_array = []\n                result.append((config, complex_array))\n                for _, item in ate.item.items:\n                    self.put_item_value(\n                        complex_array, item, config, ate, complex_=True\n                    )\n            elif ate.is_compact():\n                self.put_item_value(\n                    result,\n                    ate.data,\n                    config,\n                    ate,\n                    complex_=False,\n                    compact_=True,\n                )\n            else:\n                self.put_item_value(\n                    result, ate.key, config, ate, complex_=False\n                )\n\n        def put_item_value(\n            self,\n            result: list,\n            item: Union[ARSCResStringPoolRef, int],\n            config: ARSCResTableConfig,\n            parent: ARSCResTableEntry,\n            complex_: bool,\n            compact_: bool = False,\n        ) -> None:\n            \"\"\"\n            Put the tuple ([ARSCResTableConfig][androguard.core.axml.ARSCResTableConfig], resolved string) into the result set\n\n            :param result: the result set\n            :param item:\n            :param config:\n            :param parent: the originating entry\n            :param complex_: True if the originating `ARSCResTableEntry` was complex\n            :param bool compact_: True if the originating `ARSCResTableEntry` was compact\n            \"\"\"\n            if isinstance(item, ARSCResStringPoolRef):\n                if item.is_reference():\n                    res_id = item.get_data()\n                    if res_id:\n                        # Infinite loop detection:\n                        # TODO should this stay here or should be detect the loop much earlier?\n                        if res_id == parent.mResId:\n                            logger.warning(\n                                \"Infinite loop detected at resource item {}. It references itself!\".format(\n                                    parent\n                                )\n                            )\n                            return\n\n                        self._resolve_into_result(\n                            result, item.get_data(), self.wanted_config\n                        )\n                else:\n                    if complex_:\n                        result.append(item.format_value())\n                    else:\n                        result.append((config, item.format_value()))\n            else:\n                if compact_:\n                    result.append(\n                        (config, parent.parent.stringpool_main.getString(item))\n                    )\n\n    def get_resolved_res_configs(\n        self, rid: int, config: Union[ARSCResTableConfig, None] = None\n    ) -> list[tuple[ARSCResTableConfig, str]]:\n        \"\"\"\n        Return a list of resolved resource IDs with their corresponding configuration.\n        It has a similar return type as [get_res_configs][androguard.core.axml.ARSCParser.get_res_configs] but also handles complex entries\n        and references.\n        Also instead of returning [ARSCResTableConfig][androguard.core.axml.ARSCResTableConfig] in the tuple, the actual values are resolved.\n\n        This is the preferred way of resolving resource IDs to their resources.\n\n        :param rid: the numerical ID of the resource\n        :param config: the desired configuration or None to retrieve all\n        :return: A list of tuples of (`ARSCResTableConfig`, str)\n        \"\"\"\n        resolver = ARSCParser.ResourceResolver(self, config)\n        return resolver.resolve(rid)\n\n    def get_resolved_strings(self) -> list[str]:\n        self._analyse()\n        if self._resolved_strings:\n            return self._resolved_strings\n\n        r = {}\n        for package_name in self.get_packages_names():\n            r[package_name] = {}\n            k = {}\n\n            for locale in self.values[package_name]:\n                v_locale = locale\n                if v_locale == '\\x00\\x00':\n                    v_locale = 'DEFAULT'\n\n                r[package_name][v_locale] = {}\n\n                try:\n                    for i in self.values[package_name][locale][\"public\"]:\n                        if i[0] == 'string':\n                            r[package_name][v_locale][i[2]] = None\n                            k[i[1]] = i[2]\n                except KeyError:\n                    pass\n\n                try:\n                    for i in self.values[package_name][locale][\"string\"]:\n                        if i[0] in k:\n                            r[package_name][v_locale][k[i[0]]] = i[1]\n                except KeyError:\n                    pass\n\n        self._resolved_strings = r\n        return r\n\n    def get_res_configs(\n        self,\n        rid: int,\n        config: Union[ARSCResTableConfig, None] = None,\n        fallback: bool = True,\n    ) -> list[ARSCResTableConfig]:\n        \"\"\"\n        Return the resources found with the ID `rid` and select\n        the right one based on the configuration, or return all if no configuration was set.\n\n        But we try to be generous here and at least try to resolve something:\n        This method uses a fallback to return at least one resource (the first one in the list)\n        if more than one items are found and the default config is used and no default entry could be found.\n\n        This is usually a bad sign (i.e. the developer did not follow the android documentation:\n        <https://developer.android.com/guide/topics/resources/localization.html#failing2)>\n        In practise an app might just be designed to run on a single locale and thus only has those locales set.\n\n        You can disable this fallback behaviour, to just return exactly the given result.\n\n        :param rid: resource id as int\n        :param config: a config to resolve from, or None to get all results\n        :param fallback: Enable the fallback for resolving default configuration (default: True)\n        :return: a list of `ARSCResTableConfig`\n        \"\"\"\n        self._analyse()\n\n        if not rid:\n            raise ValueError(\"'rid' should be set\")\n        if not isinstance(rid, int):\n            raise ValueError(\"'rid' must be an int\")\n\n        if rid not in self.resource_values:\n            logger.warning(\n                \"The requested rid '0x{:08x}' could not be found in the list of resources.\".format(\n                    rid\n                )\n            )\n            return []\n\n        res_options = self.resource_values[rid]\n        if len(res_options) > 1 and config:\n            if config in res_options:\n                return [(config, res_options[config])]\n            elif fallback and config == ARSCResTableConfig.default_config():\n                logger.warning(\n                    \"No default resource config could be found for the given rid '0x{:08x}', using fallback!\".format(\n                        rid\n                    )\n                )\n                return [list(self.resource_values[rid].items())[0]]\n            else:\n                return []\n        else:\n            return list(res_options.items())\n\n    def get_string(\n        self, package_name: str, name: str, locale: str = '\\x00\\x00'\n    ) -> Union[str, None]:\n        self._analyse()\n\n        try:\n            for i in self.values[package_name][locale][\"string\"]:\n                if i[0] == name:\n                    return i\n        except KeyError:\n            return None\n\n    def get_res_id_by_key(self, package_name, resource_type, key):\n        try:\n            return self.resource_keys[package_name][resource_type][key]\n        except KeyError:\n            return None\n\n    def get_items(self, package_name):\n        self._analyse()\n        return self.packages[package_name]\n\n    def get_type_configs(self, package_name, type_name=None):\n        if package_name is None:\n            package_name = self.get_packages_names()[0]\n        result = collections.defaultdict(list)\n\n        for res_type, configs in list(\n            self.resource_configs[package_name].items()\n        ):\n            if res_type.get_package_name() == package_name and (\n                type_name is None or res_type.get_type() == type_name\n            ):\n                result[res_type.get_type()].extend(configs)\n\n        return result\n\n    @staticmethod\n    def parse_id(name: str) -> tuple[str, str]:\n        \"\"\"\n        Resolves an id from a binary XML file in the form `@[package:]DEADBEEF`\n        and returns a tuple of package name and resource id.\n        If no package name was given, i.e. the ID has the form `@DEADBEEF`,\n        the package name is set to None.\n\n        :raises ValueError: if the id is malformed.\n\n        :param name: the string of the resource, as in the binary XML file\n        :return: a tuple of (resource_id, package_name).\n        \"\"\"\n\n        if not name.startswith('@'):\n            raise ValueError(\n                \"Not a valid resource ID, must start with @: '{}'\".format(name)\n            )\n\n        # remove @\n        name = name[1:]\n\n        package = None\n        if ':' in name:\n            package, res_id = name.split(':', 1)\n        else:\n            res_id = name\n\n        if len(res_id) != 8:\n            raise ValueError(\n                \"Numerical ID is not 8 characters long: '{}'\".format(res_id)\n            )\n\n        try:\n            return int(res_id, 16), package\n        except ValueError:\n            raise ValueError(\"ID is not a hex ID: '{}'\".format(res_id))\n\n    def get_resource_xml_name(\n        self, r_id: int, package: Union[str, None] = None\n    ) -> str:\n        \"\"\"\n        Returns the XML name for a resource, including the package name if package is `None`.\n        A full name might look like `@com.example:string/foobar`\n        Otherwise the name is only looked up in the specified package and is returned without\n        the package name.\n        The same example from about without the package name will read as `@string/foobar`.\n\n        If the ID could not be found, `None` is returned.\n\n        A description of the XML name can be found here:\n        <https://developer.android.com/guide/topics/resources/providing-resources#ResourcesFromXml>\n\n        :param r_id: numerical ID if the resource\n        :param package: package name\n        :return: XML name identifier\n        \"\"\"\n        if package:\n            resource, name, i_id = self.get_id(package, r_id)\n            if not i_id:\n                return None\n            return \"@{}/{}\".format(resource, name)\n        else:\n            for p in self.get_packages_names():\n                r, n, i_id = self.get_id(p, r_id)\n                if i_id:\n                    # found the resource in this package\n                    package = p\n                    resource = r\n                    name = n\n                    break\n            if not package:\n                return None\n            else:\n                return \"@{}:{}/{}\".format(package, resource, name)\n\n\nclass PackageContext:\n    def __init__(\n        self,\n        current_package: ARSCResTablePackage,\n        stringpool_main: StringBlock,\n        mTableStrings: StringBlock,\n        mKeyStrings: StringBlock,\n    ) -> None:\n        \"\"\"\n        :param current_package:\n        :param stringpool_main:\n        :param mTableStrings:\n        :param mKeyStrings:\n        \"\"\"\n        self.stringpool_main = stringpool_main\n        self.mTableStrings = mTableStrings\n        self.mKeyStrings = mKeyStrings\n        self.current_package = current_package\n\n    def get_mResId(self) -> int:\n        return self.current_package.mResId\n\n    def set_mResId(self, mResId: int) -> None:\n        self.current_package.mResId = mResId\n\n    def get_package_name(self) -> str:\n        return self.current_package.get_name()\n\n    def __repr__(self):\n        return \"<PackageContext {}, {}, {}, {}>\".format(\n            self.current_package,\n            self.stringpool_main,\n            self.mTableStrings,\n            self.mKeyStrings,\n        )\n\n\nclass ARSCHeader:\n    \"\"\"\n    Object which contains a Resource Chunk.\n    This is an implementation of the `ResChunk_header`.\n\n    It will throw an [ResParserError][androguard.core.axml.ResParserError] if the header could not be read successfully.\n\n    It is not checked if the data is outside the buffer size nor if the current\n    chunk fits into the parent chunk (if any)!\n\n    The parameter `expected_type` can be used to immediately check the header for the type or raise a [ResParserError][androguard.core.axml.ResParserError].\n    This is useful if you know what type of chunk must follow.\n\n    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#196\n    \"\"\"\n\n    # This is the minimal size such a header must have. There might be other header data too!\n    SIZE = 2 + 2 + 4\n\n    def __init__(\n        self,\n        buff: BinaryIO,\n        expected_type: Union[int, None] = None,\n        possible_types: Union[set[int], None] = None,\n    ) -> None:\n        \"\"\"\n        :raises ResParserError: if header malformed\n        :param buff: the buffer set to the position where the header starts.\n        :param int expected_type: the type of the header which is expected.\n        \"\"\"\n        self.start = buff.tell()\n        # Make sure we do not read over the buffer:\n        if buff.raw.getbuffer().nbytes < self.start + self.SIZE:\n            raise ResParserError(\n                \"Can not read over the buffer size! Offset={}\".format(\n                    self.start\n                )\n            )\n\n        # Checking for dummy data between elements\n        if possible_types:\n            while True:\n                cur_pos = buff.tell()\n                self._type, self._header_size, self._size = unpack(\n                    '<HHL', buff.read(self.SIZE)\n                )\n\n                # cases where packers set the EndNamespace with zero size: check we are the end and add the prefix + uri\n                if self._size < self.SIZE and (\n                    buff.raw.getbuffer().nbytes\n                    == cur_pos + self._header_size + 4 + 4\n                ):\n                    self._size = 24\n\n                if cur_pos == 0 or (\n                    self._type in possible_types\n                    and self._header_size >= self.SIZE\n                    and self._size > self.SIZE\n                ):\n                    break\n                buff.seek(cur_pos)\n                buff.read(1)\n                logger.warning(\n                    \"Appears that dummy data are found between elements!\"\n                )\n        else:\n            self._type, self._header_size, self._size = unpack(\n                '<HHL', buff.read(self.SIZE)\n            )\n\n        if expected_type and self._type != expected_type:\n            raise ResParserError(\n                \"Header type is not equal the expected type: Got 0x{:04x}, wanted 0x{:04x}\".format(\n                    self._type, expected_type\n                )\n            )\n\n        # Assert that the read data will fit into the chunk.\n        # The total size must be equal or larger than the header size\n        if self._header_size < self.SIZE:\n            raise ResParserError(\n                \"declared header size is smaller than required size of {}! Offset={}\".format(\n                    self.SIZE, self.start\n                )\n            )\n        if self._size < self.SIZE:\n            raise ResParserError(\n                \"declared chunk size is smaller than required size of {}! Offset={}\".format(\n                    self.SIZE, self.start\n                )\n            )\n        if self._size < self._header_size:\n            raise ResParserError(\n                \"declared chunk size ({}) is smaller than header size ({})! Offset={}\".format(\n                    self._size, self._header_size, self.start\n                )\n            )\n\n    @property\n    def type(self) -> int:\n        \"\"\"\n        Type identifier for this chunk\n        \"\"\"\n        return self._type\n\n    @property\n    def header_size(self) -> int:\n        \"\"\"\n        Size of the chunk header (in bytes).  Adding this value to\n        the address of the chunk allows you to find its associated data\n        (if any).\n        \"\"\"\n        return self._header_size\n\n    @property\n    def size(self) -> int:\n        \"\"\"\n        Total size of this chunk (in bytes).  This is the chunkSize plus\n        the size of any data associated with the chunk.  Adding this value\n        to the chunk allows you to completely skip its contents (including\n        any child chunks).  If this value is the same as chunkSize, there is\n        no data associated with the chunk.\n        \"\"\"\n        return self._size\n\n    @property\n    def end(self) -> int:\n        \"\"\"\n        Get the absolute offset inside the file, where the chunk ends.\n        This is equal to `ARSCHeader.start + ARSCHeader.size`.\n        \"\"\"\n        return self.start + self.size\n\n    def __repr__(self):\n        return \"<ARSCHeader idx='0x{:08x}' type='{}' header_size='{}' size='{}'>\".format(\n            self.start, self.type, self.header_size, self.size\n        )\n\n\nclass ARSCResTablePackage:\n    \"\"\"\n    A `ResTable_package`\n\n    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#861\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, header: ARSCHeader) -> None:\n        self.header = header\n        self.start = buff.tell()\n        self.id = unpack('<I', buff.read(4))[0]\n        self.name = buff.read(256)\n        self.typeStrings = unpack('<I', buff.read(4))[0]\n        self.lastPublicType = unpack('<I', buff.read(4))[0]\n        self.keyStrings = unpack('<I', buff.read(4))[0]\n        self.lastPublicKey = unpack('<I', buff.read(4))[0]\n        self.mResId = self.id << 24\n\n    def get_name(self) -> None:\n        name = self.name.decode(\"utf-16\", 'replace')\n        name = name[: name.find(\"\\x00\")]\n        return name\n\n\nclass ARSCResTypeSpec:\n    \"\"\"\n    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#1327\n    \"\"\"\n\n    def __init__(\n        self, buff: BinaryIO, parent: Union[PackageContext, None] = None\n    ) -> None:\n        self.start = buff.tell()\n        self.parent = parent\n        self.id = unpack('<B', buff.read(1))[0]\n        self.res0 = unpack('<B', buff.read(1))[0]\n        self.res1 = unpack('<H', buff.read(2))[0]\n        # TODO: https://github.com/androguard/androguard/issues/1014 | Properly account for the cases where res0/1 are not zero\n        try:\n            if self.res0 != 0:\n                logger.warning(\"res0 must be zero!\")\n            if self.res1 != 0:\n                logger.warning(\"res1 must be zero!\")\n            self.entryCount = unpack('<I', buff.read(4))[0]\n\n            self.typespec_entries = []\n            for i in range(0, self.entryCount):\n                self.typespec_entries.append(unpack('<I', buff.read(4))[0])\n        except Exception as e:\n            logger.error(e)\n\n\nclass ARSCResType:\n    \"\"\"\n    This is a `ResTable_type` without it's `ResChunk_header`.\n    It contains a `ResTable_config`\n\n    See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#1364\n    \"\"\"\n\n    def __init__(\n        self, buff: BinaryIO, parent: Union[PackageContext, None] = None\n    ) -> None:\n        self.start = buff.tell()\n        self.parent = parent\n\n        self.id = unpack('<B', buff.read(1))[0]\n        # TODO there is now FLAG_SPARSE: http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#1401\n        (self.flags,) = unpack('<B', buff.read(1))\n        self.reserved = unpack('<H', buff.read(2))[0]\n        if self.reserved != 0:\n            raise ResParserError(\"reserved must be zero!\")\n        self.entryCount = unpack('<I', buff.read(4))[0]\n        self.entriesStart = unpack('<I', buff.read(4))[0]\n\n        self.mResId = (0xFF000000 & self.parent.get_mResId()) | self.id << 16\n        self.parent.set_mResId(self.mResId)\n\n        self.config = ARSCResTableConfig(buff)\n\n        logger.debug(\"Parsed {}\".format(self))\n\n    def get_type(self) -> str:\n        return self.parent.mTableStrings.getString(self.id - 1)\n\n    def get_package_name(self) -> str:\n        return self.parent.get_package_name()\n\n    def __repr__(self):\n        return (\n            \"<ARSCResType(start=0x%x, id=0x%x, flags=0x%x, entryCount=%d, entriesStart=0x%x, mResId=0x%x, %s)>\"\n            % (\n                self.start,\n                self.id,\n                self.flags,\n                self.entryCount,\n                self.entriesStart,\n                self.mResId,\n                \"table:\" + self.parent.mTableStrings.getString(self.id - 1),\n            )\n        )\n\n\nclass ARSCResTableConfig:\n    \"\"\"\n    ARSCResTableConfig contains the configuration for specific resource selection.\n    This is used on the device to determine which resources should be loaded\n    based on different properties of the device like locale or displaysize.\n\n    See the definition of `ResTable_config` in\n    http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#911\n    \"\"\"\n\n    @classmethod\n    def default_config(cls):\n        if not hasattr(cls, 'DEFAULT'):\n            cls.DEFAULT = ARSCResTableConfig(None)\n        return cls.DEFAULT\n\n    def __init__(self, buff: Union[BinaryIO, None] = None, **kwargs) -> None:\n        if buff is not None:\n            self.start = buff.tell()\n\n            # uint32_t\n            self.size = unpack('<I', buff.read(4))[0]\n\n            # union: uint16_t mcc, uint16_t mnc\n            # 0 means any\n            self.imsi = unpack('<I', buff.read(4))[0]\n\n            # uint32_t as chars \\0\\0 means any\n            # either two 7bit ASCII representing the ISO-639-1 language code\n            # or a single 16bit LE value representing ISO-639-2 3 letter code\n            self.locale = unpack('<I', buff.read(4))[0]\n\n            # struct of:\n            # uint8_t orientation\n            # uint8_t touchscreen\n            # uint16_t density\n            self.screenType = unpack('<I', buff.read(4))[0]\n\n            if self.size >= 20:\n                # struct of\n                # uint8_t keyboard\n                # uint8_t navigation\n                # uint8_t inputFlags\n                # uint8_t inputPad0\n                self.input = unpack('<I', buff.read(4))[0]\n            else:\n                logger.debug(\n                    \"This file does not have input flags! size={}\".format(\n                        self.size\n                    )\n                )\n                self.input = 0\n\n            if self.size >= 24:\n                # struct of\n                # uint16_t screenWidth\n                # uint16_t screenHeight\n                self.screenSize = unpack('<I', buff.read(4))[0]\n            else:\n                logger.debug(\n                    \"This file does not have screenSize! size={}\".format(\n                        self.size\n                    )\n                )\n                self.screenSize = 0\n\n            if self.size >= 28:\n                # struct of\n                # uint16_t sdkVersion\n                # uint16_t minorVersion  which should be always 0, as the meaning is not defined\n                self.version = unpack('<I', buff.read(4))[0]\n            else:\n                logger.debug(\n                    \"This file does not have version! size={}\".format(\n                        self.size\n                    )\n                )\n                self.version = 0\n\n            # The next three fields seems to be optional\n            if self.size >= 32:\n                # struct of\n                # uint8_t screenLayout\n                # uint8_t uiMode\n                # uint16_t smallestScreenWidthDp\n                (self.screenConfig,) = unpack('<I', buff.read(4))\n            else:\n                logger.debug(\n                    \"This file does not have a screenConfig! size={}\".format(\n                        self.size\n                    )\n                )\n                self.screenConfig = 0\n\n            if self.size >= 36:\n                # struct of\n                # uint16_t screenWidthDp\n                # uint16_t screenHeightDp\n                (self.screenSizeDp,) = unpack('<I', buff.read(4))\n            else:\n                logger.debug(\n                    \"This file does not have a screenSizeDp! size={}\".format(\n                        self.size\n                    )\n                )\n                self.screenSizeDp = 0\n\n            if self.size >= 40:\n                self.localeScript = buff.read(4)\n\n            if self.size >= 44:\n                self.localeVariant = buff.read(8)\n\n            if self.size >= 52:\n                # struct of\n                # uint8_t screenLayout2\n                # uint8_t colorMode\n                # uint16_t screenConfigPad2\n                (self.screenConfig2,) = unpack(\"<I\", buff.read(4))\n            else:\n                logger.debug(\n                    \"This file does not have a screenConfig2! size={}\".format(\n                        self.size\n                    )\n                )\n                self.screenConfig2 = 0\n\n            self.exceedingSize = self.size - (buff.tell() - self.start)\n            if self.exceedingSize > 0:\n                logger.debug(\"Skipping padding bytes!\")\n                self.padding = buff.read(self.exceedingSize)\n\n        else:\n            self.start = 0\n            self.size = 0\n            self.imsi = ((kwargs.pop('mcc', 0) & 0xFFFF) << 0) + (\n                (kwargs.pop('mnc', 0) & 0xFFFF) << 16\n            )\n\n            temp_locale = kwargs.pop('locale', 0)\n            if isinstance(temp_locale, str):\n                self.set_language_and_region(temp_locale)\n            else:\n                self.locale = temp_locale\n\n            for char_ix, char in kwargs.pop('locale', \"\")[0:4]:\n                self.locale += ord(char) << (char_ix * 8)\n\n            self.screenType = (\n                ((kwargs.pop('orientation', 0) & 0xFF) << 0)\n                + ((kwargs.pop('touchscreen', 0) & 0xFF) << 8)\n                + ((kwargs.pop('density', 0) & 0xFFFF) << 16)\n            )\n\n            self.input = (\n                ((kwargs.pop('keyboard', 0) & 0xFF) << 0)\n                + ((kwargs.pop('navigation', 0) & 0xFF) << 8)\n                + ((kwargs.pop('inputFlags', 0) & 0xFF) << 16)\n                + ((kwargs.pop('inputPad0', 0) & 0xFF) << 24)\n            )\n\n            self.screenSize = (\n                (kwargs.pop('screenWidth', 0) & 0xFFFF) << 0\n            ) + ((kwargs.pop('screenHeight', 0) & 0xFFFF) << 16)\n\n            self.version = ((kwargs.pop('sdkVersion', 0) & 0xFFFF) << 0) + (\n                (kwargs.pop('minorVersion', 0) & 0xFFFF) << 16\n            )\n\n            self.screenConfig = (\n                ((kwargs.pop('screenLayout', 0) & 0xFF) << 0)\n                + ((kwargs.pop('uiMode', 0) & 0xFF) << 8)\n                + ((kwargs.pop('smallestScreenWidthDp', 0) & 0xFFFF) << 16)\n            )\n\n            self.screenSizeDp = (\n                (kwargs.pop('screenWidthDp', 0) & 0xFFFF) << 0\n            ) + ((kwargs.pop('screenHeightDp', 0) & 0xFFFF) << 16)\n\n            # TODO add this some day...\n            self.screenConfig2 = 0\n\n            self.exceedingSize = 0\n\n    def _unpack_language_or_region(self, char_in, char_base):\n        char_out = \"\"\n        if char_in[0] & 0x80:\n            first = char_in[1] & 0x1F\n            second = ((char_in[1] & 0xE0) >> 5) + ((char_in[0] & 0x03) << 3)\n            third = (char_in[0] & 0x7C) >> 2\n            char_out += chr(first + char_base)\n            char_out += chr(second + char_base)\n            char_out += chr(third + char_base)\n        else:\n            if char_in[0]:\n                char_out += chr(char_in[0])\n            if char_in[1]:\n                char_out += chr(char_in[1])\n        return char_out\n\n    def _pack_language_or_region(self, char_in: str) -> list[int]:\n        char_out = [0x00, 0x00]\n        if len(char_in) != 2:\n            return char_out\n        char_out[0] = ord(char_in[0])\n        char_out[1] = ord(char_in[1])\n        return char_out\n\n    def set_language_and_region(self, language_region):\n        try:\n            language, region = language_region.split(\"-r\")\n        except ValueError:\n            language, region = language_region, None\n        language_bytes = self._pack_language_or_region(language)\n        if region:\n            region_bytes = self._pack_language_or_region(region)\n        else:\n            region_bytes = [0x00, 0x00]\n        self.locale = (\n            language_bytes[0]\n            | (language_bytes[1] << 8)\n            | (region_bytes[0] << 16)\n            | (region_bytes[1] << 24)\n        )\n\n    def get_language_and_region(self) -> str:\n        \"\"\"\n        Returns the combined language+region string or \\x00\\x00 for the default locale\n        :returns: the combined language and region string\n        \"\"\"\n        if self.locale != 0:\n            _language = self._unpack_language_or_region(\n                [\n                    self.locale & 0xFF,\n                    (self.locale & 0xFF00) >> 8,\n                ],\n                ord('a'),\n            )\n            _region = self._unpack_language_or_region(\n                [\n                    (self.locale & 0xFF0000) >> 16,\n                    (self.locale & 0xFF000000) >> 24,\n                ],\n                ord('0'),\n            )\n            return (_language + \"-r\" + _region) if _region else _language\n        return \"\\x00\\x00\"\n\n    def get_config_name_friendly(self) -> str:\n        \"\"\"\n        Here for legacy reasons.\n\n        use [get_qualifier][androguard.core.axml.ARSCResTableConfig.get_qualifier] instead.\n        :returns: the qualifier string\n        \"\"\"\n        return self.get_qualifier()\n\n    def get_qualifier(self) -> str:\n        \"\"\"\n        Return resource name qualifier for the current configuration.\n        for example\n\n        * `ldpi-v4`\n        * `hdpi-v4`\n\n        All possible qualifiers are listed in table 2 of <https://developer.android.com/guide/topics/resources/providing-resources>\n\n        You can find how android process this at [ResourceTypes 3243](http://aospxref.com/android-13.0.0_r3/xref/frameworks/base/libs/androidfw/ResourceTypes.cpp#3243)\n\n        :return: the resource name qualifer string\n        \"\"\"\n        res = []\n\n        mcc = self.imsi & 0xFFFF\n        mnc = (self.imsi & 0xFFFF0000) >> 16\n        if mcc != 0:\n            res.append(\"mcc%d\" % mcc)\n        if mnc != 0:\n            res.append(\"mnc%d\" % mnc)\n\n        if self.locale != 0:\n            res.append(self.get_language_and_region())\n\n        screenLayout = self.screenConfig & 0xFF\n        if (screenLayout & MASK_LAYOUTDIR) != 0:\n            if screenLayout & MASK_LAYOUTDIR == LAYOUTDIR_LTR:\n                res.append(\"ldltr\")\n            elif screenLayout & MASK_LAYOUTDIR == LAYOUTDIR_RTL:\n                res.append(\"ldrtl\")\n            else:\n                res.append(\"layoutDir_%d\" % (screenLayout & MASK_LAYOUTDIR))\n\n        smallestScreenWidthDp = (self.screenConfig & 0xFFFF0000) >> 16\n        if smallestScreenWidthDp != 0:\n            res.append(\"sw%ddp\" % smallestScreenWidthDp)\n\n        screenWidthDp = self.screenSizeDp & 0xFFFF\n        screenHeightDp = (self.screenSizeDp & 0xFFFF0000) >> 16\n        if screenWidthDp != 0:\n            res.append(\"w%ddp\" % screenWidthDp)\n        if screenHeightDp != 0:\n            res.append(\"h%ddp\" % screenHeightDp)\n\n        if (screenLayout & MASK_SCREENSIZE) != SCREENSIZE_ANY:\n            if screenLayout & MASK_SCREENSIZE == SCREENSIZE_SMALL:\n                res.append(\"small\")\n            elif screenLayout & MASK_SCREENSIZE == SCREENSIZE_NORMAL:\n                res.append(\"normal\")\n            elif screenLayout & MASK_SCREENSIZE == SCREENSIZE_LARGE:\n                res.append(\"large\")\n            elif screenLayout & MASK_SCREENSIZE == SCREENSIZE_XLARGE:\n                res.append(\"xlarge\")\n            else:\n                res.append(\n                    \"screenLayoutSize_%d\" % (screenLayout & MASK_SCREENSIZE)\n                )\n        if (screenLayout & MASK_SCREENLONG) != 0:\n            if screenLayout & MASK_SCREENLONG == SCREENLONG_NO:\n                res.append(\"notlong\")\n            elif screenLayout & MASK_SCREENLONG == SCREENLONG_YES:\n                res.append(\"long\")\n            else:\n                res.append(\n                    \"screenLayoutLong_%d\" % (screenLayout & MASK_SCREENLONG)\n                )\n\n        screenLayout2 = self.screenConfig2 & 0xFF\n        if (screenLayout2 & MASK_SCREENROUND) != 0:\n            if screenLayout2 & MASK_SCREENROUND == SCREENROUND_NO:\n                res.append(\"notround\")\n            elif screenLayout2 & MASK_SCREENROUND == SCREENROUND_YES:\n                res.append(\"round\")\n            else:\n                res.append(\n                    \"screenRound_%d\" % (screenLayout2 & MASK_SCREENROUND)\n                )\n\n        colorMode = (self.screenConfig2 & 0xFF00) >> 8\n        if (colorMode & MASK_WIDE_COLOR_GAMUT) != 0:\n            if colorMode & MASK_WIDE_COLOR_GAMUT == WIDE_COLOR_GAMUT_NO:\n                res.append(\"nowidecg\")\n            elif colorMode & MASK_WIDE_COLOR_GAMUT == WIDE_COLOR_GAMUT_YES:\n                res.append(\"widecg\")\n            else:\n                res.append(\n                    \"wideColorGamut_%d\" % (colorMode & MASK_WIDE_COLOR_GAMUT)\n                )\n\n        if (colorMode & MASK_HDR) != 0:\n            if colorMode & MASK_HDR == HDR_NO:\n                res.append(\"lowdr\")\n            elif colorMode & MASK_HDR == HDR_YES:\n                res.append(\"highdr\")\n            else:\n                res.append(\"hdr_%d\" % (colorMode & MASK_HDR))\n\n        orientation = self.screenType & 0xFF\n        if orientation != ORIENTATION_ANY:\n            if orientation == ORIENTATION_PORT:\n                res.append(\"port\")\n            elif orientation == ORIENTATION_LAND:\n                res.append(\"land\")\n            elif orientation == ORIENTATION_SQUARE:\n                res.append(\"square\")\n            else:\n                res.append(\"orientation_%d\" % orientation)\n\n        uiMode = (self.screenConfig & 0xFF00) >> 8\n        if (uiMode & MASK_UI_MODE_TYPE) != UI_MODE_TYPE_ANY:\n            ui_mode = uiMode & MASK_UI_MODE_TYPE\n            if ui_mode == UI_MODE_TYPE_DESK:\n                res.append(\"desk\")\n            elif ui_mode == UI_MODE_TYPE_CAR:\n                res.append(\"car\")\n            elif ui_mode == UI_MODE_TYPE_TELEVISION:\n                res.append(\"television\")\n            elif ui_mode == UI_MODE_TYPE_APPLIANCE:\n                res.append(\"appliance\")\n            elif ui_mode == UI_MODE_TYPE_WATCH:\n                res.append(\"watch\")\n            elif ui_mode == UI_MODE_TYPE_VR_HEADSET:\n                res.append(\"vrheadset\")\n            else:\n                res.append(\"uiModeType_%d\" % ui_mode)\n\n        if (uiMode & MASK_UI_MODE_NIGHT) != 0:\n            if uiMode & MASK_UI_MODE_NIGHT == UI_MODE_NIGHT_NO:\n                res.append(\"notnight\")\n            elif uiMode & MASK_UI_MODE_NIGHT == UI_MODE_NIGHT_YES:\n                res.append(\"night\")\n            else:\n                res.append(\"uiModeNight_%d\" % (uiMode & MASK_UI_MODE_NIGHT))\n\n        density = (self.screenType & 0xFFFF0000) >> 16\n        if density != DENSITY_DEFAULT:\n            if density == DENSITY_LOW:\n                res.append(\"ldpi\")\n            elif density == DENSITY_MEDIUM:\n                res.append(\"mdpi\")\n            elif density == DENSITY_TV:\n                res.append(\"tvdpi\")\n            elif density == DENSITY_HIGH:\n                res.append(\"hdpi\")\n            elif density == DENSITY_XHIGH:\n                res.append(\"xhdpi\")\n            elif density == DENSITY_XXHIGH:\n                res.append(\"xxhdpi\")\n            elif density == DENSITY_XXXHIGH:\n                res.append(\"xxxhdpi\")\n            elif density == DENSITY_NONE:\n                res.append(\"nodpi\")\n            elif density == DENSITY_ANY:\n                res.append(\"anydpi\")\n            else:\n                res.append(\"%ddpi\" % (density))\n\n        touchscreen = (self.screenType & 0xFF00) >> 8\n        if touchscreen != TOUCHSCREEN_ANY:\n            if touchscreen == TOUCHSCREEN_NOTOUCH:\n                res.append(\"notouch\")\n            elif touchscreen == TOUCHSCREEN_FINGER:\n                res.append(\"finger\")\n            elif touchscreen == TOUCHSCREEN_STYLUS:\n                res.append(\"stylus\")\n            else:\n                res.append(\"touchscreen_%d\" % touchscreen)\n\n        keyboard = self.input & 0xFF\n        navigation = (self.input & 0xFF00) >> 8\n        inputFlags = (self.input & 0xFF0000) >> 16\n\n        if inputFlags & MASK_KEYSHIDDEN != 0:\n            input_flags = inputFlags & MASK_KEYSHIDDEN\n            if input_flags == KEYSHIDDEN_NO:\n                res.append(\"keysexposed\")\n            elif input_flags == KEYSHIDDEN_YES:\n                res.append(\"keyshidden\")\n            elif input_flags == KEYSHIDDEN_SOFT:\n                res.append(\"keyssoft\")\n\n        if keyboard != KEYBOARD_ANY:\n            if keyboard == KEYBOARD_NOKEYS:\n                res.append(\"nokeys\")\n            elif keyboard == KEYBOARD_QWERTY:\n                res.append(\"qwerty\")\n            elif keyboard == KEYBOARD_12KEY:\n                res.append(\"12key\")\n            else:\n                res.append(\"keyboard_%d\" % keyboard)\n\n        if inputFlags & MASK_NAVHIDDEN != 0:\n            input_flags = inputFlags & MASK_NAVHIDDEN\n            if input_flags == NAVHIDDEN_NO:\n                res.append(\"navexposed\")\n            elif input_flags == NAVHIDDEN_YES:\n                res.append(\"navhidden\")\n            else:\n                res.append(\"inputFlagsNavHidden_%d\" % input_flags)\n\n        if navigation != NAVIGATION_ANY:\n            if navigation == NAVIGATION_NONAV:\n                res.append(\"nonav\")\n            elif navigation == NAVIGATION_DPAD:\n                res.append(\"dpad\")\n            elif navigation == NAVIGATION_TRACKBALL:\n                res.append(\"trackball\")\n            elif navigation == NAVIGATION_WHEEL:\n                res.append(\"wheel\")\n            else:\n                res.append(\"navigation_%d\" % navigation)\n\n        screenSize = self.screenSize\n        if screenSize != 0:\n            screenWidth = self.screenSize & 0xFFFF\n            screenHeight = (self.screenSize & 0xFFFF0000) >> 16\n            res.append(\"%dx%d\" % (screenWidth, screenHeight))\n\n        version = self.version\n        if version != 0:\n            sdkVersion = self.version & 0xFFFF\n            minorVersion = (self.version & 0xFFFF0000) >> 16\n            res.append(\"v%d\" % sdkVersion)\n            if minorVersion != 0:\n                res.append(\".%d\" % minorVersion)\n\n        return \"-\".join(res)\n\n    def get_language(self) -> str:\n        x = self.locale & 0x0000FFFF\n        return chr(x & 0x00FF) + chr((x & 0xFF00) >> 8)\n\n    def get_country(self) -> str:\n        x = (self.locale & 0xFFFF0000) >> 16\n        return chr(x & 0x00FF) + chr((x & 0xFF00) >> 8)\n\n    def get_density(self) -> str:\n        x = (self.screenType >> 16) & 0xFFFF\n        return x\n\n    def is_default(self) -> bool:\n        \"\"\"\n        Test if this is a default resource, which matches all\n\n        This is indicated that all fields are zero.\n        :returns: True if default, False otherwise\n        \"\"\"\n        return all(map(lambda x: x == 0, self._get_tuple()))\n\n    def _get_tuple(self):\n        return (\n            self.imsi,\n            self.locale,\n            self.screenType,\n            self.input,\n            self.screenSize,\n            self.version,\n            self.screenConfig,\n            self.screenSizeDp,\n            self.screenConfig2,\n        )\n\n    def __hash__(self):\n        return hash(self._get_tuple())\n\n    def __eq__(self, other):\n        return self._get_tuple() == other._get_tuple()\n\n    def __repr__(self):\n        return \"<ARSCResTableConfig '{}'={}>\".format(\n            self.get_qualifier(), repr(self._get_tuple())\n        )\n\n\nclass ARSCResTableEntry:\n    \"\"\"\n    A `ResTable_entry`.\n\n    See <https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h;l=1522;drc=442fcb158a5b2e23340b74ce2e29e5e1f5bf9d66;bpv=0;bpt=0>\n    \"\"\"\n\n    # If set, this is a complex entry, holding a set of name/value\n    # mappings.  It is followed by an array of ResTable_map structures.\n    FLAG_COMPLEX = 1\n\n    # If set, this resource has been declared public, so libraries\n    # are allowed to reference it.\n    FLAG_PUBLIC = 2\n\n    # If set, this is a weak resource and may be overriden by strong\n    # resources of the same name/type. This is only useful during\n    # linking with other resource tables.\n    FLAG_WEAK = 4\n\n    # If set, this is a compact entry with data type and value directly\n    # encoded in this entry\n    FLAG_COMPACT = 8\n\n    def __init__(\n        self,\n        buff: BinaryIO,\n        entry_offset: int,\n        expected_end_of_chunk: int,\n        mResId: int,\n        parent: Union[PackageContext, None] = None,\n    ) -> None:\n        self.start = buff.seek(entry_offset)\n        self.mResId = mResId\n        self.parent = parent\n\n        self.size = unpack('<H', buff.read(2))[0]\n        self.flags = unpack('<H', buff.read(2))[0]\n        # This is a ResStringPool_ref\n        self.index = unpack('<I', buff.read(4))[0]\n\n        if self.is_complex():\n            self.item = ARSCComplex(buff, expected_end_of_chunk, parent)\n        elif self.is_compact():\n            self.key = self.size\n            self.data = self.index\n            self.datatype = (self.flags >> 8) & 0xFF\n        else:\n            # If FLAG_COMPLEX is not set, a Res_value structure will follow\n            self.key = ARSCResStringPoolRef(buff, self.parent)\n\n        if self.is_weak():\n            logger.debug(\"Parsed {}\".format(self))\n\n    def get_index(self) -> int:\n        return self.index\n\n    def get_value(self) -> str:\n        return self.parent.mKeyStrings.getString(self.index)\n\n    def get_key_data(self) -> str:\n        if self.is_compact():\n            return self.parent.stringpool_main.getString(self.key)\n        else:\n            return self.key.get_data_value()\n\n    def is_public(self) -> bool:\n        return (self.flags & self.FLAG_PUBLIC) != 0\n\n    def is_complex(self) -> bool:\n        return (self.flags & self.FLAG_COMPLEX) != 0\n\n    def is_compact(self) -> bool:\n        return (self.flags & self.FLAG_COMPACT) != 0\n\n    def is_weak(self) -> bool:\n        return (self.flags & self.FLAG_WEAK) != 0\n\n    def __repr__(self):\n        return \"<ARSCResTableEntry idx='0x{:08x}' mResId='0x{:08x}' flags='0x{:02x}' holding={}>\".format(\n            self.start,\n            self.mResId,\n            self.flags,\n            self.item if self.is_complex() else self.key,\n        )\n\n\nclass ARSCComplex:\n    \"\"\"\n    This is actually a `ResTable_map_entry`\n\n    It contains a set of {name: value} mappings, which are of type `ResTable_map`.\n    A `ResTable_map` contains two items: `ResTable_ref` and `Res_value`.\n\n    See [ResourceTypes.h 1485](http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#1485) for `ResTable_map_entry`\n    and [ResourceTypes.h 1498](http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#1498) for `ResTable_map`\n    \"\"\"\n\n    def __init__(\n        self,\n        buff: BinaryIO,\n        expected_end_of_chunk: int,\n        parent: Union[PackageContext, None] = None,\n    ) -> None:\n        self.start = buff.tell()\n        self.parent = parent\n\n        self.id_parent = unpack('<I', buff.read(4))[0]\n        self.count = unpack('<I', buff.read(4))[0]\n\n        self.items = []\n        # Parse self.count number of `ResTable_map`\n        # these are structs of ResTable_ref and Res_value\n        # ResTable_ref is a uint32_t.\n        for i in range(0, self.count):\n            if buff.tell() + 4 > expected_end_of_chunk:\n                print(\n                    f\"We are out of bound with this complex entry. Count: {self.count}\"\n                )\n                break\n            self.items.append(\n                (\n                    unpack('<I', buff.read(4))[0],\n                    ARSCResStringPoolRef(buff, self.parent),\n                )\n            )\n\n    def __repr__(self):\n        return \"<ARSCComplex idx='0x{:08x}' parent='{}' count='{}'>\".format(\n            self.start, self.id_parent, self.count\n        )\n\n\nclass ARSCResStringPoolRef:\n    \"\"\"\n    This is actually a `Res_value`\n    It holds information about the stored resource value\n\n    See: [ResourceTypes.h 262](http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#262)\n    \"\"\"\n\n    def __init__(\n        self, buff: BinaryIO, parent: Union[PackageContext, None] = None\n    ) -> None:\n        self.start = buff.tell()\n        self.parent = parent\n\n        (self.size,) = unpack(\"<H\", buff.read(2))\n        (self.res0,) = unpack(\"<B\", buff.read(1))\n        try:\n            if self.res0 != 0:\n                logger.warning(\"res0 must be always zero!\")\n            self.data_type = unpack('<B', buff.read(1))[0]\n            # data is interpreted according to data_type\n            self.data = unpack('<I', buff.read(4))[0]\n        except Exception as e:\n            logger.error(e)\n\n    def get_data_value(self) -> str:\n        return self.parent.stringpool_main.getString(self.data)\n\n    def get_data(self) -> int:\n        return self.data\n\n    def get_data_type(self) -> bytes:\n        return self.data_type\n\n    def get_data_type_string(self) -> str:\n        return TYPE_TABLE[self.data_type]\n\n    def format_value(self) -> str:\n        \"\"\"\n        Return the formatted (interpreted) data according to `data_type`.\n        \"\"\"\n        return format_value(\n            self.data_type, self.data, self.parent.stringpool_main.getString\n        )\n\n    def is_reference(self) -> bool:\n        \"\"\"\n        Returns True if the Res_value is actually a reference to another resource\n        \"\"\"\n        return self.data_type == TYPE_REFERENCE\n\n    def __repr__(self):\n        return \"<ARSCResStringPoolRef idx='0x{:08x}' size='{}' type='{}' data='0x{:08x}'>\".format(\n            self.start,\n            self.size,\n            TYPE_TABLE.get(self.data_type, \"0x%x\" % self.data_type),\n            self.data,\n        )\n\n\ndef get_arsc_info(arscobj: ARSCParser) -> str:\n    \"\"\"\n    Return a string containing all resources packages ordered by packagename, locale and type.\n\n    :param arscobj: [ARSCParser][androguard.core.axml.ARSCParser]\n    :return: a string\n    \"\"\"\n    buff = \"\"\n    for package in arscobj.get_packages_names():\n        buff += package + \":\\n\"\n        for locale in arscobj.get_locales(package):\n            buff += \"\\t\" + repr(locale) + \":\\n\"\n            for ttype in arscobj.get_types(package, locale):\n                buff += \"\\t\\t\" + ttype + \":\\n\"\n                try:\n                    tmp_buff = (\n                        getattr(arscobj, \"get_\" + ttype + \"_resources\")(\n                            package, locale\n                        )\n                        .decode(\"utf-8\", 'replace')\n                        .split(\"\\n\")\n                    )\n                    for i in tmp_buff:\n                        buff += \"\\t\\t\\t\" + i + \"\\n\"\n                except AttributeError:\n                    pass\n    return buff\n"
  },
  {
    "path": "libs/androguard/core/axml/types.py",
    "content": "# Type definiton for (type, data) tuples representing a value\n# See http://androidxref.com/9.0.0_r3/xref/frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h#262\n\n# The 'data' is either 0 or 1, specifying this resource is either\n# undefined or empty, respectively.\nTYPE_NULL = 0x00\n# The 'data' holds a ResTable_ref, a reference to another resource\n# table entry.\nTYPE_REFERENCE = 0x01\n# The 'data' holds an attribute resource identifier.\nTYPE_ATTRIBUTE = 0x02\n# The 'data' holds an index into the containing resource table's\n# global value string pool.\nTYPE_STRING = 0x03\n# The 'data' holds a single-precision floating point number.\nTYPE_FLOAT = 0x04\n# The 'data' holds a complex number encoding a dimension value\n# such as \"100in\".\nTYPE_DIMENSION = 0x05\n# The 'data' holds a complex number encoding a fraction of a\n# container.\nTYPE_FRACTION = 0x06\n# The 'data' holds a dynamic ResTable_ref, which needs to be\n# resolved before it can be used like a TYPE_REFERENCE.\nTYPE_DYNAMIC_REFERENCE = 0x07\n# The 'data' holds an attribute resource identifier, which needs to be resolved\n# before it can be used like a TYPE_ATTRIBUTE.\nTYPE_DYNAMIC_ATTRIBUTE = 0x08\n# Beginning of integer flavors...\nTYPE_FIRST_INT = 0x10\n# The 'data' is a raw integer value of the form n..n.\nTYPE_INT_DEC = 0x10\n# The 'data' is a raw integer value of the form 0xn..n.\nTYPE_INT_HEX = 0x11\n# The 'data' is either 0 or 1, for input \"false\" or \"true\" respectively.\nTYPE_INT_BOOLEAN = 0x12\n# Beginning of color integer flavors...\nTYPE_FIRST_COLOR_INT = 0x1C\n# The 'data' is a raw integer value of the form #aarrggbb.\nTYPE_INT_COLOR_ARGB8 = 0x1C\n# The 'data' is a raw integer value of the form #rrggbb.\nTYPE_INT_COLOR_RGB8 = 0x1D\n# The 'data' is a raw integer value of the form #argb.\nTYPE_INT_COLOR_ARGB4 = 0x1E\n# The 'data' is a raw integer value of the form #rgb.\nTYPE_INT_COLOR_RGB4 = 0x1F\n# ...end of integer flavors.\nTYPE_LAST_COLOR_INT = 0x1F\n# ...end of integer flavors.\nTYPE_LAST_INT = 0x1F\n"
  },
  {
    "path": "libs/androguard/core/bytecode.py",
    "content": "# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nimport hashlib\nimport json\nimport textwrap\nfrom struct import pack\nfrom typing import TYPE_CHECKING, Union\n\nfrom androguard.core.androconf import CONF, color_range\nfrom androguard.core.dex.dex_types import Kind, Operand\n\nif TYPE_CHECKING:\n    from androguard.core.analysis import DEXBasicBlock, MethodAnalysis\n    from androguard.core.dex import DEX\n\nfrom xml.sax.saxutils import escape\n\nfrom loguru import logger\n\n\ndef _PrintBanner():\n    print_fct = CONF[\"PRINT_FCT\"]\n    print_fct(\"*\" * 75 + \"\\n\")\n\n\ndef _PrintSubBanner(title=None):\n    print_fct = CONF[\"PRINT_FCT\"]\n    if title is None:\n        print_fct(\"#\" * 20 + \"\\n\")\n    else:\n        print_fct(\"#\" * 10 + \" \" + title + \"\\n\")\n\n\ndef _PrintNote(note, tab=0):\n    print_fct = CONF[\"PRINT_FCT\"]\n    note_color = CONF[\"COLORS\"][\"NOTE\"]\n    normal_color = CONF[\"COLORS\"][\"NORMAL\"]\n    print_fct(\n        \"\\t\" * tab + \"{}# {}{}\".format(note_color, note, normal_color) + \"\\n\"\n    )\n\n\ndef _Print(name, arg):\n    \"\"\"Print arg into a correct format\"\"\"\n    buff = name + \" \"\n\n    if type(arg).__name__ == 'int':\n        buff += \"0x%x\" % arg\n    elif type(arg).__name__ == 'long':\n        buff += \"0x%x\" % arg\n    elif type(arg).__name__ == 'str':\n        buff += \"%s\" % arg\n\n    print(buff)\n\n\ndef PrettyShowEx(exceptions):\n    if len(exceptions) > 0:\n        CONF[\"PRINT_FCT\"](\"Exceptions:\\n\")\n        for i in exceptions:\n            CONF[\"PRINT_FCT\"](\n                \"\\t%s%s%s\\n\"\n                % (\n                    CONF[\"COLORS\"][\"EXCEPTION\"],\n                    i.show_buff(),\n                    CONF[\"COLORS\"][\"NORMAL\"],\n                )\n            )\n\n\ndef _PrintXRef(tag, items):\n    print_fct = CONF[\"PRINT_FCT\"]\n    for i in items:\n        print_fct(\n            \"%s: %s %s %s %s\\n\"\n            % (\n                tag,\n                i[0].get_class_name(),\n                i[0].get_name(),\n                i[0].get_descriptor(),\n                ' '.join(\"%x\" % j.get_idx() for j in i[1]),\n            )\n        )\n\n\ndef _PrintDRef(tag, items):\n    print_fct = CONF[\"PRINT_FCT\"]\n    for i in items:\n        print_fct(\n            \"%s: %s %s %s %s\\n\"\n            % (\n                tag,\n                i[0].get_class_name(),\n                i[0].get_name(),\n                i[0].get_descriptor(),\n                ' '.join(\"%x\" % j for j in i[1]),\n            )\n        )\n\n\ndef _PrintDefault(msg):\n    print_fct = CONF[\"PRINT_FCT\"]\n    print_fct(msg)\n\n\ndef _colorize_operands(operands, colors):\n    \"\"\"\n    Return strings with color coded operands\n    \"\"\"\n    for operand in operands:\n        if operand[0] == Operand.REGISTER:\n            yield \"{}v{}{}\".format(\n                colors[\"registers\"], operand[1], colors[\"normal\"]\n            )\n\n        elif operand[0] == Operand.LITERAL:\n            yield \"{}{}{}\".format(\n                colors[\"literal\"], operand[1], colors[\"normal\"]\n            )\n\n        elif operand[0] == Operand.RAW:\n            yield \"{}{}{}\".format(colors[\"raw\"], operand[1], colors[\"normal\"])\n\n        elif operand[0] == Operand.OFFSET:\n            yield \"%s%d%s\" % (colors[\"offset\"], operand[1], colors[\"normal\"])\n\n        elif operand[0] & Operand.KIND:\n            if operand[0] == (Operand.KIND + Kind.STRING):\n                yield \"{}{}{}\".format(\n                    colors[\"string\"], operand[2], colors[\"normal\"]\n                )\n            elif operand[0] == (Operand.KIND + Kind.METH):\n                yield \"{}{}{}\".format(\n                    colors[\"meth\"], operand[2], colors[\"normal\"]\n                )\n            elif operand[0] == (Operand.KIND + Kind.FIELD):\n                yield \"{}{}{}\".format(\n                    colors[\"field\"], operand[2], colors[\"normal\"]\n                )\n            elif operand[0] == (Operand.KIND + Kind.TYPE):\n                yield \"{}{}{}\".format(\n                    colors[\"type\"], operand[2], colors[\"normal\"]\n                )\n            else:\n                yield \"{}\".format(repr(operands[2]))\n        else:\n            yield \"{}\".format(repr(operands[1]))\n\n\ndef PrettyShow(basic_blocks: list[DEXBasicBlock], notes: list = []) -> None:\n    idx = 0\n\n    offset_color = CONF[\"COLORS\"][\"OFFSET\"]\n    offset_addr_color = CONF[\"COLORS\"][\"OFFSET_ADDR\"]\n    instruction_name_color = CONF[\"COLORS\"][\"INSTRUCTION_NAME\"]\n    branch_false_color = CONF[\"COLORS\"][\"BRANCH_FALSE\"]\n    branch_true_color = CONF[\"COLORS\"][\"BRANCH_TRUE\"]\n    branch_color = CONF[\"COLORS\"][\"BRANCH\"]\n    exception_color = CONF[\"COLORS\"][\"EXCEPTION\"]\n    bb_color = CONF[\"COLORS\"][\"BB\"]\n    normal_color = CONF[\"COLORS\"][\"NORMAL\"]\n    print_fct = CONF[\"PRINT_FCT\"]\n\n    colors = CONF[\"COLORS\"][\"OUTPUT\"]\n\n    for nb, i in enumerate(basic_blocks):\n        print_fct(\"{}{}{} : \\n\".format(bb_color, i.get_name(), normal_color))\n        instructions = list(i.get_instructions())\n        for ins in instructions:\n\n            # TODO: this seems wrong, notes is a list[str], but maybe it used to be a dict?\n            if nb in notes:\n                for note in notes[nb]:\n                    _PrintNote(note, 1)\n\n            print_fct(\n                \"\\t%s%-3d%s(%s%08x%s) \"\n                % (\n                    offset_color,\n                    nb,\n                    normal_color,\n                    offset_addr_color,\n                    idx,\n                    normal_color,\n                )\n            )\n            print_fct(\n                \"%s%-20s%s\"\n                % (instruction_name_color, ins.get_name(), normal_color)\n            )\n\n            operands = ins.get_operands()\n            print_fct(\"%s\" % \", \".join(_colorize_operands(operands, colors)))\n\n            op_value = ins.get_op_value()\n            if ins == instructions[-1] and i.childs:\n                print_fct(\" \")\n\n                # packed/sparse-switch\n                if (op_value == 0x2B or op_value == 0x2C) and len(\n                    i.childs\n                ) > 1:\n                    values = i.get_special_ins(idx).get_values()\n                    print_fct(\n                        \"%s[ D:%s%s \"\n                        % (\n                            branch_false_color,\n                            i.childs[0][2].get_name(),\n                            branch_color,\n                        )\n                    )\n                    print_fct(\n                        ' '.join(\n                            \"%d:%s\"\n                            % (values[j], i.childs[j + 1][2].get_name())\n                            for j in range(0, len(i.childs) - 1)\n                        )\n                        + \" ]%s\" % normal_color\n                    )\n                else:\n                    if len(i.childs) == 2:\n                        print_fct(\n                            \"{}[ {}{} \".format(\n                                branch_false_color,\n                                i.childs[0][2].get_name(),\n                                branch_true_color,\n                            )\n                        )\n                        print_fct(\n                            ' '.join(\n                                \"%s\" % c[2].get_name() for c in i.childs[1:]\n                            )\n                            + \" ]%s\" % normal_color\n                        )\n                    else:\n                        print_fct(\n                            \"%s[ \" % branch_color\n                            + ' '.join(\n                                \"%s\" % c[2].get_name() for c in i.childs\n                            )\n                            + \" ]%s\" % normal_color\n                        )\n\n            idx += ins.get_length()\n\n            print_fct(\"\\n\")\n\n        if i.get_exception_analysis():\n            print_fct(\n                \"\\t%s%s%s\\n\"\n                % (\n                    exception_color,\n                    i.exception_analysis.show_buff(),\n                    normal_color,\n                )\n            )\n\n        print_fct(\"\\n\")\n\n\ndef _get_operand_html(operand, registers_colors, colors):\n    \"\"\"\n    Return a HTML representation of the operand.\n    The HTML should be compatible with pydot/graphviz to be used\n    inside a node label.\n\n    This is solely used in [method2dot][androguard.core.bytecode.method2dot]\n\n    :param operand: tuple containing the operand type and operands\n    :param register_colors: key: register number, value: register color\n    :param colors: dictionary containing the register colors\n    :returns: HTML code of the operands\n    \"\"\"\n    if operand[0] == Operand.REGISTER:\n        return '<FONT color=\"{}\">v{}</FONT>'.format(\n            registers_colors[operand[1]], operand[1]\n        )\n\n    if operand[0] == Operand.LITERAL:\n        return '<FONT color=\"{}\">0x{:x}</FONT>'.format(\n            colors[\"literal\"], operand[1]\n        )\n\n    if operand[0] == Operand.RAW:\n        wrapped_adjust = '<br />'.join(\n            escape(repr(i)[1:-1]) for i in textwrap.wrap(operand[1], 64)\n        )\n        return '<FONT color=\"{}\">{}</FONT>'.format(\n            colors[\"raw\"], wrapped_adjust\n        )\n\n    if operand[0] == Operand.OFFSET:\n        return '<FONT FACE=\"Times-Italic\" color=\"{}\">@0x{:x}</FONT>'.format(\n            colors[\"offset\"], operand[1]\n        )\n\n    if operand[0] & Operand.KIND:\n        if operand[0] == (Operand.KIND + Kind.STRING):\n            wrapped_adjust = \"&quot; &#92;<br />&quot;\".join(\n                map(escape, textwrap.wrap(operand[2], 64))\n            )\n            return '<FONT color=\"{}\">&quot;{}&quot;</FONT>'.format(\n                colors[\"string\"], wrapped_adjust\n            )\n\n        if operand[0] == (Operand.KIND + Kind.METH):\n            return '<FONT color=\"{}\">{}</FONT>'.format(\n                colors[\"method\"], escape(operand[2])\n            )\n        if operand[0] == (Operand.KIND + Kind.FIELD):\n            return '<FONT color=\"{}\">{}</FONT>'.format(\n                colors[\"field\"], escape(operand[2])\n            )\n        if operand[0] == (Operand.KIND + Kind.TYPE):\n            return '<FONT color=\"{}\">{}</FONT>'.format(\n                colors[\"type\"], escape(operand[2])\n            )\n\n        return escape(str(operand[2]))\n\n    return escape(str(operand[1]))\n\n\ndef method2dot(\n    mx: MethodAnalysis, colors: Union[dict[str, str], None] = None\n) -> str:\n    \"\"\"\n    Export analysis method to dot format.\n\n    A control flow graph is created by using the concept of BasicBlocks.\n    Each BasicBlock is a sequence of opcode without any jumps or branch.\n\n    :param mx: `androguard.core.analysis.analysis.MethodAnalysis`\n    :param colors: dict of colors to use, if colors is `None` the default colors are used\n\n    :returns: a string which contains the dot graph\n    \"\"\"\n\n    font_face = \"monospace\"\n\n    if not colors:\n        colors = {\n            \"true_branch\": \"green\",\n            \"false_branch\": \"red\",\n            \"default_branch\": \"purple\",\n            \"jump_branch\": \"blue\",\n            \"bg_idx\": \"lightgray\",\n            \"idx\": \"blue\",\n            \"bg_start_idx\": \"yellow\",\n            \"bg_instruction\": \"lightgray\",\n            \"instruction_name\": \"black\",\n            \"instructions_operands\": \"yellow\",\n            \"raw\": \"red\",\n            \"string\": \"red\",\n            \"literal\": \"green\",\n            \"offset\": \"#4000FF\",\n            \"method\": \"#DF3A01\",\n            \"field\": \"#088A08\",\n            \"type\": \"#0000FF\",\n            \"registers_range\": (\"#999933\", \"#6666FF\"),\n        }\n\n    node_tpl = \"\"\"\n    struct_%s [label=<\n        <TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"3\">\n            %s\n        </TABLE>\n    >];\n    \"\"\"\n    label_tpl = \"\"\"\n    <TR>\n        <TD ALIGN=\"LEFT\" BGCOLOR=\"%s\">\n            <FONT FACE=\"{font_face}\" color=\"%s\">%04x</FONT>\n        </TD>\n        <TD ALIGN=\"LEFT\" BGCOLOR=\"%s\">\n            <FONT FACE=\"{font_face}\" color=\"%s\">%s</FONT> %s\n        </TD>\n    </TR>\n    \"\"\".format(\n        font_face=font_face\n    )\n\n    link_tpl = '<TR><TD PORT=\"{}\"></TD></TR>\\n'\n\n    edges_html = \"\"\n    blocks_html = \"\"\n\n    method = mx.get_method()\n\n    # This is used as a seed to create unique hashes for the nodes\n    sha256 = hashlib.sha256(\n        (\n            mx.get_method().get_class_name()\n            + mx.get_method().get_name()\n            + mx.get_method().get_descriptor()\n        ).encode(\"utf-8\")\n    ).hexdigest()\n\n    # Collect all used Registers and create colors\n    if method.get_code() and method.get_code().get_registers_size() != 0:\n        registers = {\n            i: c\n            for i, c in enumerate(\n                color_range(\n                    colors[\"registers_range\"][0],\n                    colors[\"registers_range\"][1],\n                    method.get_code().get_registers_size(),\n                )\n            )\n        }\n    else:\n        registers = dict()\n\n    new_links = []\n\n    # Go through all basic blocks and create the CFG\n    for basic_block in mx.basic_blocks:\n        ins_idx = basic_block.start\n        block_id = hashlib.md5(\n            (sha256 + basic_block.get_name()).encode(\"utf-8\")\n        ).hexdigest()\n\n        content = link_tpl.format('header')\n\n        for instruction in basic_block.get_instructions():\n            if instruction.get_op_value() in (0x2B, 0x2C):\n                new_links.append(\n                    (\n                        basic_block,\n                        ins_idx,\n                        instruction.get_ref_off() * 2 + ins_idx,\n                    )\n                )\n            elif instruction.get_op_value() == 0x26:\n                new_links.append(\n                    (\n                        basic_block,\n                        ins_idx,\n                        instruction.get_ref_off() * 2 + ins_idx,\n                    )\n                )\n\n            operands = instruction.get_operands(ins_idx)\n            output = \", \".join(\n                _get_operand_html(i, registers, colors) for i in operands\n            )\n\n            bg_idx = colors[\"bg_idx\"]\n            if ins_idx == 0 and \"bg_start_idx\" in colors:\n                bg_idx = colors[\"bg_start_idx\"]\n\n            content += label_tpl % (\n                bg_idx,\n                colors[\"idx\"],\n                ins_idx,\n                colors[\"bg_instruction\"],\n                colors[\"instruction_name\"],\n                instruction.get_name(),\n                output,\n            )\n\n            ins_idx += instruction.get_length()\n\n        # all blocks from one method parsed\n        # updating dot HTML content\n        content += link_tpl.format('tail')\n        blocks_html += node_tpl % (block_id, content)\n\n        # Block edges color treatment (conditional branchs colors)\n        val = colors[\"true_branch\"]\n        if len(basic_block.childs) > 1:\n            val = colors[\"false_branch\"]\n        elif len(basic_block.childs) == 1:\n            val = colors[\"jump_branch\"]\n\n        values = None\n        # The last instruction is important and still set from the loop\n        # FIXME: what if there is no instruction in the basic block?\n        if (\n            instruction.get_op_value() in (0x2B, 0x2C)\n            and len(basic_block.childs) > 1\n        ):\n            val = colors[\"default_branch\"]\n            values = [\"default\"]\n            values.extend(\n                basic_block.get_special_ins(\n                    ins_idx - instruction.get_length()\n                ).get_values()\n            )\n\n        # updating dot edges\n        for DVMBasicMethodBlockChild in basic_block.childs:\n            label_edge = \"\"\n\n            if values:\n                label_edge = values.pop(0)\n\n            child_id = hashlib.md5(\n                (sha256 + DVMBasicMethodBlockChild[-1].get_name()).encode(\n                    \"utf-8\"\n                )\n            ).hexdigest()\n            edges_html += \"struct_{}:tail -> struct_{}:header  [color=\\\"{}\\\", label=\\\"{}\\\"];\\n\".format(\n                block_id, child_id, val, label_edge\n            )\n\n            # color switch\n            if val == colors[\"false_branch\"]:\n                val = colors[\"true_branch\"]\n            elif val == colors[\"default_branch\"]:\n                val = colors[\"true_branch\"]\n\n        exception_analysis = basic_block.get_exception_analysis()\n        if exception_analysis:\n            for exception_elem in exception_analysis.exceptions:\n                exception_block = exception_elem[-1]\n                if exception_block:\n                    exception_id = hashlib.md5(\n                        (sha256 + exception_block.get_name()).encode(\"utf-8\")\n                    ).hexdigest()\n                    edges_html += \"struct_{}:tail -> struct_{}:header  [color=\\\"{}\\\", label=\\\"{}\\\"];\\n\".format(\n                        block_id, exception_id, \"black\", exception_elem[0]\n                    )\n\n    for link in new_links:\n        basic_block = link[0]\n        DVMBasicMethodBlockChild = mx.basic_blocks.get_basic_block(link[2])\n\n        if DVMBasicMethodBlockChild:\n            block_id = hashlib.md5(\n                (sha256 + basic_block.get_name()).encode(\"utf-8\")\n            ).hexdigest()\n            child_id = hashlib.md5(\n                (sha256 + DVMBasicMethodBlockChild.get_name()).encode(\"utf-8\")\n            ).hexdigest()\n\n            edges_html += \"struct_{}:tail -> struct_{}:header  [color=\\\"{}\\\", label=\\\"data(0x{:x}) to @0x{:x}\\\", style=\\\"dashed\\\"];\\n\".format(\n                block_id, child_id, \"yellow\", link[1], link[2]\n            )\n\n    method_label = (\n        method.get_class_name()\n        + \".\"\n        + method.get_name()\n        + \"->\"\n        + method.get_descriptor()\n    )\n\n    method_information = method.get_information()\n    if method_information:\n        method_label += \"\\\\nLocal registers v{} ... v{}\".format(\n            *method_information[\"registers\"]\n        )\n        if \"params\" in method_information:\n            for register, rtype in method_information[\"params\"]:\n                method_label += \"\\\\nparam v%d = %s\" % (register, rtype)\n        method_label += \"\\\\nreturn = %s\" % (method_information[\"return\"])\n\n    return {'name': method_label, 'nodes': blocks_html, 'edges': edges_html}\n\n\ndef method2format(\n    output: str,\n    _format: str = \"png\",\n    mx: Union[MethodAnalysis, None] = None,\n    raw: Union[str, None] = None,\n):\n    \"\"\"\n    Export method structure as a graph to a specific file format using dot from the graphviz package.\n    The result is written to the file specified via `output`.\n\n    There are two possibilites to give input for this method:\n\n    1) use `raw` argument and pass a dictionary containing the keys\n    `name`, `nodes` and `edges`. This can be created using [method2dot][androguard.core.bytecode.method2dot].\n\n    \n    2) give a [MethodAnalysis][androguard.core.analysis.analysis.MethodAnalysis].\n\n    This function requires pydot!\n\n    There is a special format `raw` which saves the dot buffer before it\n    is handled by pydot.\n\n    :param output: output filename\n    :param _format: format type (png, jpg ...). Can use all formats which are understood by pydot.\n    :param mx: specify the `MethodAnalysis` object\n    :param raw: use directly a dot raw buffer if None\n    \"\"\"\n    # pydot is optional, it's only needed for png, jpg formats\n    import pydot\n\n    if raw:\n        data = raw\n    else:\n        data = method2dot(mx)\n\n    buff = \"\"\"\n    digraph {{\n        graph [rankdir=TB]\n        node [shape=plaintext]\n\n        subgraph cluster_{clustername}\n        {{\n            label=\"{classname}\"\n            {nodes}\n        }}\n\n        {edges}\n    }}\n    \"\"\".format(\n        clustername=hashlib.md5(output.encode(\"UTF-8\")).hexdigest(),\n        classname=data['name'],\n        nodes=data['nodes'],\n        edges=data['edges'],\n    )\n\n    # NOTE: In certain cases the graph_from_dot_data function might fail.\n    # There is a bug in the code that certain html strings are interpreted as comment\n    # and therefore the dot buffer which is passed to graphviz is invalid.\n    # We can not really do anything here to prevent this (except for heavily\n    # escaping and replacing all characters).\n    # We hope, that this issue get's fixed in pydot, so we do not need to patch\n    # stuff here.\n    # In order to be able to debug the problems better, we will write the dot\n    # data here if the format `raw` is requested, instead of creating the graph\n    # and then writing the dot data.\n    # If you have problems with certain data, export it as dot and then run\n    # graphviz manually to see if the problem persists.\n    if _format == \"raw\":\n        with open(output, \"w\") as fp:\n            fp.write(buff)\n    else:\n        d = pydot.graph_from_dot_data(buff)\n        if len(d) > 1:\n            # Not sure what to do in this case?!\n            logger.warning(\n                \"The graph generated for '{}' has too many subgraphs! \"\n                \"Only plotting the first one.\".format(output)\n            )\n        for g in d:\n            try:\n                getattr(g, \"write_\" + _format.lower())(output)\n                break\n            except FileNotFoundError:\n                logger.error(\n                    \"Could not write graph image, ensure graphviz is installed!\"\n                )\n                raise\n\n\ndef method2png(\n    output: str, mx: MethodAnalysis, raw: Union[str, None] = None\n) -> None:\n    \"\"\"\n    Export method to a png file format\n\n    :param output: output filename\n    :param mx: specify the `MethodAnalysis` object\n    :param raw: use directly a dot raw buffer\n    \"\"\"\n    buff = raw\n    if not raw:\n        buff = method2dot(mx)\n\n    method2format(output, \"png\", mx, buff)\n\n\ndef method2jpg(\n    output: str, mx: MethodAnalysis, raw: Union[str, None] = None\n) -> None:\n    \"\"\"\n    Export method to a jpg file format\n\n    :param output: output filename\n    :param mx: specify the `MethodAnalysis` object\n    :param raw: use directly a dot raw buffer (optional)\n    \"\"\"\n    buff = raw\n    if not raw:\n        buff = method2dot(mx)\n\n    method2format(output, \"jpg\", mx, buff)\n\n\ndef vm2json(vm: DEX) -> str:\n    \"\"\"\n    Get a JSON representation of a DEX file\n\n    :param vm: `androguard.core.dex.DEX` object\n    :returns: str\n    \"\"\"\n    d = {\"name\": \"root\", \"children\": []}\n\n    for _class in vm.get_classes():\n        c_class = {\"name\": _class.get_name(), \"children\": []}\n\n        for method in _class.get_methods():\n            c_method = {\"name\": method.get_name(), \"children\": []}\n\n            c_class[\"children\"].append(c_method)\n\n        d[\"children\"].append(c_class)\n\n    return json.dumps(d)\n\n\nclass TmpBlock:\n    def __init__(self, name: str) -> None:\n        self.name = name\n\n    def get_name(self) -> str:\n        return self.name\n\n\ndef method2json(mx: MethodAnalysis, directed_graph: bool = False) -> str:\n    \"\"\"\n    Create directed or undirected graph in the json format.\n\n    :param mx: `androguard.core.analysis.analysis.MethodAnalysis`\n    :param directed_graph: `True` if a directed graph should be created (default: `False`)\n    :returns: json str\n    \"\"\"\n    if directed_graph:\n        return method2json_direct(mx)\n    return method2json_undirect(mx)\n\n\ndef method2json_undirect(mx: MethodAnalysis) -> str:\n    \"\"\"\n    Create an undirected graph in the json format\n\n    :param mx: `androguard.core.analysis.analysis.MethodAnalysis`\n    :return: json str\n    \"\"\"\n    d = {}\n    reports = []\n    d[\"reports\"] = reports\n\n    for DVMBasicMethodBlock in mx.basic_blocks.gets():\n        cblock = {\n            \"BasicBlockId\": DVMBasicMethodBlock.get_name(),\n            \"registers\": mx.get_method().get_code().get_registers_size(),\n            \"instructions\": [],\n        }\n\n        ins_idx = DVMBasicMethodBlock.start\n        for (\n            DVMBasicMethodBlockInstruction\n        ) in DVMBasicMethodBlock.get_instructions():\n            c_ins = {\n                \"idx\": ins_idx,\n                \"name\": DVMBasicMethodBlockInstruction.get_name(),\n                \"operands\": DVMBasicMethodBlockInstruction.get_operands(\n                    ins_idx\n                ),\n            }\n\n            cblock[\"instructions\"].append(c_ins)\n            ins_idx += DVMBasicMethodBlockInstruction.get_length()\n\n        cblock[\"Edge\"] = []\n        for DVMBasicMethodBlockChild in DVMBasicMethodBlock.childs:\n            cblock[\"Edge\"].append(DVMBasicMethodBlockChild[-1].get_name())\n\n        reports.append(cblock)\n\n    return json.dumps(d)\n\n\ndef method2json_direct(mx: MethodAnalysis) -> str:\n    \"\"\"\n    Create a directed graph in the json format\n\n    :param mx: `androguard.core.analysis.analysis.MethodAnalysis`\n    :returns: the method json string\n    \"\"\"\n    d = {}\n    reports = []\n    d[\"reports\"] = reports\n\n    hooks = {}\n\n    l = []\n    for DVMBasicMethodBlock in mx.basic_blocks.gets():\n        for index, DVMBasicMethodBlockChild in enumerate(\n            DVMBasicMethodBlock.childs\n        ):\n            if (\n                DVMBasicMethodBlock.get_name()\n                == DVMBasicMethodBlockChild[-1].get_name()\n            ):\n\n                preblock = TmpBlock(DVMBasicMethodBlock.get_name() + \"-pre\")\n\n                cnblock = {\n                    \"BasicBlockId\": DVMBasicMethodBlock.get_name() + \"-pre\",\n                    \"start\": DVMBasicMethodBlock.start,\n                    \"notes\": [],\n                    \"Edge\": [DVMBasicMethodBlock.get_name()],\n                    \"registers\": 0,\n                    \"instructions\": [],\n                    \"info_bb\": 0,\n                }\n\n                l.append(cnblock)\n\n                for parent in DVMBasicMethodBlock.fathers:\n                    hooks[parent[-1].get_name()] = []\n                    hooks[parent[-1].get_name()].append(preblock)\n\n                    for idx, child in enumerate(parent[-1].childs):\n                        if (\n                            child[-1].get_name()\n                            == DVMBasicMethodBlock.get_name()\n                        ):\n                            hooks[parent[-1].get_name()].append(child[-1])\n\n    for DVMBasicMethodBlock in mx.basic_blocks.gets():\n        cblock = {\n            \"BasicBlockId\": DVMBasicMethodBlock.get_name(),\n            \"start\": DVMBasicMethodBlock.start,\n            \"notes\": DVMBasicMethodBlock.get_notes(),\n            \"registers\": mx.get_method().get_code().get_registers_size(),\n            \"instructions\": [],\n        }\n\n        ins_idx = DVMBasicMethodBlock.start\n        last_instru = None\n        for (\n            DVMBasicMethodBlockInstruction\n        ) in DVMBasicMethodBlock.get_instructions():\n            c_ins = {\n                \"idx\": ins_idx,\n                \"name\": DVMBasicMethodBlockInstruction.get_name(),\n                \"operands\": DVMBasicMethodBlockInstruction.get_operands(\n                    ins_idx\n                ),\n            }\n\n            cblock[\"instructions\"].append(c_ins)\n\n            if (\n                DVMBasicMethodBlockInstruction.get_op_value() == 0x2B\n                or DVMBasicMethodBlockInstruction.get_op_value() == 0x2C\n            ):\n                values = DVMBasicMethodBlock.get_special_ins(ins_idx)\n                cblock[\"info_next\"] = values.get_values()\n\n            ins_idx += DVMBasicMethodBlockInstruction.get_length()\n            last_instru = DVMBasicMethodBlockInstruction\n\n        cblock[\"info_bb\"] = 0\n        if DVMBasicMethodBlock.childs:\n            if len(DVMBasicMethodBlock.childs) > 1:\n                cblock[\"info_bb\"] = 1\n\n            if (\n                last_instru.get_op_value() == 0x2B\n                or last_instru.get_op_value() == 0x2C\n            ):\n                cblock[\"info_bb\"] = 2\n\n        cblock[\"Edge\"] = []\n        for DVMBasicMethodBlockChild in DVMBasicMethodBlock.childs:\n            ok = False\n            if DVMBasicMethodBlock.get_name() in hooks:\n                if (\n                    DVMBasicMethodBlockChild[-1]\n                    in hooks[DVMBasicMethodBlock.get_name()]\n                ):\n                    ok = True\n                    cblock[\"Edge\"].append(\n                        hooks[DVMBasicMethodBlock.get_name()][0].get_name()\n                    )\n\n            if not ok:\n                cblock[\"Edge\"].append(DVMBasicMethodBlockChild[-1].get_name())\n\n        exception_analysis = DVMBasicMethodBlock.get_exception_analysis()\n        if exception_analysis:\n            cblock[\"Exceptions\"] = exception_analysis.get()\n\n        reports.append(cblock)\n\n    reports.extend(l)\n\n    return json.dumps(d)\n\n\ndef object_to_bytes(obj: Union[str, bool, int, bytearray]) -> bytearray:\n    \"\"\"\n    Convert a object to a bytearray or call `get_raw()` of the object\n    if no useful type was found.\n\n    :param obj: the object to convert\n    :returns: the bytes\n    \"\"\"\n    if isinstance(obj, str):\n        return bytearray(obj, \"UTF-8\")\n    if isinstance(obj, bool):\n        return bytearray()\n    if isinstance(obj, int):\n        return pack(\"<L\", obj)\n    if obj is None:\n        return bytearray()\n    if isinstance(obj, bytearray):\n        return obj\n\n    return obj.get_raw()\n\n\ndef FormatClassToJava(i: str) -> str:\n    \"\"\"\n    Transform a java class name into the typed variant found in DEX files.\n\n    Example:\n\n        >>> FormatClassToJava('java.lang.Object')\n        'Ljava/lang/Object;'\n\n    :param i: the input class name\n    :returns: the formatted string\n    \"\"\"\n    return \"L\" + i.replace(\".\", \"/\") + \";\"\n\n\ndef FormatClassToPython(i: str) -> str:\n    \"\"\"\n    Transform a typed class name into a form which can be used as a python\n    attribute\n\n    Example:\n\n        >>> FormatClassToPython('Lfoo/bar/foo/Barfoo$InnerClass;')\n        'Lfoo_bar_foo_Barfoo_InnerClass'\n\n    :param i: classname to transform\n    :returns: the formatted string\n    \"\"\"\n    i = i[:-1]\n    i = i.replace(\"/\", \"_\")\n    i = i.replace(\"$\", \"_\")\n\n    return i\n\n\ndef get_package_class_name(name: str) -> tuple[str, str]:\n    \"\"\"\n    Return package and class name in a java variant from a typed variant name.\n\n    If no package could be found, the package is an empty string.\n\n    If the name is an array type, the array is discarded.\n\n    Example:\n\n        >>> get_package_class_name('Ljava/lang/Object;')\n        ('java.lang', 'Object')\n        >>> get_package_class_name('[[Ljava/lang/Object;')\n        ('java.lang', 'Object')\n        >>> get_package_class_name('LSomeClass;')\n        ('', 'SomeClass')\n\n    :param name: the name\n    :returns: the formatted package class name\n    \"\"\"\n    # name is MUTF8, so make sure we get the string variant\n    name = str(name)\n    if name[-1] != ';':\n        raise ValueError(\n            \"The name '{}' does not look like a typed name!\".format(name)\n        )\n\n    # discard array types, there might be many...\n    name = name.lstrip('[')\n\n    if name[0] != 'L':\n        raise ValueError(\n            \"The name '{}' does not look like a typed name!\".format(name)\n        )\n\n    name = name[1:-1]\n    if '/' not in name:\n        return '', name\n\n    package, clsname = name.rsplit('/', 1)\n    package = package.replace('/', '.')\n\n    return package, clsname\n\n\ndef FormatNameToPython(i: str) -> str:\n    \"\"\"\n    Transform a (method) name into a form which can be used as a python\n    attribute\n\n    Example:\n\n        >>> FormatNameToPython('<clinit>')\n        'clinit'\n\n    :param i: name to transform\n    :returns: the transformed name\n    \"\"\"\n\n    i = i.replace(\"<\", \"\")\n    i = i.replace(\">\", \"\")\n    i = i.replace(\"$\", \"_\")\n\n    return i\n\n\ndef FormatDescriptorToPython(i: str) -> str:\n    \"\"\"\n    Format a descriptor into a form which can be used as a python attribute\n\n    Example:\n\n        >>> FormatDescriptorToPython('(Ljava/lang/Long; Ljava/lang/Long; Z Z)V')\n        'Ljava_lang_LongLjava_lang_LongZZV\n\n    :param i: name to transform\n    :returns: the formatted descriptor string\n    \"\"\"\n\n    i = i.replace(\"/\", \"_\")\n    i = i.replace(\";\", \"\")\n    i = i.replace(\"[\", \"\")\n    i = i.replace(\"(\", \"\")\n    i = i.replace(\")\", \"\")\n    i = i.replace(\" \", \"\")\n    i = i.replace(\"$\", \"\")\n\n    return i\n\n\nclass Node:\n    def __init__(self, n, s):\n        self.id = n\n        self.title = s\n        self.children = []\n"
  },
  {
    "path": "libs/androguard/core/dex/__init__.py",
    "content": "# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nimport binascii\nimport hashlib\nimport io\nimport re\nimport struct\nimport sys\nimport time\nimport zlib\nfrom enum import IntEnum\nfrom struct import calcsize, pack, unpack\nfrom typing import IO, TYPE_CHECKING, BinaryIO, Iterator, Union\n\nif TYPE_CHECKING:\n    from androguard.core.analysis.analysis import Analysis, MethodAnalysis\n    from androguard.decompiler.decompiler import DecompilerDAD\n    from androguard.decompiler.node import Node\n\nfrom loguru import logger\n\nfrom androguard.core import apk, bytecode, mutf8\nfrom androguard.core.androconf import CONF\nfrom androguard.util import read_at\n\nfrom .dex_types import (\n    ACCESS_FLAGS,\n    TYPE_DESCRIPTOR,\n    Kind,\n    Operand,\n    TypeMapItem,\n)\n\n# TODO: have some more generic magic...\nDEX_FILE_MAGIC_35 = b'dex\\n035\\x00'\nDEX_FILE_MAGIC_36 = b'dex\\n036\\x00'\nDEX_FILE_MAGIC_37 = b'dex\\n037\\x00'\nDEX_FILE_MAGIC_38 = b'dex\\n038\\x00'\nDEX_FILE_MAGIC_39 = b'dex\\n039\\x00'\n\nODEX_FILE_MAGIC_35 = b'dey\\n035\\x00'\nODEX_FILE_MAGIC_36 = b'dey\\n036\\x00'\nODEX_FILE_MAGIC_37 = b'dey\\n037\\x00'\nODEX_FILE_MAGIC_38 = b'dey\\n038\\x00'\n\n# https://source.android.com/devices/tech/dalvik/dex-format#value-formats\nVALUE_BYTE = 0x00  # (none; must be 0)      ubyte[1]         signed one-byte integer value\nVALUE_SHORT = 0x02  # size - 1 (0..1)  ubyte[size]    signed two-byte integer value, sign-extended\nVALUE_CHAR = 0x03  # size - 1 (0..1)  ubyte[size]    unsigned two-byte integer value, zero-extended\nVALUE_INT = 0x04  # size - 1 (0..3)  ubyte[size]    signed four-byte integer value, sign-extended\nVALUE_LONG = 0x06  # size - 1 (0..7)  ubyte[size]    signed eight-byte integer value, sign-extended\nVALUE_FLOAT = 0x10  # size - 1 (0..3)  ubyte[size]    four-byte bit pattern, zero-extended to the right, and interpreted as an IEEE754 32-bit floating point value\nVALUE_DOUBLE = 0x11  # size - 1 (0..7)  ubyte[size]    eight-byte bit pattern, zero-extended to the right, and interpreted as an IEEE754 64-bit floating point value\nVALUE_STRING = 0x17  # size - 1 (0..3)  ubyte[size]    unsigned (zero-extended) four-byte integer value, interpreted as an index into the string_ids section and representing a string value\nVALUE_TYPE = 0x18  # size - 1 (0..3)  ubyte[size]    unsigned (zero-extended) four-byte integer value, interpreted as an index into the type_ids section and representing a reflective type/class value\nVALUE_FIELD = 0x19  # size - 1 (0..3)  ubyte[size]    unsigned (zero-extended) four-byte integer value, interpreted as an index into the field_ids section and representing a reflective field value\nVALUE_METHOD = 0x1A  # size - 1 (0..3)  ubyte[size]    unsigned (zero-extended) four-byte integer value, interpreted as an index into the method_ids section and representing a reflective method value\nVALUE_ENUM = 0x1B  # size - 1 (0..3)  ubyte[size]    unsigned (zero-extended) four-byte integer value, interpreted as an index into the field_ids section and representing the value of an enumerated type constant\nVALUE_ARRAY = 0x1C  # (none; must be 0)      encoded_array  an array of values, in the format specified by \"encoded_array Format\" below. The size of the value is implicit in the encoding.\nVALUE_ANNOTATION = 0x1D  # (none; must be 0)      encoded_annotation     a sub-annotation, in the format specified by \"encoded_annotation Format\" below. The size of the value is implicit in the encoding.\nVALUE_NULL = 0x1E  # (none; must be 0)      (none)  null reference value\nVALUE_BOOLEAN = 0x1F  # boolean (0..1) (none)  one-bit value; 0 for false and 1 for true. The bit is represented in the value_arg.\n\n# https://source.android.com/devices/tech/dalvik/dex-format#debug-info-item\nDBG_END_SEQUENCE = (\n    0x00  # (none)  terminates a debug info sequence for a code_item\n)\nDBG_ADVANCE_PC = 0x01  # uleb128 addr_diff       addr_diff: amount to add to address register    advances the address register without emitting a positions entry\nDBG_ADVANCE_LINE = 0x02  # sleb128 line_diff       line_diff: amount to change line register by    advances the line register without emitting a positions entry\nDBG_START_LOCAL = 0x03  # uleb128 register_num\n#    uleb128p1 name_idx\n#    uleb128p1 type_idx\n#         register_num: register that will contain local name_idx: string index of the name\n#         type_idx: type index of the type  introduces a local variable at the current address. Either name_idx or type_idx may be NO_INDEX to indicate that that value is unknown.\nDBG_START_LOCAL_EXTENDED = 0x04  # uleb128 register_num uleb128p1 name_idx uleb128p1 type_idx uleb128p1 sig_idx\n#         register_num: register that will contain local\n#         name_idx: string index of the name\n#         type_idx: type index of the type\n#         sig_idx: string index of the type signature\n# introduces a local with a type signature at the current address. Any of name_idx, type_idx, or sig_idx may be NO_INDEX to indicate that that value is unknown. (\n# If sig_idx is -1, though, the same data could be represented more efficiently using the opcode DBG_START_LOCAL.)\n# Note: See the discussion under \"dalvik.annotation.Signature\" below for caveats about handling signatures.\nDBG_END_LOCAL = 0x05  # uleb128 register_num\n#           register_num: register that contained local\n#           marks a currently-live local variable as out of scope at the current address\nDBG_RESTART_LOCAL = 0x06  # uleb128 register_num\n#           register_num: register to restart re-introduces a local variable at the current address.\n#           The name and type are the same as the last local that was live in the specified register.\nDBG_SET_PROLOGUE_END = 0x07  # (none)  sets the prologue_end state machine register, indicating that the next position entry that is added should be considered the end of a\n#               method prologue (an appropriate place for a method breakpoint). The prologue_end register is cleared by any special (>= 0x0a) opcode.\nDBG_SET_EPILOGUE_BEGIN = 0x08  # (none)  sets the epilogue_begin state machine register, indicating that the next position entry that is added should be considered the beginning\n#               of a method epilogue (an appropriate place to suspend execution before method exit). The epilogue_begin register is cleared by any special (>= 0x0a) opcode.\nDBG_SET_FILE = 0x09  # uleb128p1 name_idx\n#           name_idx: string index of source file name; NO_INDEX if unknown indicates that all subsequent line number entries make reference to this source file name,\n#           instead of the default name specified in code_item\nDBG_Special_Opcodes_BEGIN = 0x0A  # (none)  advances the line and address registers, emits a position entry, and clears prologue_end and epilogue_begin. See below for description.\nDBG_Special_Opcodes_END = 0xFF\nDBG_LINE_BASE = -4\nDBG_LINE_RANGE = 15\n\n\nclass InvalidInstruction(Exception):\n    pass\n\n\ndef read_null_terminated_string(f: IO) -> bytearray:\n    \"\"\"\n    Read a null terminated string from a file-like object.\n    :param f: file-like object\n\n    :returns: the bytes of the string read\n    \"\"\"\n    x = []\n    while True:\n        z = f.read(128)\n        if 0 in z:\n            s = z.split(b'\\x00', 1)\n            x.append(s[0])\n            idx = f.tell()\n            f.seek(idx - len(s[1]))\n            break\n        else:\n            x.append(z)\n    return b''.join(x)\n\n\ndef get_access_flags_string(value: int) -> str:\n    \"\"\"\n    Transform an access flag field to the corresponding string\n\n    :param value: the value of the access flags\n\n    :returns: the transformed string\n    \"\"\"\n    flags = []\n    for k, v in ACCESS_FLAGS.items():\n        if (k & value) == k:\n            flags.append(v)\n\n    return \" \".join(flags)\n\n\ndef get_type(atype: str, size: Union[int, None] = None) -> str:\n    \"\"\"\n    Retrieve the type of a descriptor (e.g : I)\n    :returns: the descriptor string\n    \"\"\"\n    if atype.startswith('java.lang'):\n        atype = atype.replace('java.lang.', '')\n    res = TYPE_DESCRIPTOR.get(atype.lstrip('java.lang'))\n    if res is None:\n        if atype[0] == 'L':\n            res = atype[1:-1].replace('/', '.')\n        elif atype[0] == '[':\n            if size is None:\n                res = '%s[]' % get_type(atype[1:])\n            else:\n                res = '{}[{}]'.format(get_type(atype[1:]), size)\n        else:\n            res = atype\n    return res\n\n\nMATH_DVM_OPCODES = {\n    \"add.\": '+',\n    \"div.\": '/',\n    \"mul.\": '*',\n    \"or.\": '|',\n    \"sub.\": '-',\n    \"and.\": '&',\n    \"xor.\": '^',\n    \"shl.\": \"<<\",\n    \"shr.\": \">>\",\n}\n\nFIELD_READ_DVM_OPCODES = [\".get\"]\nFIELD_WRITE_DVM_OPCODES = [\".put\"]\n\nBREAK_DVM_OPCODES = [\"invoke.\", \"move.\", \".put\", \"if.\"]\n\nBRANCH_DEX_OPCODES = [\n    \"throw\",\n    \"throw.\",\n    \"if.\",\n    \"goto\",\n    \"goto.\",\n    \"return\",\n    \"return.\",\n    \"packed-switch$\",\n    \"sparse-switch$\",\n]\n\n\ndef clean_name_instruction(instruction: Instruction) -> str:\n    \"\"\"USED IN ELSIM\"\"\"\n    op_value = instruction.get_op_value()\n\n    # goto range\n    if 0x28 <= op_value <= 0x2A:\n        return \"goto\"\n\n    return instruction.get_name()\n\n\ndef static_operand_instruction(instruction: Instruction) -> str:\n    \"\"\"USED IN ELSIM\"\"\"\n    buff = \"\"\n\n    if isinstance(instruction, Instruction):\n        # get instructions without registers\n        for val in instruction.get_literals():\n            buff += \"%s\" % val\n\n    op_value = instruction.get_op_value()\n    if op_value == 0x1A or op_value == 0x1B:\n        buff += instruction.get_string()\n\n    return buff\n\n\ndef get_sbyte(cm: ClassManager, buff: BinaryIO) -> int:\n    return cm.packer[\"b\"].unpack(buff.read(1))[0]\n\n\ndef get_byte(cm: ClassManager, buff: BinaryIO) -> int:\n    return cm.packer[\"B\"].unpack(buff.read(1))[0]\n\n\ndef readuleb128(cm: ClassManager, buff: BinaryIO) -> int:\n    \"\"\"\n    Read an unsigned LEB128 at the current position of the buffer\n\n    :param buff: a file like object\n    :returns: decoded unsigned LEB128\n    \"\"\"\n    result = get_byte(cm, buff)\n    if result > 0x7F:\n        cur = get_byte(cm, buff)\n        result = (result & 0x7F) | ((cur & 0x7F) << 7)\n        if cur > 0x7F:\n            cur = get_byte(cm, buff)\n            result |= (cur & 0x7F) << 14\n            if cur > 0x7F:\n                cur = get_byte(cm, buff)\n                result |= (cur & 0x7F) << 21\n                if cur > 0x7F:\n                    cur = get_byte(cm, buff)\n                    if cur > 0x0F:\n                        logger.warning(\"possible error while decoding number\")\n                    result |= cur << 28\n\n    return result\n\n\ndef readuleb128p1(cm: ClassManager, buff: BinaryIO) -> int:\n    \"\"\"\n    Read an unsigned LEB128p1 at the current position of the buffer.\n    This format is the same as uLEB128 but has the ability to store the value -1.\n\n    :param buff: a file like object\n    :return: decoded uLEB128p1\n    \"\"\"\n    return readuleb128(cm, buff) - 1\n\n\ndef readsleb128(cm: ClassManager, buff: BinaryIO) -> int:\n    \"\"\"\n    Read a signed LEB128 at the current position of the buffer.\n\n    :param buff: a file like object\n    :return: decoded sLEB128\n    \"\"\"\n    result = 0\n    shift = 0\n\n    for x in range(0, 5):\n        cur = get_byte(cm, buff)\n        result |= (cur & 0x7F) << shift\n        shift += 7\n\n        if not cur & 0x80:\n            bit_left = max(32 - shift, 0)\n            result = result << bit_left\n            if result > 0x7FFFFFFF:\n                result = (0x7FFFFFFF & result) - 0x80000000\n            result = result >> bit_left\n            break\n\n    return result\n\n\ndef writeuleb128(cm: ClassManager, value: int) -> bytearray:\n    \"\"\"\n    Convert an integer value to the corresponding unsigned LEB128.\n\n    Raises a value error, if the given value is negative.\n\n    :raises ValueError: if given value is negative\n    :param value: non-negative integer\n    :returns: bytes\n    \"\"\"\n    if value < 0:\n        raise ValueError(\"value must be non-negative!\")\n\n    remaining = value >> 7\n\n    buff = bytearray()\n    while remaining > 0:\n        buff += cm.packer[\"B\"].pack(((value & 0x7F) | 0x80))\n\n        value = remaining\n        remaining >>= 7\n\n    buff += cm.packer[\"B\"].pack(value & 0x7F)\n    return buff\n\n\ndef writesleb128(cm: ClassManager, value: int) -> bytearray:\n    \"\"\"\n    Convert an integer value to the corresponding signed LEB128\n\n    :param value: integer value\n    :return: bytes\n    \"\"\"\n    remaining = value >> 7\n    hasMore = True\n    buff = bytearray()\n\n    if (value & (-sys.maxsize - 1)) == 0:\n        end = 0\n    else:\n        end = -1\n\n    while hasMore:\n        hasMore = (remaining != end) or ((remaining & 1) != ((value >> 6) & 1))\n        tmp = 0\n        if hasMore:\n            tmp = 0x80\n\n        buff += cm.packer[\"B\"].pack((value & 0x7F) | tmp)\n        value = remaining\n        remaining >>= 7\n\n    return buff\n\n\ndef determineNext(i: Instruction, cur_idx: int, m: EncodedMethod) -> list:\n    \"\"\"\n    Determine the next offsets inside the bytecode of an [EncodedMethod][androguard.core.dex.EncodedMethod].\n    The offsets are calculated in number of bytes from the start of the method.\n    Note, that offsets inside the bytecode are denoted in 16bit units but this method returns actual bytes!\n\n    Offsets inside the opcode are counted from the beginning of the opcode.\n\n    The returned type is a list, as branching opcodes will have multiple paths.\n    `if` and `switch` opcodes will return more than one item in the list, while\n    `throw`, `return` and `goto` opcodes will always return a list with length one.\n\n    An offset of -1 indicates that the method is exited, for example by `throw` or `return`.\n\n    If the entered opcode is not branching or jumping, an empty list is returned.\n\n    :param i: the current Instruction\n    :param cur_idx: Index of the instruction\n    :param m: the current method\n    :return:\n    \"\"\"\n    op_value = i.get_op_value()\n\n    if (op_value == 0x27) or (0x0E <= op_value <= 0x11):\n        # throw + return*\n        return [-1]\n    elif 0x28 <= op_value <= 0x2A:\n        # all kind of 'goto'\n        off = i.get_ref_off() * 2\n        return [off + cur_idx]\n    elif 0x32 <= op_value <= 0x3D:\n        # all kind of 'if'\n        off = i.get_ref_off() * 2\n        return [cur_idx + i.get_length(), off + cur_idx]\n    elif op_value in (0x2B, 0x2C):\n        # packed/sparse switch\n        # Code flow will continue after the switch command\n        x = [cur_idx + i.get_length()]\n\n        # The payload must be read at the offset position\n        code = m.get_code().get_bc()\n        off = i.get_ref_off() * 2\n\n        # See DEX bytecode documentation:\n        # \"the instructions must be located on even-numbered bytecode offsets (that is, 4-byte aligned).\n        # In order to meet this requirement, dex generation tools must\n        # emit an extra nop instruction as a spacer if such an instruction would otherwise be unaligned.\"\n        remaining = (off + cur_idx) % 4\n        padding = 0 if remaining == 0 else (4 - remaining)\n        if padding != 0:\n            logger.warning(\n                \"Switch payload not aligned, assume stuff and add {} bytes...\".format(\n                    padding\n                )\n            )\n        data = code.get_ins_off(off + cur_idx + padding)\n\n        # TODO: some malware points to invalid code\n        # Does Android ignores the nop and searches for the switch payload?\n        # So we make sure that this is a switch payload\n        if data and (\n            isinstance(data, PackedSwitch) or isinstance(data, SparseSwitch)\n        ):\n            for target in data.get_targets():\n                x.append(target * 2 + cur_idx)\n        else:\n            logger.warning(\n                \"Could not determine payload of switch command at offset {} inside {}! \"\n                \"Possibly broken bytecode?\".format(cur_idx, m)\n            )\n\n        return x\n    return []\n\n\ndef determineException(vm: DEX, m: EncodedMethod) -> list[list]:\n    \"\"\"\n    Returns try-catch handler inside the method.\n\n    :param vm: a `DEX` object\n    :param m: `EncodedMethod` object\n    :return: a list\n    \"\"\"\n    # no exceptions !\n    if m.get_code().get_tries_size() <= 0:\n        return []\n\n    h_off = {}\n\n    handler_catch_list = m.get_code().get_handlers()\n\n    for try_item in m.get_code().get_tries():\n        offset_handler = (\n            try_item.get_handler_off() + handler_catch_list.get_off()\n        )\n        if offset_handler in h_off:\n            h_off[offset_handler].append([try_item])\n        else:\n            h_off[offset_handler] = []\n            h_off[offset_handler].append([try_item])\n\n    # print m.get_name(), \"\\t HANDLER_CATCH_LIST SIZE\", handler_catch_list.size, handler_catch_list.get_offset()\n    for handler_catch in handler_catch_list.get_list():\n        if handler_catch.get_off() not in h_off:\n            continue\n\n        for i in h_off[handler_catch.get_off()]:\n            i.append(handler_catch)\n\n    exceptions = []\n    # print m.get_name(), h_off\n    for i in h_off:\n        for value in h_off[i]:\n            try_value = value[0]\n\n            # start,end\n            z = [\n                try_value.get_start_addr() * 2,\n                (try_value.get_start_addr() * 2)\n                + (try_value.get_insn_count() * 2)\n                - 1,\n            ]\n\n            handler_catch = value[1]\n\n            # exceptions\n            for handler in handler_catch.get_handlers():\n                z.append(\n                    [\n                        vm.get_cm_type(handler.get_type_idx()),\n                        handler.get_addr() * 2,\n                    ]\n                )\n\n            if handler_catch.get_size() <= 0:\n                z.append(\n                    [\n                        \"Ljava/lang/Throwable;\",\n                        handler_catch.get_catch_all_addr() * 2,\n                    ]\n                )\n\n            exceptions.append(z)\n\n    # print m.get_name(), exceptions\n    return exceptions\n\n\nclass HeaderItem:\n    \"\"\"\n    This class can parse an `header_item` of a dex file.\n    Several checks are performed to detect if this is not an `header_item`.\n    Also the Adler32 checksum of the file is calculated in order to detect file\n    corruption.\n\n    :raises ValueError: if DEX file header is incorrect\n    :param buff: a string which represents a Buff object of the `header_item`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, size, buff: BinaryIO, cm: ClassManager) -> None:\n        logger.debug(\"HeaderItem\")\n\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        if self.offset != 0:\n            logger.warning(\n                \"Unusual DEX file, does not have the header at offset 0\"\n            )\n\n        if buff.raw.getbuffer().nbytes < self.get_length():\n            raise ValueError(\"Not a DEX file, Header too small.\")\n\n        (self.endian_tag,) = unpack('<I', read_at(buff, 40, 4))\n        cm.packer = DalvikPacker(self.endian_tag)\n\n        # Q is actually wrong, but we do not change it here and unpack our own\n        # stuff...\n        (\n            self.magic,\n            self.checksum,\n            self.signature,\n            self.file_size,\n            self.header_size,\n            endian_tag,\n            self.link_size,\n            self.link_off,\n            self.map_off,\n            self.string_ids_size,\n            self.string_ids_off,\n            self.type_ids_size,\n            self.type_ids_off,\n            self.proto_ids_size,\n            self.proto_ids_off,\n            self.field_ids_size,\n            self.field_ids_off,\n            self.method_ids_size,\n            self.method_ids_off,\n            self.class_defs_size,\n            self.class_defs_off,\n            self.data_size,\n            self.data_off,\n        ) = cm.packer['8sI20s20I'].unpack(buff.read(112))\n\n        # possible dex or dey:\n        if (\n            self.magic[:2] != b'de'\n            or self.magic[2] not in [0x78, 0x79]\n            or self.magic[3] != 0x0A\n            or self.magic[7] != 0x00\n        ):\n            raise ValueError(\n                \"This is not a DEX file! Wrong magic: {}\".format(\n                    repr(self.magic)\n                )\n            )\n\n        try:\n            self.dex_version = int(self.magic[4:7].decode('ascii'), 10)\n        except (UnicodeDecodeError, ValueError):\n            logger.warning(\n                \"Wrong DEX version: {}, trying to parse anyways\".format(\n                    repr(self.magic)\n                )\n            )\n            self.dex_version = 35  # assume a common version...\n\n        if zlib.adler32(read_at(buff, self.offset + 12)) != self.checksum:\n            raise ValueError(\"Wrong Adler32 checksum for DEX file!\")\n\n        if self.file_size != buff.raw.getbuffer().nbytes:\n            # Maybe raise an error here too...\n            logger.warning(\n                \"DEX file size is different to the buffer. Trying to parse anyways.\"\n            )\n\n        if self.header_size != 0x70:\n            raise ValueError(\n                \"This is not a DEX file! Wrong header size: '{}'\".format(\n                    self.header_size\n                )\n            )\n\n        if self.type_ids_size > 65535:\n            raise ValueError(\n                \"DEX file contains too many ({}) TYPE_IDs to be valid!\".format(\n                    self.type_ids_size\n                )\n            )\n\n        if self.proto_ids_size > 65535:\n            raise ValueError(\n                \"DEX file contains too many ({}) PROTO_IDs to be valid!\".format(\n                    self.proto_ids_size\n                )\n            )\n\n        if self.data_size % 4 != 0:\n            logger.warning(\n                \"data_size is not a multiple of sizeof(uint32_t), but try to parse anyways.\"\n            )\n\n        self.map_off_obj = None\n        self.string_off_obj = None\n        self.type_off_obj = None\n        self.proto_off_obj = None\n        self.field_off_obj = None\n        self.method_off_obj = None\n        self.class_off_obj = None\n        self.data_off_obj = None\n\n    def get_obj(self) -> bytes:\n        if self.map_off_obj is None:\n            self.map_off_obj = self.CM.get_item_by_offset(self.map_off)\n\n        if self.string_off_obj is None:\n            self.string_off_obj = self.CM.get_item_by_offset(\n                self.string_ids_off\n            )\n\n        if self.type_off_obj is None:\n            self.type_off_obj = self.CM.get_item_by_offset(self.type_ids_off)\n\n        if self.proto_off_obj is None:\n            self.proto_off_obj = self.CM.get_item_by_offset(self.proto_ids_off)\n\n        if self.field_off_obj is None:\n            self.field_off_obj = self.CM.get_item_by_offset(self.field_ids_off)\n\n        if self.method_off_obj is None:\n            self.method_off_obj = self.CM.get_item_by_offset(\n                self.method_ids_off\n            )\n\n        if self.class_off_obj is None:\n            self.class_off_obj = self.CM.get_item_by_offset(\n                self.class_defs_off\n            )\n\n        if self.data_off_obj is None:\n            self.data_off_obj = self.CM.get_item_by_offset(self.data_off)\n\n        # FIXME: has no object map_off_obj!\n        self.map_off = self.map_off_obj.get_off()\n\n        self.string_ids_size = len(self.string_off_obj)\n        self.string_ids_off = self.string_off_obj[0].get_off()\n\n        self.type_ids_size = len(self.type_off_obj.type)\n        self.type_ids_off = self.type_off_obj.get_off()\n\n        self.proto_ids_size = len(self.proto_off_obj.proto)\n        self.proto_ids_off = self.proto_off_obj.get_off()\n\n        self.field_ids_size = len(self.field_off_obj.elem)\n        self.field_ids_off = self.field_off_obj.get_off()\n\n        self.method_ids_size = len(self.method_off_obj.methods)\n        self.method_ids_off = self.method_off_obj.get_off()\n\n        self.class_defs_size = len(self.class_off_obj.class_def)\n        self.class_defs_off = self.class_off_obj.get_off()\n\n        # FIXME: data_off_obj has no map_item!!!\n        self.data_size = len(self.data_off_obj.map_item)\n        self.data_off = self.data_off_obj.get_off()\n\n        return (\n            pack(\"<Q\", self.magic)\n            + pack(\"<I\", self.checksum)\n            + pack(\"<20s\", self.signature)\n            + pack(\"<I\", self.file_size)\n            + pack(\"<I\", self.header_size)\n            + pack(\"<I\", self.endian_tag)\n            + pack(\"<I\", self.link_size)\n            + pack(\"<I\", self.link_off)\n            + pack(\"<I\", self.map_off)\n            + pack(\"<I\", self.string_ids_size)\n            + pack(\"<I\", self.string_ids_off)\n            + pack(\"<I\", self.type_ids_size)\n            + pack(\"<I\", self.type_ids_off)\n            + pack(\"<I\", self.proto_ids_size)\n            + pack(\"<I\", self.proto_ids_off)\n            + pack(\"<I\", self.field_ids_size)\n            + pack(\"<I\", self.field_ids_off)\n            + pack(\"<I\", self.method_ids_size)\n            + pack(\"<I\", self.method_ids_off)\n            + pack(\"<I\", self.class_defs_size)\n            + pack(\"<I\", self.class_defs_off)\n            + pack(\"<I\", self.data_size)\n            + pack(\"<I\", self.data_off)\n        )\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return 112\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Header Item\")\n        bytecode._PrintDefault(\n            \"magic=%s, checksum=%s, signature=%s\\n\"\n            % (\n                self.magic,\n                self.checksum,\n                binascii.hexlify(self.signature).decode(\"ASCII\"),\n            )\n        )\n        bytecode._PrintDefault(\n            \"file_size=%x, header_size=%x, endian_tag=%x\\n\"\n            % (self.file_size, self.header_size, self.endian_tag)\n        )\n        bytecode._PrintDefault(\n            \"link_size=%x, link_off=%x\\n\" % (self.link_size, self.link_off)\n        )\n        bytecode._PrintDefault(\"map_off=%x\\n\" % self.map_off)\n        bytecode._PrintDefault(\n            \"string_ids_size=%x, string_ids_off=%x\\n\"\n            % (self.string_ids_size, self.string_ids_off)\n        )\n        bytecode._PrintDefault(\n            \"type_ids_size=%x, type_ids_off=%x\\n\"\n            % (self.type_ids_size, self.type_ids_off)\n        )\n        bytecode._PrintDefault(\n            \"proto_ids_size=%x, proto_ids_off=%x\\n\"\n            % (self.proto_ids_size, self.proto_ids_off)\n        )\n        bytecode._PrintDefault(\n            \"field_ids_size=%x, field_ids_off=%x\\n\"\n            % (self.field_ids_size, self.field_ids_off)\n        )\n        bytecode._PrintDefault(\n            \"method_ids_size=%x, method_ids_off=%x\\n\"\n            % (self.method_ids_size, self.method_ids_off)\n        )\n        bytecode._PrintDefault(\n            \"class_defs_size=%x, class_defs_off=%x\\n\"\n            % (self.class_defs_size, self.class_defs_off)\n        )\n        bytecode._PrintDefault(\n            \"data_size=%x, data_off=%x\\n\" % (self.data_size, self.data_off)\n        )\n\n    def __repr__(self):\n        return self.__str__()\n\n    def __str__(self):\n        return (\n            \"Header Item magic={}, checksum={}, signature={} file_size={:X}, header_size={:X}, endian_tag={:X},\"\n            \"link_size={:X}, link_off={:X}, map_off={:X}, string_ids_size={:X}, string_ids_off={:X},  \"\n            \"type_ids_size={:X}, type_ids_off={:X}, proto_ids_size={:X}, proto_ids_off={:X}, \"\n            \"field_ids_size={:X}, field_ids_off={:X}, method_ids_size={:X}, method_ids_off={:X}, \"\n            \"class_defs_size={:X}, class_defs_off={:X}, data_size={:X}, data_off={:X}\".format(\n                self.magic,\n                self.checksum,\n                binascii.hexlify(self.signature).decode(\"ASCII\"),\n                self.file_size,\n                self.header_size,\n                self.endian_tag,\n                self.link_size,\n                self.link_off,\n                self.map_off,\n                self.string_ids_size,\n                self.string_ids_off,\n                self.type_ids_size,\n                self.type_ids_off,\n                self.proto_ids_size,\n                self.proto_ids_off,\n                self.field_ids_size,\n                self.field_ids_off,\n                self.method_ids_size,\n                self.method_ids_off,\n                self.class_defs_size,\n                self.class_defs_off,\n                self.data_size,\n                self.data_off,\n            )\n        )\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n\nclass AnnotationOffItem:\n    \"\"\"\n    This class can parse an `annotation_off_item` of a dex file\n\n    :param buff: a string which represents a Buff object of the `annotation_off_item`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n        (self.annotation_off,) = cm.packer[\"I\"].unpack(buff.read(4))\n\n    def get_annotation_off(self) -> int:\n        return self.annotation_off\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Annotation Off Item\")\n        bytecode._PrintDefault(\"annotation_off=0x%x\\n\" % self.annotation_off)\n\n    def get_obj(self) -> bytes:\n        if self.annotation_off != 0:\n            self.annotation_off = self.CM.get_obj_by_offset(\n                self.annotation_off\n            ).get_off()\n\n        return self.CM.packer[\"I\"].pack(self.annotation_off)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_obj())\n\n    def get_annotation_item(self) -> AnnotationItem:\n        return self.CM.get_annotation_item(self.get_annotation_off())\n\n\nclass AnnotationSetItem:\n    \"\"\"\n    This class can parse an `annotation_set_item` of a dex file\n\n    :param buff: a string which represents a buff object of the `annotation_set_item`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n        self.offset = buff.tell()\n\n        (self.size,) = cm.packer[\"I\"].unpack(buff.read(4))\n        self.annotation_off_item = [\n            AnnotationOffItem(buff, cm) for _ in range(self.size)\n        ]\n\n    def get_annotation_off_item(self) -> list[AnnotationOffItem]:\n        \"\"\"\n        Return the offset from the start of the file to an annotation\n\n        :returns: a list of `AnnotationOffItem`\n        \"\"\"\n        return self.annotation_off_item\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Annotation Set Item\")\n        for i in self.annotation_off_item:\n            i.show()\n\n    def get_obj(self) -> bytes:\n        return self.CM.packer[\"I\"].pack(self.size)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj() + b''.join(\n            i.get_raw() for i in self.annotation_off_item\n        )\n\n    def get_length(self) -> int:\n        length = len(self.get_obj())\n\n        for i in self.annotation_off_item:\n            length += i.get_length()\n\n        return length\n\n\nclass AnnotationSetRefItem:\n    \"\"\"\n    This class can parse an `annotation_set_ref_item` of a dex file\n    \"\"\"\n    \n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `annotation_set_ref_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        (self.annotations_off,) = cm.packer[\"I\"].unpack(buff.read(4))\n\n    def get_annotations_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the referenced annotation set or\n        0 if there are no annotations for this element.\n\n        :returns: the offset\n        \"\"\"\n        return self.annotations_off\n\n    def show(self) -> str:\n        bytecode._PrintSubBanner(\"Annotation Set Ref Item\")\n        bytecode._PrintDefault(\"annotation_off=0x%x\\n\" % self.annotations_off)\n\n    def get_obj(self) -> bytes:\n        if self.annotations_off != 0:\n            self.annotations_off = self.CM.get_obj_by_offset(\n                self.annotations_off\n            ).get_off()\n\n        return self.CM.packer[\"I\"].pack(self.annotations_off)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n\nclass AnnotationSetRefList:\n    \"\"\"\n    This class can parse an `annotation_set_ref_list_item` of a dex file\n    \"\"\"\n    \n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `annotation_set_ref_list_item`\n        :param cm: a ClassManager object\n        \"\"\"\n        self.offset = buff.tell()\n\n        self.CM = cm\n        (self.size,) = cm.packer[\"I\"].unpack(buff.read(4))\n\n        self.list = [AnnotationSetRefItem(buff, cm) for _ in range(self.size)]\n\n    def get_list(self) -> list[AnnotationSetRefItem]:\n        \"\"\"\n        Return list of [AnnotationSetRefItem][androguard.core.dex.AnnotationSetRefItem]\n\n        :returns: list of `AnnotationSetRefItem`\n        \"\"\"\n        return self.list\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Annotation Set Ref List Item\")\n        for i in self.list:\n            i.show()\n\n    def get_obj(self) -> list[AnnotationSetRefItem]:\n        return [i for i in self.list]\n\n    def get_raw(self) -> bytes:\n        return self.CM.packer[\"I\"].pack(self.size) + b''.join(\n            i.get_raw() for i in self.list\n        )\n\n    def get_length(self) -> int:\n        return len(self.get_raw())\n\n\nclass FieldAnnotation:\n    \"\"\"\n    This class can parse a `field_annotation` of a dex file\n\n    :param buff: a string which represents a buff object of the `field_annotation`\n    :param cm: a ClassManager object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.offset = buff.tell()\n\n        self.CM = cm\n        self.field_idx, self.annotations_off = cm.packer[\"2I\"].unpack(\n            buff.read(8)\n        )\n\n    def get_field_idx(self) -> int:\n        \"\"\"\n        Return the index into the `field_ids` list for the identity of the field being annotated\n\n        :returns: the index\n        \"\"\"\n        return self.field_idx\n\n    def get_annotations_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the list of annotations for the field\n\n        :returns: the offset\n        \"\"\"\n        return self.annotations_off\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Field Annotation\")\n        bytecode._PrintDefault(\n            \"field_idx=0x%x annotations_off=0x%x\\n\"\n            % (self.field_idx, self.annotations_off)\n        )\n\n    def get_obj(self) -> bytes:\n        if self.annotations_off != 0:\n            self.annotations_off = self.CM.get_obj_by_offset(\n                self.annotations_off\n            ).get_off()\n\n        return self.CM.packer[\"2I\"].pack(self.field_idx, self.annotations_off)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_raw())\n\n\nclass MethodAnnotation:\n    \"\"\"\n    This class can parse a `method_annotation` of a dex file\n\n    :param buff: a string which represents a buff object of the `method_annotation`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.offset = buff.tell()\n\n        self.CM = cm\n        self.method_idx, self.annotations_off = cm.packer[\"2I\"].unpack(\n            buff.read(8)\n        )\n\n    def get_method_idx(self) -> int:\n        \"\"\"\n        Return the index into the method_ids list for the identity of the method being annotated\n\n        :returns: the index\n        \"\"\"\n        return self.method_idx\n\n    def get_annotations_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the list of annotations for the method\n\n        :returns: the offset\n        \"\"\"\n        return self.annotations_off\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Method Annotation\")\n        bytecode._PrintDefault(\n            \"method_idx=0x%x annotations_off=0x%x\\n\"\n            % (self.method_idx, self.annotations_off)\n        )\n\n    def get_obj(self) -> bytes:\n        if self.annotations_off != 0:\n            self.annotations_off = self.CM.get_obj_by_offset(\n                self.annotations_off\n            ).get_off()\n\n        return self.CM.packer[\"2I\"].pack(self.method_idx, self.annotations_off)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_raw())\n\n\nclass ParameterAnnotation:\n    \"\"\"\n    This class can parse a `parameter_annotation` of a dex file\n\n    :param buff: a string which represents a buff object of the `parameter_annotation`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.offset = buff.tell()\n\n        self.CM = cm\n        self.method_idx, self.annotations_off = cm.packer[\"2I\"].unpack(\n            buff.read(8)\n        )\n\n    def get_method_idx(self) -> int:\n        \"\"\"\n        Return the index into the `method_ids` list for the identity of the method whose parameters are being annotated\n\n        :returns: the index\n        \"\"\"\n        return self.method_idx\n\n    def get_annotations_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the list of annotations for the method parameters\n\n        :returns: the offset\n        \"\"\"\n        return self.annotations_off\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Parameter Annotation\")\n        bytecode._PrintDefault(\n            \"method_idx=0x%x annotations_off=0x%x\\n\"\n            % (self.method_idx, self.annotations_off)\n        )\n\n    def get_obj(self) -> bytes:\n        if self.annotations_off != 0:\n            self.annotations_off = self.CM.get_obj_by_offset(\n                self.annotations_off\n            ).get_off()\n\n        return self.CM.packer[\"2I\"].pack(self.method_idx, self.annotations_off)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_raw())\n\n\nclass AnnotationsDirectoryItem:\n    \"\"\"\n    This class can parse an `annotations_directory_item` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `annotations_directory_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        (\n            self.class_annotations_off,\n            self.annotated_fields_size,\n            self.annotated_methods_size,\n            self.annotated_parameters_size,\n        ) = cm.packer[\"4I\"].unpack(buff.read(16))\n\n        self.field_annotations = [\n            FieldAnnotation(buff, cm)\n            for i in range(0, self.annotated_fields_size)\n        ]\n\n        self.method_annotations = [\n            MethodAnnotation(buff, cm)\n            for i in range(0, self.annotated_methods_size)\n        ]\n\n        self.parameter_annotations = [\n            ParameterAnnotation(buff, cm)\n            for i in range(0, self.annotated_parameters_size)\n        ]\n\n    def get_class_annotations_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the annotations made directly on the class,\n        or 0 if the class has no direct annotations\n\n        :returns: the offset\n        \"\"\"\n        return self.class_annotations_off\n\n    def get_annotation_set_item(self) -> list[AnnotationSetItem]:\n        return self.CM.get_annotation_set_item(self.class_annotations_off)\n\n    def get_annotated_fields_size(self) -> int:\n        \"\"\"\n        Return the count of fields annotated by this item\n\n        :returns: the offset\n        \"\"\"\n        return self.annotated_fields_size\n\n    def get_annotated_methods_size(self) -> int:\n        \"\"\"\n        Return the count of methods annotated by this item\n\n        :returns: the count of methods\n        \"\"\"\n        return self.annotated_methods_size\n\n    def get_annotated_parameters_size(self) -> int:\n        \"\"\"\n        Return the count of method parameter lists annotated by this item\n\n        :returns: the count of method parameter lists\n        \"\"\"\n        return self.annotated_parameters_size\n\n    def get_field_annotations(self) -> list[FieldAnnotation]:\n        \"\"\"\n        Return the list of associated [FieldAnnotation][androguard.core.dex.FieldAnnotation]\n\n        :returns: a list of `FieldAnnotation`\n        \"\"\"\n        return self.field_annotations\n\n    def get_method_annotations(self) -> list[MethodAnnotation]:\n        \"\"\"\n        Return the list of associated [MethodAnnotation][androguard.core.dex.MethodAnnotation]\n\n        :returns: a list of `MethodAnnotation`\n        \"\"\"\n        return self.method_annotations\n\n    def get_parameter_annotations(self) -> list[ParameterAnnotation]:\n        \"\"\"\n        Return the list of associated method [ParameterAnnotation][androguard.core.dex.ParameterAnnotation]\n\n        :returns: a list of `ParameterAnnotation`\n        \"\"\"\n        return self.parameter_annotations\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Annotations Directory Item\")\n        bytecode._PrintDefault(\n            \"class_annotations_off=0x%x annotated_fields_size=%d annotated_methods_size=%d annotated_parameters_size=%d\\n\"\n            % (\n                self.class_annotations_off,\n                self.annotated_fields_size,\n                self.annotated_methods_size,\n                self.annotated_parameters_size,\n            )\n        )\n\n        for i in self.field_annotations:\n            i.show()\n\n        for i in self.method_annotations:\n            i.show()\n\n        for i in self.parameter_annotations:\n            i.show()\n\n    def get_obj(self) -> bytes:\n        if self.class_annotations_off != 0:\n            self.class_annotations_off = self.CM.get_obj_by_offset(\n                self.class_annotations_off\n            ).get_off()\n\n        return self.CM.packer[\"4I\"].pack(\n            self.class_annotations_off,\n            self.annotated_fields_size,\n            self.annotated_methods_size,\n            self.annotated_parameters_size,\n        )\n\n    def get_raw(self) -> bytes:\n        return (\n            self.get_obj()\n            + b''.join(i.get_raw() for i in self.field_annotations)\n            + b''.join(i.get_raw() for i in self.method_annotations)\n            + b''.join(i.get_raw() for i in self.parameter_annotations)\n        )\n\n    def get_length(self) -> int:\n        length = len(self.get_obj())\n        for i in self.field_annotations:\n            length += i.get_length()\n\n        for i in self.method_annotations:\n            length += i.get_length()\n\n        for i in self.parameter_annotations:\n            length += i.get_length()\n\n        return length\n\n\nclass HiddenApiClassDataItem:\n    \"\"\"\n    This class can parse an `hiddenapi_class_data_item` of a dex file (from Android 10 dex version 039)\n\n    :param buff: a string which represents a Buff object of the `hiddenapi_class_data_item`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    class RestrictionApiFlag(IntEnum):\n        WHITELIST = 0\n        GREYLIST = 1\n        BLACKLIST = 2\n        GREYLIST_MAX_O = 3\n        GREYLIST_MAX_P = 4\n        GREYLIST_MAX_Q = 5\n        GREYLIST_MAX_R = 6\n\n    class DomapiApiFlag(IntEnum):\n        NONE = 0\n        CORE_PLATFORM_API = 1\n        TEST_API = 2\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        (self.section_size,) = cm.packer[\"I\"].unpack(buff.read(4))\n\n        # Find the end of the offsets array (first non-zero offset entry is the start of `flags`)\n        offsets_size = 0\n        i = 0\n        while buff.tell() - self.offset < self.section_size:\n            if offsets_size != 0 and i >= offsets_size:\n                break\n            (offset,) = cm.packer[\"I\"].unpack(buff.read(4))\n            if offset != 0 and offsets_size == 0:\n                offsets_size = (offset - 4) // 4\n            i += 1\n\n        self.flags = []\n        for i in range(offsets_size):\n            flag = readuleb128(cm, buff)\n            self.flags.append(\n                (\n                    self.RestrictionApiFlag(flag & 0b111),\n                    self.DomapiApiFlag(flag >> 3),\n                )\n            )\n\n    def get_section_size(self):\n        \"\"\"\n        Return the total size of this section\n\n        :returns: the total size\n        \"\"\"\n        return self.section_size\n\n    def get_flags(self, idx) -> tuple[RestrictionApiFlag, DomapiApiFlag]:\n        \"\"\"\n        Return a tuple of the flags per class\n\n        :param idx: The index to return the flags of (index of the class)\n\n        :returns: tuple of `RestrictionApiFlag`, `DomapiApiFlag`\n        \"\"\"\n        return self.flags[idx]\n\n    def set_off(self, off: int):\n        self.offset = off\n\n    def get_off(self):\n        return self.offset\n\n    def show(self):\n        bytecode._PrintSubBanner(\"HiddenApi Class Data Item\")\n        bytecode._PrintDefault(\"section_size=0x%x\\n\" % (self.section_size,))\n\n        for i, (rf, df) in enumerate(self.flags):\n            bytecode._PrintDefault(\"[%u] %s, %s\\n\" % (i, rf, df))\n\n    def get_obj(self):\n        base = 4 + len(self.flags)\n        raw_offsets = b''\n        raw_flags = b''\n        for rf, df in self.flags:\n            raw_offsets += self.CM.packer[\"I\"].pack(base + len(raw_flags))\n            raw_flags += writeuleb128(self.CM, (df.value << 3) | rf.value)\n\n        return (\n            self.CM.packer[\"I\"].pack(self.section_size)\n            + raw_offsets\n            + raw_flags\n        )\n\n    def get_raw(self):\n        return self.get_obj()\n\n    def get_length(self):\n        return self.section_size\n\n\nclass TypeItem:\n    \"\"\"\n    This class can parse a `type_item` of a dex file\n\n    :param buff: a string which represents a buff object of the `type_item`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n        (self.type_idx,) = cm.packer[\"H\"].unpack(buff.read(2))\n\n    def get_type_idx(self):\n        \"\"\"\n        Return the index into the `type_ids` list\n\n        :returns: the index\n        \"\"\"\n        return self.type_idx\n\n    def get_string(self):\n        \"\"\"\n        Return the type string\n\n        :returns: the type string\n        \"\"\"\n        return self.CM.get_type(self.type_idx)\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Type Item\")\n        bytecode._PrintDefault(\"type_idx=%d\\n\" % self.type_idx)\n\n    def get_obj(self):\n        return self.CM.packer[\"H\"].pack(self.type_idx)\n\n    def get_raw(self):\n        return self.get_obj()\n\n    def get_length(self):\n        return len(self.get_obj())\n\n\nclass TypeList:\n    \"\"\"\n    This class can parse a `type_list` of a dex file\n\n    :param buff: a string which represents a Buff object of the `type_list`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n        self.offset = buff.tell()\n        (self.size,) = cm.packer[\"I\"].unpack(buff.read(4))\n\n        self.list = [TypeItem(buff, cm) for _ in range(self.size)]\n\n        self.pad = b\"\"\n        if self.size % 2 != 0:\n            self.pad = buff.read(2)\n\n        self.len_pad = len(self.pad)\n\n    def get_pad(self):\n        \"\"\"\n        Return the alignment string\n\n        :returns: the alignment string\n        \"\"\"\n        return self.pad\n\n    def get_type_list_off(self):\n        \"\"\"\n        Return the offset of the item\n\n        :returns: the offset\n        \"\"\"\n        return self.offset\n\n    def get_string(self):\n        \"\"\"\n        Return the concatenation of all strings\n\n        :returns: concatenated strings\n        \"\"\"\n        return ' '.join(i.get_string() for i in self.list)\n\n    def get_size(self):\n        \"\"\"\n        Return the size of the list, in entries\n\n        :returns: the size of the list\n        \"\"\"\n        return self.size\n\n    def get_list(self):\n        \"\"\"\n        Return the list of [TypeItem][androguard.core.dex.TypeItem]\n\n        :returns: a list of `TypeItem` objects\n        \"\"\"\n        return self.list\n\n    def set_off(self, off: int):\n        self.offset = off\n\n    def get_off(self):\n        return self.offset + self.len_pad\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Type List\")\n        bytecode._PrintDefault(\"size=%d\\n\" % self.size)\n\n        for i in self.list:\n            i.show()\n\n    def get_obj(self):\n        return self.pad + self.CM.packer[\"I\"].pack(self.size)\n\n    def get_raw(self):\n        return self.get_obj() + b''.join(i.get_raw() for i in self.list)\n\n    def get_length(self):\n        length = len(self.get_obj())\n\n        for i in self.list:\n            length += i.get_length()\n\n        return length\n\n\nclass DBGBytecode:\n    def __init__(self, cm, op_value):\n        self.CM = cm\n        self.op_value = op_value\n        self.format = []\n\n    def get_op_value(self):\n        return self.op_value\n\n    def add(self, value, ttype):\n        self.format.append((value, ttype))\n\n    def get_value(self):\n        if self.get_op_value() == DBG_START_LOCAL:\n            return self.CM.get_string(self.format[1][0])\n        elif self.get_op_value() == DBG_START_LOCAL_EXTENDED:\n            return self.CM.get_string(self.format[1][0])\n\n        return None\n\n    def show(self):\n        bytecode._PrintSubBanner(\"DBGBytecode\")\n        bytecode._PrintDefault(\n            \"op_value={:x} format={} value={}\\n\".format(\n                self.op_value, str(self.format), self.get_value()\n            )\n        )\n\n    def get_obj(self):\n        return []\n\n    def get_raw(self):\n        buff = self.op_value.get_value_buff()\n        for i in self.format:\n            if i[1] == \"u\":\n                buff += writeuleb128(self.CM, i[0])\n            elif i[1] == \"s\":\n                buff += writesleb128(self.CM, i[0])\n        return buff\n\n\nclass DebugInfoItem:\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        self.line_start = readuleb128(cm, buff)\n        self.parameters_size = readuleb128(cm, buff)\n\n        # print \"line\", self.line_start, \"params\", self.parameters_size\n\n        self.parameter_names = []\n        for i in range(0, self.parameters_size):\n            self.parameter_names.append(readuleb128p1(cm, buff))\n\n        self.bytecodes = []\n        bcode = DBGBytecode(self.CM, get_byte(cm, buff))\n        self.bytecodes.append(bcode)\n\n        while bcode.get_op_value() != DBG_END_SEQUENCE:\n            bcode_value = bcode.get_op_value()\n\n            if bcode_value == DBG_ADVANCE_PC:\n                bcode.add(readuleb128(cm, buff), \"u\")\n            elif bcode_value == DBG_ADVANCE_LINE:\n                bcode.add(readsleb128(cm, buff), \"s\")\n            elif bcode_value == DBG_START_LOCAL:\n                bcode.add(readuleb128(cm, buff), \"u\")\n                bcode.add(readuleb128p1(cm, buff), \"u1\")\n                bcode.add(readuleb128p1(cm, buff), \"u1\")\n            elif bcode_value == DBG_START_LOCAL_EXTENDED:\n                bcode.add(readuleb128(cm, buff), \"u\")\n                bcode.add(readuleb128p1(cm, buff), \"u1\")\n                bcode.add(readuleb128p1(cm, buff), \"u1\")\n                bcode.add(readuleb128p1(cm, buff), \"u1\")\n            elif bcode_value == DBG_END_LOCAL:\n                bcode.add(readuleb128(cm, buff), \"u\")\n            elif bcode_value == DBG_RESTART_LOCAL:\n                bcode.add(readuleb128(cm, buff), \"u\")\n            elif bcode_value == DBG_SET_PROLOGUE_END:\n                pass\n            elif bcode_value == DBG_SET_EPILOGUE_BEGIN:\n                pass\n            elif bcode_value == DBG_SET_FILE:\n                bcode.add(readuleb128p1(cm, buff), \"u1\")\n            else:  # bcode_value >= DBG_Special_Opcodes_BEGIN and bcode_value <= DBG_Special_Opcodes_END:\n                pass\n\n            bcode = DBGBytecode(self.CM, get_byte(cm, buff))\n            self.bytecodes.append(bcode)\n\n    def get_parameters_size(self):\n        return self.parameters_size\n\n    def get_line_start(self):\n        return self.line_start\n\n    def get_parameter_names(self):\n        return self.parameter_names\n\n    def get_translated_parameter_names(self):\n        l = []\n        for i in self.parameter_names:\n            if i == -1:\n                l.append(None)\n            else:\n                l.append(self.CM.get_string(i))\n        return l\n\n    def get_bytecodes(self):\n        return self.bytecodes\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Debug Info Item\")\n        bytecode._PrintDefault(\n            \"line_start=%d parameters_size=%d\\n\"\n            % (self.line_start, self.parameters_size)\n        )\n        nb = 0\n        for i in self.parameter_names:\n            bytecode._PrintDefault(\n                \"parameter_names[%d]=%s\\n\" % (nb, self.CM.get_string(i))\n            )\n            nb += 1\n\n        for i in self.bytecodes:\n            i.show()\n\n    def get_raw(self):\n        pass\n        # return [bytecode.Buff(self.__offset, writeuleb128(self.CM, self.line_start) + \\\n        #                      writeuleb128(self.CM, self.parameters_size) + \\\n        #                      b''.join(writeuleb128(self.CM, i) for i in self.parameter_names) + \\\n        #                      b''.join(i.get_raw() for i in self.bytecodes))]\n\n    def get_off(self):\n        return self.offset\n\n\nclass DebugInfoItemEmpty:\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n\n        self.offset = buff.tell()\n        self.__buff = buff\n        self.__raw = \"\"\n\n        self.reload()\n\n    def set_off(self, off: int):\n        self.offset = off\n\n    def get_off(self):\n        return self.offset\n\n    def reload(self):\n        offset = self.offset\n\n        n = self.CM.get_next_offset_item(offset)\n\n        s_idx = self.__buff.tell()\n        self.__buff.seek(offset)\n        self.__raw = self.__buff.read(n - offset)\n        self.__buff.seek(s_idx)\n\n    def show(self):\n        pass\n\n    def get_obj(self):\n        return []\n\n    def get_raw(self):\n        return self.__raw\n\n    def get_length(self):\n        return len(self.__raw)\n\n\nclass EncodedArray:\n    \"\"\"\n    This class can parse an `encoded_array` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a buff object of the `encoded_array`\n        :param cm: a ClassManager object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.size = readuleb128(cm, buff)\n\n        self.values = [EncodedValue(buff, cm) for _ in range(self.size)]\n\n    def get_size(self):\n        \"\"\"\n        Return the number of elements in the array\n\n        :returns: int\n        \"\"\"\n        return self.size\n\n    def get_values(self) -> list[EncodedValue]:\n        \"\"\"\n        Return a series of size `encoded_value` byte sequences in the format specified by this section,\n        concatenated sequentially\n\n        :returns: a list of `EncodedValue` objects\n        \"\"\"\n        return self.values\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Encoded Array\")\n        bytecode._PrintDefault(\"size=%d\\n\" % self.size)\n\n        for i in self.values:\n            i.show()\n\n    def get_obj(self):\n        return writeuleb128(self.CM, self.size)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj() + b''.join(i.get_raw() for i in self.values)\n\n    def get_length(self):\n        length = len(self.get_obj())\n        for i in self.values:\n            length += i.get_length()\n\n        return length\n\n\nclass EncodedValue:\n    \"\"\"\n    This class can parse an `encoded_value` of a dex file\n    \"\"\"\n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `encoded_value`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n\n        self.val = get_byte(cm, buff)\n        self.value_arg = self.val >> 5\n        self.value_type = self.val & 0x1F\n\n        self.raw_value = None\n        self.value = \"\"\n\n        #  TODO: parse floats/doubles correctly\n        if VALUE_SHORT <= self.value_type < VALUE_STRING:\n            self.value, self.raw_value = self._getintvalue(\n                buff.read(self.value_arg + 1)\n            )\n        elif self.value_type == VALUE_STRING:\n            id, self.raw_value = self._getintvalue(\n                buff.read(self.value_arg + 1)\n            )\n            self.value = cm.get_raw_string(id)\n        elif self.value_type == VALUE_TYPE:\n            id, self.raw_value = self._getintvalue(\n                buff.read(self.value_arg + 1)\n            )\n            self.value = cm.get_type(id)\n        elif self.value_type == VALUE_FIELD:\n            id, self.raw_value = self._getintvalue(\n                buff.read(self.value_arg + 1)\n            )\n            self.value = cm.get_field(id)\n        elif self.value_type == VALUE_METHOD:\n            id, self.raw_value = self._getintvalue(\n                buff.read(self.value_arg + 1)\n            )\n            self.value = cm.get_method(id)\n        elif self.value_type == VALUE_ENUM:\n            id, self.raw_value = self._getintvalue(\n                buff.read(self.value_arg + 1)\n            )\n            self.value = cm.get_field(id)\n        elif self.value_type == VALUE_ARRAY:\n            self.value = EncodedArray(buff, cm)\n        elif self.value_type == VALUE_ANNOTATION:\n            self.value = EncodedAnnotation(buff, cm)\n        elif self.value_type == VALUE_BYTE:\n            self.value = get_byte(cm, buff)\n        elif self.value_type == VALUE_NULL:\n            self.value = None\n        elif self.value_type == VALUE_BOOLEAN:\n            if self.value_arg:\n                self.value = True\n            else:\n                self.value = False\n        else:\n            logger.warning(\"Unknown value 0x%x\" % self.value_type)\n\n    def get_value(self):\n        \"\"\"\n        Return the bytes representing the value, variable in length and interpreted differently for different `value_type` bytes,\n        though always little-endian\n\n        :returns: an object representing the value\n        \"\"\"\n        return self.value\n\n    def get_value_type(self):\n        return self.value_type\n\n    def get_value_arg(self):\n        return self.value_arg\n\n    def _getintvalue(self, buf):\n        ret = 0\n        shift = 0\n        for b in buf:\n            ret |= b << shift\n            shift += 8\n\n        return ret, buf\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Encoded Value\")\n        bytecode._PrintDefault(\n            \"val=%x value_arg=%x value_type=%x\\n\"\n            % (self.val, self.value_arg, self.value_type)\n        )\n\n    def get_obj(self):\n        if not isinstance(self.value, str):\n            return [self.value]\n        return []\n\n    def get_raw(self):\n        if self.raw_value is None:\n            return self.CM.packer[\"B\"].pack(\n                self.val\n            ) + bytecode.object_to_bytes(self.value)\n        else:\n            return self.CM.packer[\"B\"].pack(\n                self.val\n            ) + bytecode.object_to_bytes(self.raw_value)\n\n    def get_length(self):\n        return len(self.get_raw())\n\n\nclass AnnotationElement:\n    \"\"\"\n    This class can parse an `annotation_element` of a dex file\n\n    :param buff: a string which represents a buff object of the `annotation_element`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.name_idx = readuleb128(cm, buff)\n        self.value = EncodedValue(buff, cm)\n\n    def get_name_idx(self) -> int:\n        \"\"\"\n        Return the index to the element name, represented as an index into the `string_ids` section\n\n        :returns: the index to the name\n        \"\"\"\n        return self.name_idx\n\n    def get_value(self) -> EncodedValue:\n        \"\"\"\n        Return the element value ([EncodedValue][androguard.core.dex.EncodedValue])\n\n        :returns: a :`EncodedValue` object\n        \"\"\"\n        return self.value\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Annotation Element\")\n        bytecode._PrintDefault(\"name_idx=%d\\n\" % self.name_idx)\n        self.value.show()\n\n    def get_obj(self):\n        return writeuleb128(self.CM, self.name_idx)\n\n    def get_raw(self):\n        return self.get_obj() + self.value.get_raw()\n\n    def get_length(self):\n        return len(self.get_obj()) + self.value.get_length()\n\n\nclass EncodedAnnotation:\n    \"\"\"\n    This class can parse an `encoded_annotation` of a dex file\n    \"\"\"\n    \n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `encoded_annotation`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.type_idx = readuleb128(cm, buff)\n        self.size = readuleb128(cm, buff)\n\n        self.elements = [AnnotationElement(buff, cm) for _ in range(self.size)]\n\n    def get_type_idx(self):\n        \"\"\"\n        Return the type of the annotation. This must be a class (not array or primitive) type\n\n        :returns: the type of the annotation\n        \"\"\"\n        return self.type_idx\n\n    def get_size(self):\n        \"\"\"\n        Return the number of name-value mappings in this annotation\n\n        :returns: the number of mappings\n        \"\"\"\n        return self.size\n\n    def get_elements(self):\n        \"\"\"\n        Return the elements of the annotation, represented directly in-line (not as offsets)\n\n        :returns: a list of `AnnotationElement` objects\n        \"\"\"\n        return self.elements\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Encoded Annotation\")\n        bytecode._PrintDefault(\n            \"type_idx=%d size=%d\\n\" % (self.type_idx, self.size)\n        )\n\n        for i in self.elements:\n            i.show()\n\n    def get_obj(self):\n        return [i for i in self.elements]\n\n    def get_raw(self):\n        return (\n            writeuleb128(self.CM, self.type_idx)\n            + writeuleb128(self.CM, self.size)\n            + b''.join(i.get_raw() for i in self.elements)\n        )\n\n    def get_length(self):\n        length = len(\n            writeuleb128(self.CM, self.type_idx)\n            + writeuleb128(self.CM, self.size)\n        )\n\n        for i in self.elements:\n            length += i.get_length()\n\n        return length\n\n\nclass AnnotationItem:\n    \"\"\"\n    This class can parse an `annotation_item` of a dex file\n    \"\"\"\n    \n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `annotation_item`\n        :param cm: a `ClassManager` object \n        \"\"\"\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        self.visibility = get_byte(cm, buff)\n        self.annotation = EncodedAnnotation(buff, cm)\n\n    def get_visibility(self) -> int:\n        \"\"\"\n        Return the intended visibility of this annotation\n\n        :returns: the visibility of the annotation\n        \"\"\"\n        return self.visibility\n\n    def get_annotation(self) -> EncodedAnnotation:\n        \"\"\"\n        Return the encoded annotation contents\n\n        :returns: a `EncodedAnnotation` object\n        \"\"\"\n        return self.annotation\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Annotation Item\")\n        bytecode._PrintDefault(\"visibility=%d\\n\" % self.visibility)\n        self.annotation.show()\n\n    def get_obj(self) -> list[EncodedAnnotation]:\n        return [self.annotation]\n\n    def get_raw(self) -> bytes:\n        return (\n            self.CM.packer[\"B\"].pack(self.visibility)\n            + self.annotation.get_raw()\n        )\n\n    def get_length(self) -> int:\n        return len(self.get_raw())\n\n\nclass EncodedArrayItem:\n    \"\"\"\n    This class can parse an `encoded_array_item` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `encoded_array_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n\n        self.offset = buff.tell()\n        self.value = EncodedArray(buff, cm)\n\n    def get_value(self) -> EncodedArray:\n        \"\"\"\n        Return the bytes representing the encoded array value\n\n        :returns: a `EncodedArray` object\n        \"\"\"\n        return self.value\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Encoded Array Item\")\n        self.value.show()\n\n    def get_obj(self) -> list[EncodedArray]:\n        return [self.value]\n\n    def get_raw(self) -> bytes:\n        return self.value.get_raw()\n\n    def get_length(self) -> int:\n        return self.value.get_length()\n\n    def get_off(self) -> int:\n        return self.offset\n\n\nclass StringDataItem:\n    \"\"\"\n    This class can parse a `string_data_item` of a dex file\n\n    Strings in Dalvik files might not be representable in python!\n    This is due to the fact, that you can store any UTF-16 character inside\n    a Dalvik file, but this string might not be decodeable in python as it can\n    contain invalid surrogate-pairs.\n\n    To circumvent this issue, this class has different methods how to access the\n    string. There are also some fallbacks implemented to make a \"invalid\" string\n    printable in python.\n    Dalvik uses MUTF-8 as encoding for the strings. This encoding has the\n    advantage to allow for null terminated strings in UTF-8 encoding, as the\n    null character maps to something else.\n    Therefore you can use [get_data][androguard.core.dex.StringDataItem.get_data] to retrieve the actual data of the\n    string and can handle encoding yourself.\n    If you want a representation of the string, which should be printable in\n    python you ca use [get][androguard.core.dex.StringDataItem.get] which escapes invalid characters.\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `string_data_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        # Content of string_data_item\n        self.utf16_size = readuleb128(cm, buff)\n        self.data = read_null_terminated_string(buff)\n\n    def get_utf16_size(self) -> int:\n        \"\"\"\n        Return the size of this string, in UTF-16 code units\n\n        :returns: the size of the string\n        \"\"\"\n        return self.utf16_size\n\n    def get_data(self) -> str:\n        \"\"\"\n        Return a series of MUTF-8 code units (a.k.a. octets, a.k.a. bytes) followed by a byte of value 0\n\n        :returns: string\n        \"\"\"\n        return self.data + b\"\\x00\"\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def get(self) -> str:\n        \"\"\"\n        Returns a str object\n\n        :returns: string\n        \"\"\"\n        try:\n            return mutf8.decode(self.data)\n        except UnicodeDecodeError:\n            logger.error(\"Impossible to decode {}\".format(self.data))\n            return \"ANDROGUARD[INVALID_STRING] {}\".format(self.data)\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"String Data Item\")\n        bytecode._PrintDefault(\n            \"utf16_size=%d data=%s\\n\" % (self.utf16_size, repr(self.get()))\n        )\n\n    def get_obj(self) -> list:\n        return []\n\n    def get_raw(self) -> bytes:\n        \"\"\"\n        Returns the raw string including the ULEB128 coded length\n        and null byte string terminator\n\n        :returns: bytes\n        \"\"\"\n        return writeuleb128(self.CM, self.utf16_size) + self.data + b\"\\x00\"\n\n    def get_length(self) -> int:\n        \"\"\"\n        Get the length of the raw string including the ULEB128 coded\n        length and the null byte terminator\n\n        :return: int\n        \"\"\"\n        return len(writeuleb128(self.CM, self.utf16_size)) + len(self.data) + 1\n\n\nclass StringIdItem:\n    \"\"\"\n    This class can parse a `string_id_item` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager):\n        \"\"\"\n        :param buff: a string which represents a Buff object of the str`ing_id_item\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        (self.string_data_off,) = cm.packer[\"I\"].unpack(buff.read(4))\n\n    def get_string_data_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the string data for this item\n\n        :returns: the offset\n        \"\"\"\n        return self.string_data_off\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"String Id Item\")\n        bytecode._PrintDefault(\"string_data_off=%x\\n\" % self.string_data_off)\n\n    def get_obj(self) -> bytes:\n        if self.string_data_off != 0:\n            self.string_data_off = self.CM.get_string_by_offset(\n                self.string_data_off\n            ).get_off()\n\n        return self.CM.packer[\"I\"].pack(self.string_data_off)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_obj())\n\n\nclass TypeIdItem:\n    \"\"\"\n    This class can parse a `type_id_item` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager):\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `type_id_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        (self.descriptor_idx,) = cm.packer[\"I\"].unpack(buff.read(4))\n        self.descriptor_idx_value = self.CM.get_string(self.descriptor_idx)\n\n    def get_descriptor_idx(self) -> int:\n        \"\"\"\n        Return the index into the string_ids list for the descriptor string of this type\n\n        :returns: int\n        \"\"\"\n        return self.descriptor_idx\n\n    def get_descriptor_idx_value(self) -> str:\n        \"\"\"\n        Return the string associated to the descriptor\n\n        :returns: string\n        \"\"\"\n        return self.descriptor_idx_value\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Type Id Item\")\n        bytecode._PrintDefault(\n            \"descriptor_idx=%d descriptor_idx_value=%s\\n\"\n            % (self.descriptor_idx, self.descriptor_idx_value)\n        )\n\n    def get_obj(self) -> bytes:\n        return self.CM.packer[\"I\"].pack(self.descriptor_idx)\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_obj())\n\n\nclass TypeHIdItem:\n    \"\"\"\n    This class can parse a list of `type_id_item` of a dex file\n    \"\"\"\n\n    def __init__(self, size: int, buff: BinaryIO, cm: ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the list of `type_id_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        self.type = [TypeIdItem(buff, cm) for i in range(0, size)]\n\n    def get_type(self) -> list[TypeIdItem]:\n        \"\"\"\n        Return the list of `type_id_item`\n\n        :returns: a list of `TypeIdItem` objects\n        \"\"\"\n        return self.type\n\n    def get(self, idx: int) -> int:\n        try:\n            return self.type[idx].get_descriptor_idx()\n        except IndexError:\n            return -1\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Type List Item\")\n        for i in self.type:\n            i.show()\n\n    def get_obj(self) -> list[TypeIdItem]:\n        return [i for i in self.type]\n\n    def get_raw(self) -> bytes:\n        return b''.join(i.get_raw() for i in self.type)\n\n    def get_length(self) -> int:\n        length = 0\n        for i in self.type:\n            length += i.get_length()\n        return length\n\n\nclass ProtoIdItem:\n    \"\"\"\n    This class can parse a `proto_id_item` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager):\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `proto_id_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.shorty_idx, self.return_type_idx, self.parameters_off = cm.packer[\n            \"3I\"\n        ].unpack(buff.read(12))\n\n        self.shorty_idx_value = self.CM.get_string(self.shorty_idx)\n        self.return_type_idx_value = self.CM.get_type(self.return_type_idx)\n        self.parameters_off_value = None\n\n    def get_shorty_idx(self) -> int:\n        \"\"\"\n        Return the index into the `string_ids` list for the short-form descriptor string of this prototype\n\n        :returns: the index\n        \"\"\"\n        return self.shorty_idx\n\n    def get_return_type_idx(self) -> int:\n        \"\"\"\n        Return the index into the `type_ids` list for the return type of this prototype\n\n        :returns: the index\n        \"\"\"\n        return self.return_type_idx\n\n    def get_parameters_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the list of parameter types for this prototype, or 0 if this prototype has no parameters\n\n        :returns: the offset\n        \"\"\"\n        return self.parameters_off\n\n    def get_shorty_idx_value(self) -> str:\n        \"\"\"\n        Return the string associated to the `shorty_idx`\n\n        :returns: string\n        \"\"\"\n        if self.shorty_idx_value is None:\n            self.shorty_idx_value = self.CM.get_string(self.shorty_idx)\n        return self.shorty_idx_value\n\n    def get_return_type_idx_value(self) -> str:\n        \"\"\"\n        Return the string associated to the `return_type_idx`\n\n        :returns: string\n        \"\"\"\n        if self.return_type_idx_value is None:\n            self.return_type_idx_value = self.CM.get_type(self.return_type_idx)\n        return self.return_type_idx_value\n\n    def get_parameters_off_value(self) -> str:\n        \"\"\"\n        Return the string associated to the `parameters_off`\n\n        :returns: string\n        \"\"\"\n        if self.parameters_off_value is None:\n            params = self.CM.get_type_list(self.parameters_off)\n            self.parameters_off_value = '(' + ' '.join(params) + ')'\n        return self.parameters_off_value\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Proto Item\")\n        bytecode._PrintDefault(\n            \"shorty_idx=%d return_type_idx=%d parameters_off=%d\\n\"\n            % (self.shorty_idx, self.return_type_idx, self.parameters_off)\n        )\n        bytecode._PrintDefault(\n            \"shorty_idx_value=%s return_type_idx_value=%s parameters_off_value=%s\\n\"\n            % (\n                self.shorty_idx_value,\n                self.return_type_idx_value,\n                self.parameters_off_value,\n            )\n        )\n\n    def get_obj(self) -> bytes:\n        if self.parameters_off != 0:\n            self.parameters_off = self.CM.get_obj_by_offset(\n                self.parameters_off\n            ).get_off()\n\n        return self.CM.packer[\"3I\"].pack(\n            self.shorty_idx, self.return_type_idx, self.parameters_off\n        )\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_obj())\n\n\nclass ProtoHIdItem:\n    \"\"\"\n    This class can parse a list of `proto_id_item` of a dex file\n    \"\"\"\n\n    def __init__(self, size:int, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the list of `proto_id_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        self.proto = [ProtoIdItem(buff, cm) for i in range(0, size)]\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def get(self, idx: int) -> ProtoIdItem:\n        try:\n            return self.proto[idx]\n        except IndexError:\n            return ProtoIdItemInvalid()\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Proto List Item\")\n        for i in self.proto:\n            i.show()\n\n    def get_obj(self) -> list[ProtoIdItem]:\n        return [i for i in self.proto]\n\n    def get_raw(self) -> bytes:\n        return b''.join(i.get_raw() for i in self.proto)\n\n    def get_length(self) -> int:\n        length = 0\n        for i in self.proto:\n            length += i.get_length()\n        return length\n\n\nclass FieldIdItem:\n    \"\"\"\n    This class can parse a `field_id_item` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        \"\"\"\"\n        :param buff: a string which represents a Buff object of the `field_id_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.class_idx, self.type_idx, self.name_idx = cm.packer[\"2HI\"].unpack(\n            buff.read(8)\n        )\n\n        self.reload()\n\n    def reload(self) -> None:\n        self.class_idx_value = self.CM.get_type(self.class_idx)\n        self.type_idx_value = self.CM.get_type(self.type_idx)\n        self.name_idx_value = self.CM.get_string(self.name_idx)\n\n    def get_class_idx(self) -> int:\n        \"\"\"\n        Return the index into the `type_ids` list for the definer of this field\n\n        :returns: the index\n        \"\"\"\n        return self.class_idx\n\n    def get_type_idx(self) -> int:\n        \"\"\"\n        Return the index into the `type_ids` list for the type of this field\n\n        :returns: the index\n        \"\"\"\n        return self.type_idx\n\n    def get_name_idx(self) -> int:\n        \"\"\"\n        Return the index into the `string_ids` list for the name of this field\n\n        :returns: the index\n        \"\"\"\n        return self.name_idx\n\n    def get_class_name(self) -> str:\n        \"\"\"\n        Return the class name of the field\n\n        :returns: the class name\n        \"\"\"\n        if self.class_idx_value is None:\n            self.class_idx_value = self.CM.get_type(self.class_idx)\n        return self.class_idx_value\n\n    def get_type(self) -> str:\n        \"\"\"\n        Return the type of the field\n\n        :returns: the type\n        \"\"\"\n        if self.type_idx_value is None:\n            self.type_idx_value = self.CM.get_type(self.type_idx)\n        return self.type_idx_value\n\n    def get_descriptor(self) -> str:\n        \"\"\"\n        Return the descriptor of the field\n\n        :returns: the desciptor\n        \"\"\"\n        if self.type_idx_value is None:\n            self.type_idx_value = self.CM.get_type(self.type_idx)\n        return self.type_idx_value\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the name of the field\n\n        :returns: the name\n        \"\"\"\n        if self.name_idx_value is None:\n            self.name_idx_value = self.CM.get_string(self.name_idx)\n        return self.name_idx_value\n\n    def get_list(self) -> list[str]:\n        return [self.get_class_name(), self.get_type(), self.get_name()]\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Field Id Item\")\n        bytecode._PrintDefault(\n            \"class_idx=%d type_idx=%d name_idx=%d\\n\"\n            % (self.class_idx, self.type_idx, self.name_idx)\n        )\n        bytecode._PrintDefault(\n            \"class_idx_value=%s type_idx_value=%s name_idx_value=%s\\n\"\n            % (self.class_idx_value, self.type_idx_value, self.name_idx_value)\n        )\n\n    def get_obj(self) -> bytes:\n        return self.CM.packer[\"2HI\"].pack(\n            self.class_idx, self.type_idx, self.name_idx\n        )\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_obj())\n\n\nclass FieldHIdItem:\n    \"\"\"\n    This class can parse a list of `field_id_item` of a dex file\n    \"\"\"\n\n    def __init__(self, size:int, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a buff object of the list of `field_id_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.offset = buff.tell()\n\n        self.field_id_items = [FieldIdItem(buff, cm) for i in range(0, size)]\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def gets(self) -> list[FieldIdItem]:\n        return self.field_id_items\n\n    def get(self, idx: int) -> Union[FieldIdItem, FieldIdItemInvalid]:\n        try:\n            return self.field_id_items[idx]\n        except IndexError:\n            return FieldIdItemInvalid()\n\n    def show(self) -> None:\n        nb = 0\n        for i in self.field_id_items:\n            print(nb, end=' ')\n            i.show()\n            nb = nb + 1\n\n    def get_obj(self) -> list[FieldIdItem]:\n        return [i for i in self.field_id_items]\n\n    def get_raw(self) -> bytes:\n        return b''.join(i.get_raw() for i in self.field_id_items)\n\n    def get_length(self) -> int:\n        length = 0\n        for i in self.field_id_items:\n            length += i.get_length()\n        return length\n\n\nclass MethodIdItem:\n    \"\"\"\n    This class can parse a `method_id_item` of a dex file\n    \"\"\"\n    \n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `method_id_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.class_idx, self.proto_idx, self.name_idx = cm.packer[\n            \"2HI\"\n        ].unpack(buff.read(8))\n\n        self.reload()\n\n    def reload(self) -> None:\n        self.class_idx_value = self.CM.get_type(self.class_idx)\n        self.proto_idx_value = self.CM.get_proto(self.proto_idx)\n        self.name_idx_value = self.CM.get_string(self.name_idx)\n\n    def get_class_idx(self) -> int:\n        \"\"\"\n        Return the index into the type_ids list for the definer of this method\n\n        :returns: the index\n        \"\"\"\n        return self.class_idx\n\n    def get_proto_idx(self) -> int:\n        \"\"\"\n        Return the index into the `proto_ids` list for the prototype of this method\n\n        :returns: the index\n        \"\"\"\n        return self.proto_idx\n\n    def get_name_idx(self) -> int:\n        \"\"\"\n        Return the index into the `string_ids` list for the name of this method\n\n        :returns: the index\n        \"\"\"\n        return self.name_idx\n\n    def get_class_name(self) -> str:\n        \"\"\"\n        Return the class name of the method\n\n        :returns: the class name\n        \"\"\"\n        if self.class_idx_value is None:\n            self.class_idx_value = self.CM.get_type(self.class_idx)\n\n        return self.class_idx_value\n\n    def get_proto(self) -> str:\n        \"\"\"\n        Return the prototype of the method\n\n        :returns: the prototype\n        \"\"\"\n        if self.proto_idx_value is None:\n            self.proto_idx_value = self.CM.get_proto(self.proto_idx)\n\n        return self.proto_idx_value\n\n    def get_descriptor(self) -> str:\n        \"\"\"\n        Return the descriptor\n\n        :returns: the descriptor\n        \"\"\"\n        proto = self.get_proto()\n        return proto[0] + proto[1]\n\n    def get_real_descriptor(self) -> str:\n        \"\"\"\n        Return the real descriptor (i.e. without extra spaces)\n\n        :returns: the real descriptor, without extra spaces\n        \"\"\"\n        proto = self.get_proto()\n        return proto[0].replace(' ', '') + proto[1]\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the name of the method\n\n        :returns: the name of the of method\n        \"\"\"\n        if self.name_idx_value is None:\n            self.name_idx_value = self.CM.get_string(self.name_idx)\n        return self.name_idx_value\n\n    def get_list(self) -> list[str]:\n        return [self.get_class_name(), self.get_name(), self.get_proto()]\n\n    def get_triple(self) -> tuple[str, str, str]:\n        return (\n            self.get_class_name()[1:-1],\n            self.get_name(),\n            self.get_real_descriptor(),\n        )\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Method Id Item\")\n        bytecode._PrintDefault(\n            \"class_idx=%d proto_idx=%d name_idx=%d\\n\"\n            % (self.class_idx, self.proto_idx, self.name_idx)\n        )\n        bytecode._PrintDefault(\n            \"class_idx_value=%s proto_idx_value=%s name_idx_value=%s\\n\"\n            % (self.class_idx_value, self.proto_idx_value, self.name_idx_value)\n        )\n\n    def get_obj(self) -> bytes:\n        return self.CM.packer[\"2HI\"].pack(\n            self.class_idx, self.proto_idx, self.name_idx\n        )\n\n    def get_raw(self) -> bytes:\n        return self.get_obj()\n\n    def get_length(self) -> int:\n        return len(self.get_obj())\n\n\nclass MethodHIdItem:\n    \"\"\"\n    This class can parse a list of `method_id_item` of a dex file\n    \"\"\"\n\n\n    def __init__(self, size:int, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the list of `method_id_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        self.method_id_items = [MethodIdItem(buff, cm) for i in range(0, size)]\n\n    def set_off(self, off: int):\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def gets(self) -> list[MethodIdItem]:\n        return self.method_id_items\n\n    def get(self, idx) -> Union[MethodIdItem, MethodIdItemInvalid]:\n        try:\n            return self.method_id_items[idx]\n        except IndexError:\n            return MethodIdItemInvalid()\n\n    def reload(self) -> None:\n        for i in self.method_id_items:\n            i.reload()\n\n    def show(self) -> None:\n        print(\"METHOD_ID_ITEM\")\n        nb = 0\n        for i in self.method_id_items:\n            print(nb, end=' ')\n            i.show()\n            nb = nb + 1\n\n    def get_obj(self) -> list[MethodIdItem]:\n        return [i for i in self.method_id_items]\n\n    def get_raw(self) -> bytes:\n        return b''.join(i.get_raw() for i in self.method_id_items)\n\n    def get_length(self) -> int:\n        length = 0\n        for i in self.method_id_items:\n            length += i.get_length()\n        return length\n\n\nclass ProtoIdItemInvalid:\n    def get_params(self) -> str:\n        return \"AG:IPI:invalid_params;\"\n\n    def get_shorty(self) -> str:\n        return \"(AG:IPI:invalid_shorty)\"\n\n    def get_return_type(self) -> str:\n        return \"(AG:IPI:invalid_return_type)\"\n\n    def show(self) -> None:\n        print(\n            \"AG:IPI:invalid_proto_item\",\n            self.get_shorty(),\n            self.get_return_type(),\n            self.get_params(),\n        )\n\n\nclass FieldIdItemInvalid:\n    def get_class_name(self) -> str:\n        return \"AG:IFI:invalid_class_name;\"\n\n    def get_type(self) -> str:\n        return \"(AG:IFI:invalid_type)\"\n\n    def get_descriptor(self) -> str:\n        return \"(AG:IFI:invalid_descriptor)\"\n\n    def get_name(self) -> str:\n        return \"AG:IFI:invalid_name\"\n\n    def get_list(self) -> list[str]:\n        return [self.get_class_name(), self.get_type(), self.get_name()]\n\n    def show(self) -> None:\n        print(\"AG:IFI:invalid_field_item\")\n\n\nclass MethodIdItemInvalid:\n    def get_class_name(self) -> str:\n        return \"AG:IMI:invalid_class_name;\"\n\n    def get_descriptor(self) -> str:\n        return \"(AG:IMI:invalid_descriptor)\"\n\n    def get_proto(self) -> str:\n        return \"()AG:IMI:invalid_proto\"\n\n    def get_name(self) -> str:\n        return \"AG:IMI:invalid_name\"\n\n    def get_list(self) -> list[str]:\n        return [self.get_class_name(), self.get_name(), self.get_proto()]\n\n    def show(self) -> None:\n        print(\"AG:IMI:invalid_method_item\")\n\n\nclass EncodedField:\n    \"\"\"\n    This class can parse an `encoded_field` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a buff object of the `encoded_field`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.field_idx_diff = readuleb128(cm, buff)\n        self.access_flags = readuleb128(cm, buff)\n\n        self.field_idx = 0\n\n        self.name = None\n        self.proto = None\n        self.class_name = None\n\n        self.init_value = None\n        self.access_flags_string = None\n        self.loaded = False\n\n    def load(self) -> None:\n        if self.loaded:\n            return\n        self.reload()\n        self.loaded = True\n\n    def reload(self) -> None:\n        name = self.CM.get_field(self.field_idx)\n        self.class_name = name[0]\n        self.name = name[2]\n        self.proto = name[1]\n\n    def set_init_value(self, value: EncodedValue) -> None:\n        \"\"\"\n        Setup the init value object of the field\n\n        :param value: the init value\n        \"\"\"\n        self.init_value = value\n\n    def get_init_value(self) -> EncodedValue:\n        \"\"\"\n        Return the init value object of the field\n\n        :returns: an `EncodedValue` object\n        \"\"\"\n        return self.init_value\n\n    def adjust_idx(self, val: int) -> None:\n        self.field_idx = self.field_idx_diff + val\n\n    def get_field_idx_diff(self) -> int:\n        \"\"\"\n        Return the index into the field_ids list for the identity of this field (includes the name and descriptor),\n        represented as a difference from the index of previous element in the list\n\n        :returns: the index\n        \"\"\"\n        return self.field_idx_diff\n\n    def get_field_idx(self) -> int:\n        \"\"\"\n        Return the real index of the method\n\n        :returns: the real index\n        \"\"\"\n        return self.field_idx\n\n    def get_access_flags(self) -> int:\n        \"\"\"\n        Return the access flags of the field\n\n        :returns: the access flags\n        \"\"\"\n        return self.access_flags\n\n    def get_class_name(self) -> str:\n        \"\"\"\n        Return the class name of the field\n\n        :returns: the class name\n        \"\"\"\n        if not self.loaded:\n            self.load()\n        return self.class_name\n\n    def get_descriptor(self) -> str:\n        \"\"\"\n        Return the descriptor of the field\n\n        The descriptor of a field is the type of the field.\n\n        :returns: the descriptor\n        \"\"\"\n        if not self.loaded:\n            self.load()\n        return self.proto\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the name of the field\n\n        :returns: the name\n        \"\"\"\n        if not self.loaded:\n            self.load()\n        return self.name\n\n    def get_access_flags_string(self) -> str:\n        \"\"\"\n        Return the access flags string of the field\n\n        :returns: the access flags\n        \"\"\"\n        if self.access_flags_string is None:\n            if self.get_access_flags() == 0:\n                # No access flags, i.e. Java defaults apply\n                self.access_flags_string = \"\"\n                return self.access_flags_string\n\n            # Try to parse the string\n            self.access_flags_string = get_access_flags_string(\n                self.get_access_flags()\n            )\n\n            # Fallback for unknown strings\n            if self.access_flags_string == \"\":\n                self.access_flags_string = \"0x{:06x}\".format(\n                    self.get_access_flags()\n                )\n        return self.access_flags_string\n\n    def set_name(self, value: str) -> None:\n        self.CM.set_hook_field_name(self, value)\n        self.reload()\n\n    def get_obj(self) -> list:\n        return []\n\n    def get_raw(self) -> bytes:\n        return writeuleb128(self.CM, self.field_idx_diff) + writeuleb128(\n            self.CM, self.access_flags\n        )\n\n    def get_size(self) -> bytes:\n        return len(self.get_raw())\n\n    def show(self) -> None:\n        \"\"\"\n        Display the information (with a pretty print) about the field\n        \"\"\"\n        bytecode._PrintSubBanner(\"Field Information\")\n        bytecode._PrintDefault(\n            \"{}->{} {} [access_flags={}]\\n\".format(\n                self.get_class_name(),\n                self.get_name(),\n                self.get_descriptor(),\n                self.get_access_flags_string(),\n            )\n        )\n\n        init_value = self.get_init_value()\n        if init_value is not None:\n            bytecode._PrintDefault(\n                \"\\tinit value: %s\\n\" % str(init_value.get_value())\n            )\n\n    def __str__(self):\n        return \"{}->{} {} [access_flags={}]\\n\".format(\n            self.get_class_name(),\n            self.get_name(),\n            self.get_descriptor(),\n            self.get_access_flags_string(),\n        )\n\n\nclass EncodedMethod:\n    \"\"\"\n    This class can parse an `encoded_method` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a buff object of the `encoded_method`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.method_idx_diff = readuleb128(\n            cm, buff\n        )  #: method index diff in the corresponding section\n        self.access_flags = readuleb128(\n            cm, buff\n        )  #: access flags of the method\n        self.code_off = readuleb128(cm, buff)  #: offset of the code section\n\n        self.method_idx = 0\n\n        self.name = None\n        self.proto = None\n        self.class_name = None\n\n        self.code = None\n\n        self.access_flags_string = None\n\n        self.notes = []\n        self.loaded = False\n\n    def adjust_idx(self, val: int) -> None:\n        self.method_idx = self.method_idx_diff + val\n\n    def get_method_idx(self) -> int:\n        \"\"\"\n        Return the real index of the method\n\n        :returns: the real index\n        \"\"\"\n        return self.method_idx\n\n    def get_method_idx_diff(self) -> int:\n        \"\"\"\n        Return index into the `method_ids` list for the identity of this method (includes the name and descriptor),\n        represented as a difference from the index of previous element in the lis\n\n        :returns: the index\n        \"\"\"\n        return self.method_idx_diff\n\n    def get_access_flags(self) -> int:\n        \"\"\"\n        Return the access flags of the method\n\n        :returns: the access flags\n        \"\"\"\n        return self.access_flags\n\n    def get_code_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the code structure for this method,\n        or 0 if this method is either abstract or native\n\n        :returns: the offset\n        \"\"\"\n        return self.code_off\n\n    def get_address(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the code structure for this method,\n        or 0 if this method is either abstract or native\n\n        :returns: the offset\n        \"\"\"\n        return self.code_off + 0x10\n\n    def get_access_flags_string(self) -> str:\n        \"\"\"\n        Return the access flags string of the method\n\n        A description of all access flags can be found here:\n        https://source.android.com/devices/tech/dalvik/dex-format#access-flags\n\n        :returns: the access flags\n        \"\"\"\n        if self.access_flags_string is None:\n            self.access_flags_string = get_access_flags_string(\n                self.get_access_flags()\n            )\n\n            if (\n                self.access_flags_string == \"\"\n                and self.get_access_flags() != 0x0\n            ):\n                self.access_flags_string = \"0x%x\" % self.get_access_flags()\n        return self.access_flags_string\n\n    def load(self) -> None:\n        if self.loaded:\n            return\n        self.reload()\n        self.loaded = True\n\n    def reload(self) -> None:\n        v = self.CM.get_method(self.method_idx)\n        # TODO this can probably be more elegant:\n        # get_method returns an array with the already resolved types.\n        # But for example to count the number of parameters, we need to split the string now.\n        # This is quite tedious and could be avoided if we would return the type IDs\n        # instead and resolve them here.\n        if v and len(v) >= 3:\n            self.class_name = v[0]\n            self.name = v[1]\n            self.proto = ''.join(i for i in v[2])\n        else:\n            self.class_name = 'CLASS_NAME_ERROR'\n            self.name = 'NAME_ERROR'\n            self.proto = 'PROTO_ERROR'\n\n        self.code = self.CM.get_code(self.code_off)\n\n    def get_locals(self) -> int:\n        \"\"\"\n        Get the number of local registers used by the method\n\n        This number is equal to the number of registers minus the number of parameters minus 1.\n\n        :returns: number of local registers\n        \"\"\"\n        ret = self.proto.split(')')\n        params = ret[0][1:].split()\n\n        return self.code.get_registers_size() - len(params) - 1\n\n    def get_information(self) -> dict[str, Union[str, tuple[int, int], list]]:\n        \"\"\"\n        Get brief information about the method's register use,\n        parameters and return type.\n\n        The resulting dictionary has the form:\n\n            >>> {\n            >>>    registers: (start, end),\n            >>>    params: [(reg_1, type_1), (reg_2, type_2), ..., (reg_n, type_n)],\n            >>>    return: type\n            >>> }\n\n        The end register is not the last register used, but the last register\n        used not for parameters. Hence, they represent the local registers.\n        The start register is always zero.\n        The register numbers for the parameters can be found in the tuples\n        for each parameter.\n\n        :returns: a dictionary with the basic information about the method\n        \"\"\"\n        info = dict()\n        if self.code:\n            nb = self.code.get_registers_size()\n            proto = self.get_descriptor()\n\n            ret = proto.split(')')\n            params = ret[0][1:].split()\n\n            info[\"return\"] = get_type(ret[1])\n\n            if params:\n                info[\"registers\"] = (0, nb - len(params) - 1)\n                j = 0\n                info[\"params\"] = []\n                for i in range(nb - len(params), nb):\n                    info[\"params\"].append((i, get_type(params[j])))\n                    j += 1\n            else:\n                info[\"registers\"] = (0, nb - 1)\n\n        return info\n\n    def each_params_by_register(self, nb: int, proto: str) -> None:\n        \"\"\"\n        From the Dalvik Bytecode documentation:\n\n        > The N arguments to a method land in the last N registers\n        > of the method's invocation frame, in order.\n        > Wide arguments consume two registers.\n        > Instance methods are passed a this reference as their first argument.\n\n        This method will print a description of the register usage to stdout.\n\n        :param nb: number of registers\n        :param proto: descriptor of method\n        \"\"\"\n        bytecode._PrintSubBanner(\"Params\")\n\n        ret = proto.split(')')\n        params = ret[0][1:].split()\n        if params:\n            bytecode._PrintDefault(\n                \"- local registers: v%d...v%d\\n\" % (0, nb - len(params) - 1)\n            )\n            j = 0\n            for i in range(nb - len(params), nb):\n                bytecode._PrintDefault(\n                    \"- v%d: %s\\n\" % (i, get_type(params[j]))\n                )\n                j += 1\n        else:\n            bytecode._PrintDefault(\n                \"local registers: v%d...v%d\\n\" % (0, nb - 1)\n            )\n\n        bytecode._PrintDefault(\"- return: %s\\n\" % get_type(ret[1]))\n        bytecode._PrintSubBanner()\n\n    def __str__(self):\n        return \"{}->{}{} [access_flags={}] @ 0x{:x}\".format(\n            self.get_class_name(),\n            self.get_name(),\n            self.get_descriptor(),\n            self.get_access_flags_string(),\n            self.get_code_off(),\n        )\n\n    @property\n    def full_name(self) -> str:\n        \"\"\"Return class_name + name + descriptor, separated by spaces (no access flags)\"\"\"\n        return ' '.join([self.class_name, self.name, self.get_descriptor()])\n\n    @property\n    def descriptor(self) -> str:\n        \"\"\"Get the descriptor of the method\"\"\"\n        return self.get_descriptor()\n\n    def get_short_string(self) -> str:\n        \"\"\"\n        Return a shorter formatted String which encodes this method.\n        The returned name has the form:\n        <classname> <methodname> ([arguments ...])<returntype>\n\n        * All Class names are condensed to the actual name (no package).\n        * Access flags are not returned.\n        * <init> and <clinit> are NOT replaced by the classname!\n\n        This name might not be unique!\n\n        :returns: str\n        \"\"\"\n\n        def _fmt_classname(cls) -> str:\n            arr = \"\"\n            # Test for arrays\n            while cls.startswith(\"[\"):\n                arr += \"[\"\n                cls = cls[1:]\n\n            # is a object type\n            if cls.startswith(\"L\"):\n                cls = cls[1:-1]\n            # only return last element\n            if \"/\" in cls:\n                cls = cls.rsplit(\"/\", 1)[1]\n            return arr + cls\n\n        clsname = _fmt_classname(str(self.get_class_name()))\n\n        param, ret = str(self.get_descriptor())[1:].split(\")\")\n        params = map(_fmt_classname, param.split(\" \"))\n        desc = \"({}){}\".format(''.join(params), _fmt_classname(ret))\n        return \"{cls} {meth} {desc}\".format(\n            cls=clsname, meth=self.get_name(), desc=desc\n        )\n\n    def show_info(self) -> None:\n        \"\"\"\n        Display the basic information about the method\n        \"\"\"\n        bytecode._PrintSubBanner(\"Method Information\")\n        bytecode._PrintDefault(\n            \"{}->{}{} [access_flags={}]\\n\".format(\n                self.get_class_name(),\n                self.get_name(),\n                self.get_descriptor(),\n                self.get_access_flags_string(),\n            )\n        )\n\n    def show(self) -> None:\n        \"\"\"\n        Display the information (with a pretty print) about the method\n        \"\"\"\n        self.show_info()\n        self.show_notes()\n\n        if self.CM.get_analysis():\n            self.CM.get_analysis().methods[self].show()\n        else:\n            if self.code:\n                self.each_params_by_register(\n                    self.code.get_registers_size(), self.get_descriptor()\n                )\n                self.code.show()\n\n    def show_notes(self) -> None:\n        \"\"\"\n        Display the notes about the method\n        \"\"\"\n        if self.notes:\n            bytecode._PrintSubBanner(\"Notes\")\n            for i in self.notes:\n                bytecode._PrintNote(i)\n            bytecode._PrintSubBanner()\n\n    def source(self) -> str:\n        \"\"\"\n        Return the source code of this method\n\n        :returns: the source code\n        \"\"\"\n        self.CM.decompiler_ob.display_source(self)\n\n    def get_source(self) -> str:\n        return self.CM.decompiler_ob.get_source_method(self)\n\n    def get_length(self) -> int:\n        \"\"\"\n        Return the length of the associated code of the method\n\n        :returns: the length of the source code\n        \"\"\"\n        if self.code is not None:\n            return self.code.get_length()\n        return 0\n\n    def get_code(self) -> Union[DalvikCode, None]:\n        \"\"\"\n        Return the code object associated to the method\n\n\n        :returns: the `DalvikCode` object or None if no Code\n        \"\"\"\n        if not self.loaded:\n            self.load()\n        return self.code\n\n    def is_cached_instructions(self) -> bool:\n        if self.code is None:\n            return False\n\n        return self.code.get_bc().is_cached_instructions()\n\n    def get_instructions(self) -> Iterator[Instruction]:\n        \"\"\"\n        Get the instructions\n\n        :returns: a generator of each `Instruction` (or a cached list of instructions if you have setup instructions)\n        \"\"\"\n        if self.get_code() is None:\n            return []\n        return self.get_code().get_bc().get_instructions()\n\n    def get_instructions_idx(self) -> Iterator[tuple[int, Instruction]]:\n        \"\"\"\n        Iterate over all instructions of the method, but also return the current index.\n        This is the same as using [get_instructions][androguard.core.dex.EncodedMethod.get_instructions] and adding the instruction length\n        to a variable each time.\n\n        :returns: iterator over index and instructions\n        \"\"\"\n        if self.get_code() is None:\n            return []\n        idx = 0\n        for ins in self.get_code().get_bc().get_instructions():\n            yield idx, ins\n            idx += ins.get_length()\n\n    def set_instructions(self, instructions: list[Instruction]) -> None:\n        \"\"\"\n        Set the instructions\n\n        :param instructions: the list of `Instructions`\n        \"\"\"\n        if self.code is None:\n            return []\n        return self.code.get_bc().set_instructions(instructions)\n\n    def get_instruction(\n        self, idx, off: Union[int, None] = None\n    ) -> Iterator[Instruction]:\n        \"\"\"\n        Get a particular instruction by using (default) the index of the address if specified\n\n        :param idx: index of the instruction (the position in the list of the instruction)\n        :param off: address of the instruction\n\n        :returns: a generator of `Instructions`\n        \"\"\"\n        if self.get_code() is not None:\n            return self.get_code().get_bc().get_instruction(idx, off)\n        return None\n\n    def get_debug(self) -> DebugInfoItem:\n        \"\"\"\n        Return the debug object associated to this method\n\n        :returns: `DebugInfoItem` object\n        \"\"\"\n        if self.get_code() is None:\n            return None\n        return self.get_code().get_debug()\n\n    def get_descriptor(self) -> str:\n        \"\"\"\n        Return the descriptor of the method\n        A method descriptor will have the form `(A A A ...)R`\n        Where A are the arguments to the method and R is the return type.\n        Basic types will have the short form, i.e. I for integer, V for void\n        and class types will be named like a classname, e.g. `Ljava/lang/String;`.\n\n        Typical descriptors will look like this:\n        ```\n        (I)I   // one integer argument, integer return\n        (C)Z   // one char argument, boolean as return\n        (Ljava/lang/CharSequence; I)I   // CharSequence and integer as\n        argyument, integer as return\n        (C)Ljava/lang/String;  // char as argument, String as return.\n        ```\n\n        More information about type descriptors are found here:\n        https://source.android.com/devices/tech/dalvik/dex-format#typedescriptor\n\n        :returns: the descriptor\n        \"\"\"\n        if not self.loaded:\n            self.load()\n        return self.proto\n\n    def get_class_name(self) -> str:\n        \"\"\"\n        Return the class name of the method\n\n        :returns: the class name\n        \"\"\"\n        if not self.loaded:\n            self.load()\n        return self.class_name\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the name of the method\n\n        :returns: the name\n        \"\"\"\n        if not self.loaded:\n            self.load()\n        return self.name\n\n    def get_triple(self) -> tuple[str, str, str]:\n        return self.CM.get_method_ref(self.method_idx).get_triple()\n\n    def add_inote(\n        self, msg: str, idx: int, off: Union[int, None] = None\n    ) -> None:\n        \"\"\"\n        Add a message to a specific instruction by using (default) the index of the address if specified\n\n        :param msg: the message\n        :param idx: index of the instruction (the position in the list of the instruction)\n        :param off: address of the instruction\n        \"\"\"\n        if self.code is not None:\n            self.code.add_inote(msg, idx, off)\n\n    def add_note(self, msg: str) -> None:\n        \"\"\"\n        Add a message to this method\n\n        :param msg: the message\n        \"\"\"\n        self.notes.append(msg)\n\n    def set_code_idx(self, idx: int) -> None:\n        \"\"\"\n        Set the start address of the buffer to disassemble\n\n        :param idx: the index\n        \"\"\"\n        if self.code is not None:\n            self.code.seek(idx)\n\n    def set_name(self, value):\n        self.CM.set_hook_method_name(self, value)\n        self.reload()\n\n    def get_raw(self):\n        if self.code is not None:\n            self.code_off = self.code.get_off()\n\n        return (\n            writeuleb128(self.CM, self.method_idx_diff)\n            + writeuleb128(self.CM, self.access_flags)\n            + writeuleb128(self.CM, self.code_off)\n        )\n\n    def get_size(self):\n        return len(self.get_raw())\n\n\nclass ClassDataItem:\n    \"\"\"\n    This class can parse a `class_data_item` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `class_data_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        self.static_fields_size = readuleb128(cm, buff)\n        self.instance_fields_size = readuleb128(cm, buff)\n        self.direct_methods_size = readuleb128(cm, buff)\n        self.virtual_methods_size = readuleb128(cm, buff)\n\n        self.static_fields = []\n        self.instance_fields = []\n        self.direct_methods = []\n        self.virtual_methods = []\n\n        self._load_elements(\n            self.static_fields_size, self.static_fields, EncodedField, buff, cm\n        )\n        self._load_elements(\n            self.instance_fields_size,\n            self.instance_fields,\n            EncodedField,\n            buff,\n            cm,\n        )\n        self._load_elements(\n            self.direct_methods_size,\n            self.direct_methods,\n            EncodedMethod,\n            buff,\n            cm,\n        )\n        self._load_elements(\n            self.virtual_methods_size,\n            self.virtual_methods,\n            EncodedMethod,\n            buff,\n            cm,\n        )\n\n    def get_static_fields_size(self) -> int:\n        \"\"\"\n        Return the number of static fields defined in this item\n\n        :returns: number of static fields\n        \"\"\"\n        return self.static_fields_size\n\n    def get_instance_fields_size(self) -> int:\n        \"\"\"\n        Return the number of instance fields defined in this item\n\n        :returns: number of instance fields\n        \"\"\"\n        return self.instance_fields_size\n\n    def get_direct_methods_size(self) -> int:\n        \"\"\"\n        Return the number of direct methods defined in this item\n\n        :returns: number of direct methods\n        \"\"\"\n        return self.direct_methods_size\n\n    def get_virtual_methods_size(self) -> int:\n        \"\"\"\n        Return the number of virtual methods defined in this item\n\n        :returns: number of virtual methods\n        \"\"\"\n        return self.virtual_methods_size\n\n    def get_static_fields(self) -> list[EncodedField]:\n        \"\"\"\n        Return the defined static fields, represented as a sequence of encoded elements\n\n        :returns: a list of `EncodedField` objects\n        \"\"\"\n        return self.static_fields\n\n    def get_instance_fields(self) -> list[EncodedField]:\n        \"\"\"\n        Return the defined instance fields, represented as a sequence of encoded elements\n\n        :returns: list of `EncodedField` objects\n        \"\"\"\n        return self.instance_fields\n\n    def get_direct_methods(self) -> list[EncodedMethod]:\n        \"\"\"\n        Return the defined direct (any of static, private, or constructor) methods, represented as a sequence of encoded elements\n\n        :returns: a list of `EncodedMethod` objects\n        \"\"\"\n        return self.direct_methods\n\n    def get_virtual_methods(self) -> list[EncodedMethod]:\n        \"\"\"\n        Return the defined virtual (none of static, private, or constructor) methods, represented as a sequence of encoded elements\n\n        :returns: a list `EncodedMethod` objects\n\n        \"\"\"\n\n        return self.virtual_methods\n\n    def get_methods(self) -> list[EncodedMethod]:\n        \"\"\"\n        Return direct and virtual methods\n\n        :returns: a list of `EncodedMethod` objects\n        \"\"\"\n        return [x for x in self.direct_methods] + [\n            x for x in self.virtual_methods\n        ]\n\n    def get_fields(self) -> list[EncodedField]:\n        \"\"\"\n        Return static and instance fields\n\n        :returns: a list of `EncodedField` objects\n        \"\"\"\n        return [x for x in self.static_fields] + [\n            x for x in self.instance_fields\n        ]\n\n    def set_off(self, off: int):\n        self.offset = off\n\n    def set_static_fields(self, value):\n        if value is not None:\n            values = value.get_values()\n            if len(values) <= len(self.static_fields):\n                for i in range(0, len(values)):\n                    self.static_fields[i].set_init_value(values[i])\n\n    def _load_elements(self, size, l, Type, buff, cm):\n        prev = 0\n        for i in range(0, size):\n            el = Type(buff, cm)\n            el.adjust_idx(prev)\n\n            if isinstance(el, EncodedField):\n                prev = el.get_field_idx()\n            else:\n                prev = el.get_method_idx()\n\n            l.append(el)\n\n    def show(self):\n        bytecode._PrintSubBanner(\"Class Data Item\")\n        bytecode._PrintDefault(\n            \"static_fields_size=%d instance_fields_size=%d direct_methods_size=%d virtual_methods_size=%d\\n\"\n            % (\n                self.static_fields_size,\n                self.instance_fields_size,\n                self.direct_methods_size,\n                self.virtual_methods_size,\n            )\n        )\n\n        bytecode._PrintSubBanner(\"Static Fields\")\n        for i in self.static_fields:\n            i.show()\n\n        bytecode._PrintSubBanner(\"Instance Fields\")\n        for i in self.instance_fields:\n            i.show()\n\n        bytecode._PrintSubBanner(\"Direct Methods\")\n        for i in self.direct_methods:\n            i.show()\n\n        bytecode._PrintSubBanner(\"Virtual Methods\")\n        for i in self.virtual_methods:\n            i.show()\n\n    def get_obj(self):\n        return (\n            [i for i in self.static_fields]\n            + [i for i in self.instance_fields]\n            + [i for i in self.direct_methods]\n            + [i for i in self.virtual_methods]\n        )\n\n    def get_raw(self):\n        buff = (\n            writeuleb128(self.CM, self.static_fields_size)\n            + writeuleb128(self.CM, self.instance_fields_size)\n            + writeuleb128(self.CM, self.direct_methods_size)\n            + writeuleb128(self.CM, self.virtual_methods_size)\n            + b''.join(i.get_raw() for i in self.static_fields)\n            + b''.join(i.get_raw() for i in self.instance_fields)\n            + b''.join(i.get_raw() for i in self.direct_methods)\n            + b''.join(i.get_raw() for i in self.virtual_methods)\n        )\n\n        return buff\n\n    def get_length(self):\n        length = (\n            len(writeuleb128(self.CM, self.static_fields_size))\n            + len(writeuleb128(self.CM, self.instance_fields_size))\n            + len(writeuleb128(self.CM, self.direct_methods_size))\n            + len(writeuleb128(self.CM, self.virtual_methods_size))\n        )\n\n        for i in self.static_fields:\n            length += i.get_size()\n\n        for i in self.instance_fields:\n            length += i.get_size()\n\n        for i in self.direct_methods:\n            length += i.get_size()\n\n        for i in self.virtual_methods:\n            length += i.get_size()\n\n        return length\n\n    def get_off(self):\n        return self.offset\n\n\nclass ClassDefItem:\n    \"\"\"\n    This class can parse a `class_def_item` of a dex file\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm:ClassManager) -> None:\n        \"\"\"\n        :param buff: a string which represents a Buff object of the `class_def_item`\n        :param cm: a `ClassManager` object\n        \"\"\"\n        self.CM = cm\n        self.offset = buff.tell()\n\n        (\n            self.class_idx,\n            self.access_flags,\n            self.superclass_idx,\n            self.interfaces_off,\n            self.source_file_idx,\n            self.annotations_off,\n            self.class_data_off,\n            self.static_values_off,\n        ) = cm.packer[\"8I\"].unpack(buff.read(32))\n\n        self.interfaces = []\n        self.class_data_item = None\n        self.static_values = None\n        self.annotations_directory_item = None\n\n        self.name = None\n        self.sname = None\n        self.access_flags_string = None\n\n        self.reload()\n\n    def reload(self) -> None:\n        self.name = self.CM.get_type(self.class_idx)\n        self.sname = self.CM.get_type(self.superclass_idx)\n        self.interfaces = self.CM.get_type_list(self.interfaces_off)\n\n        if self.class_data_off != 0:\n            self.class_data_item = self.CM.get_class_data_item(\n                self.class_data_off\n            )\n\n        if self.annotations_off != 0:\n            self.annotations_directory_item = (\n                self.CM.get_annotations_directory_item(self.annotations_off)\n            )\n\n        if self.static_values_off != 0:\n            self.static_values = self.CM.get_encoded_array_item(\n                self.static_values_off\n            )\n\n            if self.class_data_item:\n                self.class_data_item.set_static_fields(\n                    self.static_values.get_value()\n                )\n\n    def __str__(self):\n        return \"{}->{}\".format(self.get_superclassname(), self.get_name())\n\n    def __repr__(self):\n        return \"<dvm.ClassDefItem {}>\".format(self.__str__())\n\n    def get_methods(self) -> list[EncodedMethod]:\n        \"\"\"\n        Return all [EncodedMethods][androguard.core.dex.EncodedMethod] of this class\n\n        :returns: a list of `EncodedMethod` objects\n        \"\"\"\n        if self.class_data_item is not None:\n            return self.class_data_item.get_methods()\n        return []\n\n    def get_fields(self) -> list[EncodedField]:\n        \"\"\"\n        Return all [EncodedFields][androguard.core.dex.EncodedField] of this class\n\n        :returns: a list of `EncodedField` objects\n        \"\"\"\n        if self.class_data_item is not None:\n            return self.class_data_item.get_fields()\n        return []\n\n    def _get_annotation_type_ids(self) -> list[EncodedAnnotation]:\n        \"\"\"\n        Get the [EncodedAnnotation][androguard.core.dex.EncodedAnnotation] from this class\n\n        :returns: list of `EncodedAnnotation` objects\n        \"\"\"\n        if self.annotations_directory_item is None:\n            return []\n        annotation_set_item = (\n            self.annotations_directory_item.get_annotation_set_item()\n        )\n        if annotation_set_item is None:\n            return []\n\n        annotation_off_item = annotation_set_item.get_annotation_off_item()\n\n        if annotation_off_item is None:\n            return []\n\n        return [\n            annotation.get_annotation_item().annotation\n            for annotation in annotation_off_item\n        ]\n\n    def get_annotations(self) -> list[str]:\n        \"\"\"\n        Returns the class names of the annotations of this class.\n\n        For example, if the class is marked as `@Deprecated`, this will return\n        `['Ljava/lang/Deprecated;']`.\n\n        :returns: list of class names\n        \"\"\"\n        return [\n            self.CM.get_type(x.get_type_idx())\n            for x in self._get_annotation_type_ids()\n        ]\n\n    def get_class_idx(self) -> int:\n        \"\"\"\n        Return the index into the `type_ids` list for this class\n\n        :returns: the index\n        \"\"\"\n        return self.class_idx\n\n    def get_access_flags(self) -> int:\n        \"\"\"\n        Return the access flags for the class (`public`, `final`, etc.)\n\n        :returns: the access flags\n        \"\"\"\n        return self.access_flags\n\n    def get_superclass_idx(self) -> int:\n        \"\"\"\n        Return the index into the `type_ids` list for the superclass\n\n        :returns: the index\n        \"\"\"\n        return self.superclass_idx\n\n    def get_interfaces_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the list of interfaces, or 0 if there are none\n\n        :returns: the offset\n        \"\"\"\n        return self.interfaces_off\n\n    def get_source_file_idx(self) -> int:\n        \"\"\"\n        Return the index into the `string_ids` list for the name of the file containing the original\n        source for (at least most of) this class, or the special value `NO_INDEX` to represent a lack of this information\n\n        :returns: the index\n        \"\"\"\n        return self.source_file_idx\n\n    def get_annotations_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the annotations structure for this class,\n        or 0 if there are no annotations on this class.\n\n        :returns: the offset\n        \"\"\"\n        return self.annotations_off\n\n    def get_class_data_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the associated class data for this item,\n        or 0 if there is no class data for this class\n\n        :returns: the offset\n        \"\"\"\n        return self.class_data_off\n\n    def get_static_values_off(self) -> int:\n        \"\"\"\n        Return the offset from the start of the file to the list of initial values for static fields,\n        or 0 if there are none (and all static fields are to be initialized with 0 or null)\n\n        :returns: the offset\n        \"\"\"\n        return self.static_values_off\n\n    def get_class_data(self) -> ClassDataItem:\n        \"\"\"\n        Return the associated class_data_item\n\n        :returns: the associated `ClassDataItem`\n        \"\"\"\n        return self.class_data_item\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the name of this class\n\n        :returns: the string name\n        \"\"\"\n        return self.name\n\n    def get_superclassname(self) -> str:\n        \"\"\"\n        Return the name of the super class\n\n        :returns: the string name\n        \"\"\"\n        return self.sname\n\n    def get_interfaces(self) -> list[str]:\n        \"\"\"\n        Return the names of the interfaces\n\n        :returns: a list of string names\n        \"\"\"\n        return self.interfaces\n\n    def get_access_flags_string(self) -> str:\n        \"\"\"\n        Return the access flags string of the class\n\n        :returns: the access flag string\n        \"\"\"\n        if self.access_flags_string is None:\n            self.access_flags_string = get_access_flags_string(\n                self.get_access_flags()\n            )\n\n            if self.access_flags_string == \"\":\n                self.access_flags_string = \"0x%x\" % self.get_access_flags()\n        return self.access_flags_string\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Class Def Item\")\n        bytecode._PrintDefault(\n            \"name=%s, sname=%s, interfaces=%s, access_flags=%s\\n\"\n            % (\n                self.name,\n                self.sname,\n                self.interfaces,\n                self.get_access_flags_string(),\n            )\n        )\n        bytecode._PrintDefault(\n            \"class_idx=%d, superclass_idx=%d, interfaces_off=%x, source_file_idx=%d, annotations_off=%x, class_data_off=%x, static_values_off=%x\\n\"\n            % (\n                self.class_idx,\n                self.superclass_idx,\n                self.interfaces_off,\n                self.source_file_idx,\n                self.annotations_off,\n                self.class_data_off,\n                self.static_values_off,\n            )\n        )\n\n        for method in self.get_methods():\n            method.show()\n\n    def source(self) -> None:\n        \"\"\"\n        Print the source code of the entire class\n        \"\"\"\n        self.CM.decompiler_ob.display_all(self)\n\n    def get_source(self) -> str:\n        \"\"\"return the source code of this class\n\n        :returns: the source code string\n        \"\"\"\n        return self.CM.decompiler_ob.get_source_class(self)\n\n    def get_source_ext(self) -> list[tuple[str, list]]:\n        return self.CM.decompiler_ob.get_source_class_ext(self)\n\n    def get_ast(self):\n        return self.CM.decompiler_ob.get_ast_class(self)\n\n    def set_name(self, value):\n        self.CM.set_hook_class_name(self, value)\n\n    def get_obj(self):\n        if self.interfaces_off != 0:\n            self.interfaces_off = self.CM.get_obj_by_offset(\n                self.interfaces_off\n            ).get_off()\n\n        if self.annotations_off != 0:\n            self.annotations_off = self.CM.get_obj_by_offset(\n                self.annotations_off\n            ).get_off()\n\n        if self.class_data_off != 0:\n            self.class_data_off = self.CM.get_obj_by_offset(\n                self.class_data_off\n            ).get_off()\n\n        if self.static_values_off != 0:\n            self.static_values_off = self.CM.get_obj_by_offset(\n                self.static_values_off\n            ).get_off()\n\n        return self.CM.packer[\"8I\"].pack(\n            self.class_idx,\n            self.access_flags,\n            self.superclass_idx,\n            self.interfaces_off,\n            self.source_file_idx,\n            self.annotations_off,\n            self.class_data_off,\n            self.static_values_off,\n        )\n\n    def get_raw(self):\n        return self.get_obj()\n\n    def get_length(self):\n        return len(self.get_obj())\n\n\nclass ClassHDefItem:\n    \"\"\"\n    This class can parse a list of `class_def_item` of a dex file\n\n    :param buff: a string which represents a Buff object of the list of `class_def_item`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, size: int, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        self.class_def = []\n\n        for i in range(0, size):\n            idx = buff.tell()\n\n            class_def = ClassDefItem(buff, cm)\n            self.class_def.append(class_def)\n\n            buff.seek(idx + calcsize(\"8I\"))\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def get_class_idx(self, idx: int) -> ClassDefItem:\n        \"\"\"return the associated `ClassDefItem` from the `class_def` list given an index\n\n        :param idx: the index\n        :return: the `ClassDefItem` object , or `None` if not found\n        \"\"\"\n        for i in self.class_def:\n            if i.get_class_idx() == idx:\n                return i\n        return None\n\n    def get_method(\n        self, name_class: str, name_method: str\n    ) -> list[EncodedMethod]:\n        \"\"\"return a list of of `EncodedMethod` objects given a class name and method name\n\n        :param name_class: the name of the class\n        :param name_method: the name of the method\n        :return: a list of `EncodedMethod` objects\n        \"\"\"\n        l = []\n\n        for i in self.class_def:\n            if i.get_name() == name_class:\n                for j in i.get_methods():\n                    if j.get_name() == name_method:\n                        l.append(j)\n        return l\n\n    def get_names(self) -> list[str]:\n        \"\"\"return a list of class names found in `class_def`\n\n        :return: a list of class names\n        \"\"\"\n        return [x.get_name() for x in self.class_def]\n\n    def show(self) -> None:\n        for i in self.class_def:\n            i.show()\n\n    def get_obj(self) -> list[ClassDefItem]:\n        \"\"\"return a list of `ClassDefItem` objects\n\n        :return: list of `ClassDefItem` objects\n        \"\"\"\n        return [i for i in self.class_def]\n\n    def get_raw(self) -> bytes:\n        return b''.join(i.get_raw() for i in self.class_def)\n\n    def get_length(self) -> int:\n        length = 0\n        for i in self.class_def:\n            length += i.get_length()\n        return length\n\n\nclass EncodedTypeAddrPair:\n    \"\"\"\n    This class can parse an `encoded_type_addr_pair` of a dex file\n\n    :param buff: a string which represents a Buff object of the `encoded_type_addr_pair`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, cm: ClassManager, buff: BinaryIO) -> None:\n        self.CM = cm\n        self.type_idx = readuleb128(cm, buff)\n        self.addr = readuleb128(cm, buff)\n\n    def get_type_idx(self) -> int:\n        \"\"\"\n        Return the index into the `type_ids` list for the type of the exception to catch\n\n        :returns: the index\n        \"\"\"\n        return self.type_idx\n\n    def get_addr(self) -> int:\n        \"\"\"\n        Return the bytecode address of the associated exception handler\n\n        :returns: the bytecode address\n        \"\"\"\n        return self.addr\n\n    def get_obj(self) -> list:\n        return []\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Encoded Type Addr Pair\")\n        bytecode._PrintDefault(\n            \"type_idx=%d addr=%x\\n\" % (self.type_idx, self.addr)\n        )\n\n    def get_raw(self) -> bytearray:\n        return writeuleb128(self.CM, self.type_idx) + writeuleb128(\n            self.CM, self.addr\n        )\n\n    def get_length(self) -> int:\n        return len(self.get_raw())\n\n\nclass EncodedCatchHandler:\n    \"\"\"\n    This class can parse an `encoded_catch_handler` of a dex file\n\n    :param buff: a string which represents a Buff object of the `encoded_catch_handler`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.size = readsleb128(cm, buff)\n\n        self.handlers = []\n\n        for i in range(0, abs(self.size)):\n            self.handlers.append(EncodedTypeAddrPair(cm, buff))\n\n        if self.size <= 0:\n            self.catch_all_addr = readuleb128(cm, buff)\n\n    def get_size(self) -> int:\n        \"\"\"\n        Return the number of catch types in this list\n\n        :returns: the number of catch types\n        \"\"\"\n        return self.size\n\n    def get_handlers(self) -> list[EncodedTypeAddrPair]:\n        \"\"\"\n        Return the stream of `abs(size)` encoded items, one for each caught type, in the order that the types should be tested.\n\n        :returns: a list of `EncodedTypeAddrPair` objects\n        \"\"\"\n        return self.handlers\n\n    def get_catch_all_addr(self) -> int:\n        \"\"\"\n        Return the bytecode address of the catch-all handler. This element is only present if size is non-positive.\n\n        :returns: the bytecode address\n        \"\"\"\n        return self.catch_all_addr\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Encoded Catch Handler\")\n        bytecode._PrintDefault(\"size=%d\\n\" % self.size)\n\n        for i in self.handlers:\n            i.show()\n\n        if self.size <= 0:\n            bytecode._PrintDefault(\"catch_all_addr=%x\\n\" % self.catch_all_addr)\n\n    def get_raw(self) -> bytearray:\n        buff = bytearray()\n        buff += writesleb128(self.CM, self.size)\n        for i in self.handlers:\n            buff += i.get_raw()\n\n        if self.size <= 0:\n            buff += writeuleb128(self.CM, self.catch_all_addr)\n\n        return buff\n\n    def get_length(self) -> int:\n        length = len(writesleb128(self.CM, self.size))\n\n        for i in self.handlers:\n            length += i.get_length()\n\n        if self.size <= 0:\n            length += len(writeuleb128(self.CM, self.catch_all_addr))\n\n        return length\n\n\nclass EncodedCatchHandlerList:\n    \"\"\"\n    This class can parse an `encoded_catch_handler_list` of a dex file\n\n    :param buff: a string which represents a Buff object of the `encoded_catch_handler_list`\n    :param cm: a `ClassManager` object\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n        self.offset = buff.tell()\n\n        self.size = readuleb128(cm, buff)\n        self.list = [EncodedCatchHandler(buff, cm) for _ in range(self.size)]\n\n    def get_size(self) -> int:\n        \"\"\"\n        Return the size of this list, in entries\n\n        :returns: int\n        \"\"\"\n        return self.size\n\n    def get_list(self) -> list[EncodedCatchHandler]:\n        \"\"\"\n        Return the actual list of handler lists, represented directly (not as offsets), and concatenated sequentially\n\n        :returns: a list of `EncodedCatchHandler` objects\n        \"\"\"\n        return self.list\n\n    def show(self) -> None:\n        bytecode._PrintSubBanner(\"Encoded Catch Handler List\")\n        bytecode._PrintDefault(\"size=%d\\n\" % self.size)\n\n        for i in self.list:\n            i.show()\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_obj(self) -> bytearray:\n        return writeuleb128(self.CM, self.size)\n\n    def get_raw(self) -> bytearray:\n        buff = bytearray()\n        buff += self.get_obj()\n        for i in self.list:\n            buff += i.get_raw()\n        return buff\n\n    def get_length(self) -> int:\n        length = len(self.get_obj())\n\n        for i in self.list:\n            length += i.get_length()\n        return length\n\n\ndef get_kind(cm: ClassManager, kind: int, value: int) -> str:\n    \"\"\"\n    Return the value of the 'kind' argument\n\n    :param cm: a ClassManager object\n    :param kind: the type of the 'kind' argument\n    :param value: the value of the 'kind' argument\n\n    :returns: string\n    \"\"\"\n    if kind == Kind.METH:\n        method = cm.get_method_ref(value)\n        class_name = method.get_class_name()\n        name = method.get_name()\n        descriptor = method.get_descriptor()\n\n        return \"{}->{}{}\".format(class_name, name, descriptor)\n\n    elif kind == Kind.STRING:\n        return cm.get_string(value)\n\n    # TODO: unused?\n    elif kind == Kind.RAW_STRING:\n        return cm.get_string(value)\n\n    elif kind == Kind.FIELD:\n        class_name, proto, field_name = cm.get_field(value)\n        return \"{}->{} {}\".format(class_name, field_name, proto)\n\n    elif kind == Kind.TYPE:\n        return cm.get_type(value)\n\n    elif kind == Kind.VTABLE_OFFSET:\n        return \"vtable[0x%x]\" % value\n\n    elif kind == Kind.FIELD_OFFSET:\n        return \"field[0x%x]\" % value\n\n    elif kind == Kind.INLINE_METHOD:\n        buff = \"inline[0x%x]\" % value\n\n        # FIXME: depends of the android version ...\n        if len(INLINE_METHODS) > value:\n            elem = INLINE_METHODS[value]\n            buff += \" {}->{}{}\".format(elem[0], elem[1], elem[2])\n\n        return buff\n\n    return None\n\n\nclass Instruction:\n    \"\"\"\n    This class represents a Dalvik instruction\n\n    It can both handle normal instructions as well as optimized instructions.\n\n    WARNING: There is not much documentation about the optimized opcodes! Hence, it relies on reverese engineered specification!\n\n    More information about the instruction format can be found in the official documentation:\n    https://source.android.com/devices/tech/dalvik/instruction-formats.html\n\n    WARNING: Values stored in the instructions are already interpreted at this stage.\n\n    The Dalvik VM has a eight opcodes to create constant integer values.\n    There are four variants for 32bit values and four for 64bit.\n    If floating point numbers are required, you have to use the conversion opcodes\n    like `int-to-float`, `int-to-double` or the variants using `long`.\n\n    Androguard will always show the values as they are used in the opcode and also extend signs\n    and shift values!\n    As an example: The opcode `const/high16` can be used to create constant values\n    where the lower 16 bits are all zero.\n    In this case, androguard will process bytecode `15 00 CD AB` as beeing\n    `const/high16 v0, 0xABCD0000`.\n    For the sign-extension, nothing is really done here, as it only affects the bit represenation\n    in the virtual machine. As androguard parses the values and uses python types internally,\n    we are not bound to specific size.\n    \"\"\"\n\n    length = 0\n    OP = 0\n\n    def get_kind(self) -> int:\n        \"\"\"\n        Return the 'kind' argument of the instruction\n\n        This is the type of the argument, i.e. in which kind of table you have\n        to look up the argument in the `ClassManager`\n\n        :returns: the kind\n        \"\"\"\n        if self.OP >= 0xF2FF:\n            return DALVIK_OPCODES_OPTIMIZED[self.OP][1][1]\n        return DALVIK_OPCODES_FORMAT[self.OP][1][1]\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the mnemonic of the instruction\n\n        :returns: the mnemonic\n        \"\"\"\n        if self.OP >= 0xF2FF:\n            return DALVIK_OPCODES_OPTIMIZED[self.OP][1][0]\n        return DALVIK_OPCODES_FORMAT[self.OP][1][0]\n\n    def get_op_value(self) -> int:\n        \"\"\"\n        Return the numerical value of the opcode\n\n        :returns: the numerical opcode\n        \"\"\"\n        return self.OP\n\n    def get_literals(self) -> list:\n        \"\"\"\n        Not Implemented\n\n        Return the associated literals\n\n        :returns: list of int\n        \"\"\"\n        return []\n\n    def show(self, idx: int) -> None:\n        \"\"\"\n        Print the instruction\n\n        No Line ending is printed.\n        \"\"\"\n        print(self.get_name() + \" \" + self.get_output(idx), end=' ')\n\n    def show_buff(self, idx: int) -> str:\n        \"\"\"\n        Return the display of the instruction\n\n        :returns: the display of the instruction\n        \"\"\"\n        return self.get_output(idx)\n\n    def get_translated_kind(self) -> str:\n        \"\"\"\n        Return the translated value of the 'kind' argument\n\n        :returns: the translated value\n        \"\"\"\n        return get_kind(self.cm, self.get_kind(), self.get_ref_kind())\n\n    def get_output(self, idx: int = -1) -> str:\n        \"\"\"\n        Not Implemented\n        \n        Return an additional output of the instruction\n\n        :returns: the additional output as a string\n        \"\"\"\n        return \"\"\n\n    def get_operands(self, idx:int=-1) -> list[tuple[Operand, object]]:\n        \"\"\"\n        Not Implemented\n\n        Return all operands\n\n        This will return a list of tuples, containing the Enum [Operand][androguard.core.dex.dex_types.Operand]\n        at the first position and the objects afterwards.\n\n        :returns: List[Tuple(Operand, object, ...)]\n        \"\"\"\n        return []\n\n    def get_length(self) -> int:\n        \"\"\"\n        Return the length of the instruction in bytes\n\n        :returns: the length\n        \"\"\"\n        return self.length\n\n    def get_raw(self):\n        \"\"\"\n        Return the object in a raw format\n\n        :returns: the raw format\n        \"\"\"\n        raise Exception(\"not implemented\")\n\n    def get_ref_kind(self):\n        \"\"\"\n        Return the value of the 'kind' argument\n\n        :returns: value\n        \"\"\"\n        raise Exception(\"not implemented\")\n\n    def get_hex(self) -> str:\n        \"\"\"\n        Returns a HEX String, separated by spaces every byte\n\n        The hex string contains the raw bytes of the instruction,\n        including the opcode and all arguments.\n\n        :returns: the hex string\n        \"\"\"\n        s = binascii.hexlify(self.get_raw()).decode('ascii')\n        return \" \".join(s[i : i + 2] for i in range(0, len(s), 2))\n\n    def __str__(self):\n        return \"{} {}\".format(self.get_name(), self.get_output())\n\n    # FIXME Better name\n    def disasm(self) -> str:\n        \"\"\"Some small line for disassembly view\"\"\"\n        s = binascii.hexlify(self.get_raw()).decode('ascii')\n        byteview = \" \".join(s[i : i + 4] for i in range(0, len(s), 4))\n        return '{:24s}  {:24s} {}'.format(\n            byteview, self.get_name(), self.get_output()\n        )\n\n\nclass FillArrayData:\n    \"\"\"\n    This class can parse a `FillArrayData` instruction\n\n    :param buff: a Buff object which represents a buffer where the instruction is stored\n    \"\"\"\n\n    # FIXME: why is this not a subclass of Instruction?\n    def __init__(self, cm: ClassManager, buff: BinaryIO) -> None:\n        self.OP = 0x0\n        self.notes = []\n        self.CM = cm\n\n        self.format_general_size = calcsize(\"2HI\")\n        self.ident, self.element_width, self.size = cm.packer[\"2HI\"].unpack(\n            buff[0:8]\n        )\n\n        buf_len = self.size * self.element_width\n        if buf_len % 2:\n            buf_len += 1\n\n        self.data = buff[\n            self.format_general_size : self.format_general_size + buf_len\n        ]\n\n    def add_note(self, msg: str) -> None:\n        \"\"\"\n        Add a note to this instruction\n\n        :param msg: the message\n        \"\"\"\n        self.notes.append(msg)\n\n    def get_notes(self) -> list[str]:\n        \"\"\"\n        Get all notes from this instruction\n\n        :returns: a list of string notes\n        \"\"\"\n        return self.notes\n\n    def get_op_value(self) -> int:\n        \"\"\"\n        Get the value of the opcode\n\n        :returns: the value\n        \"\"\"\n        return self.ident\n\n    def get_data(self) -> bytes:\n        \"\"\"\n        Return the data of this instruction (the payload)\n\n        :returns: the instruction payload bytes\n        \"\"\"\n        return self.data\n\n    def get_output(self, idx: int = -1) -> str:\n        \"\"\"\n        Return an additional output of the instruction\n\n        :returns: additional output of the instruction\n        \"\"\"\n        buff = \"\"\n\n        data = self.get_data()\n\n        buff += repr(data) + \" | \"\n        for i in range(0, len(data)):\n            buff += \"\\\\x{:02x}\".format(data[i])\n\n        return buff\n\n    def get_operands(self, idx: int=-1) -> tuple[Operand, str]:\n        # FIXME: not sure of binascii is the right choice here,\n        # but before it was repr(), which lead to weird outputs of bytearrays\n        if isinstance(self.get_data(), bytearray):\n            return [\n                (\n                    Operand.RAW,\n                    binascii.hexlify(self.get_data()).decode('ascii'),\n                )\n            ]\n        else:\n            return [(Operand.RAW, repr(self.get_data()))]\n\n    def get_formatted_operands(self) -> None:\n        return None\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the name of the instruction\n\n        :returns: name string\n        \"\"\"\n        return \"fill-array-data-payload\"\n\n    def show_buff(self, pos: int) -> str:\n        \"\"\"\n        Return the display of the instruction\n\n        :returns: display string\n        \"\"\"\n        buff = self.get_name() + \" \"\n\n        for i in range(0, len(self.data)):\n            buff += \"\\\\x%02x\" % self.data[i]\n        return buff\n\n    def show(self, pos: int) -> None:\n        \"\"\"\n        Print the instruction\n\n        :param pos: the position of the instruction\n        \"\"\"\n        print(self.show_buff(pos), end=' ')\n\n    def get_length(self) -> int:\n        \"\"\"\n        Return the length of the instruction\n\n        :returns: the length\n        \"\"\"\n        return ((self.size * self.element_width + 1) // 2 + 4) * 2\n\n    def get_raw(self) -> bytes:\n        return (\n            self.CM.packer[\"2HI\"].pack(\n                self.ident, self.element_width, self.size\n            )\n            + self.data\n        )\n\n    def get_hex(self) -> str:\n        \"\"\"\n        Returns a HEX String, separated by spaces every byte\n        \"\"\"\n        s = binascii.hexlify(self.get_raw()).decode(\"ascii\")\n        return \" \".join(s[i : i + 2] for i in range(0, len(s), 2))\n\n    def disasm(self) -> str:\n        # FIXME:\n        return self.show_buff(None)\n\n\nclass SparseSwitch:\n    \"\"\"\n    This class can parse a SparseSwitch instruction\n\n    :param buff: a Buff object which represents a buffer where the instruction is stored\n    \"\"\"\n\n    # FIXME: why is this not a subclass of Instruction?\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        self.OP = 0x0\n        self.notes = []\n        self.CM = cm\n\n        self.format_general_size = calcsize(\"2H\")\n        self.ident, self.size = cm.packer[\"2H\"].unpack(buff[0:4])\n\n        self.keys = []\n        self.targets = []\n\n        idx = self.format_general_size\n        for i in range(0, self.size):\n            self.keys.append(cm.packer[\"l\"].unpack(buff[idx : idx + 4])[0])\n            idx += 4\n\n        for i in range(0, self.size):\n            self.targets.append(cm.packer[\"l\"].unpack(buff[idx : idx + 4])[0])\n            idx += 4\n\n    def add_note(self, msg: str) -> None:\n        \"\"\"\n        Add a note to this instruction\n\n        :param msg: the message\n        \"\"\"\n        self.notes.append(msg)\n\n    def get_notes(self) -> list[str]:\n        \"\"\"\n        Get all notes from this instruction\n\n        :returns: a list of note strings\n        \"\"\"\n        return self.notes\n\n    def get_op_value(self) -> int:\n        \"\"\"\n        Get the value of the opcode\n\n        :returns: the value\n        \"\"\"\n        return self.ident\n\n    def get_keys(self) -> list[int]:\n        \"\"\"\n        Return the keys of the instruction\n\n        :returns: a list of long (integer)\n        \"\"\"\n        return self.keys\n\n    def get_values(self) -> list[int]:\n        return self.get_keys()\n\n    def get_targets(self) -> list[int]:\n        \"\"\"\n        Return the targets (address) of the instruction\n\n        :returns: a list of long (integer)\n        \"\"\"\n        return self.targets\n\n    def get_output(self, idx: int = -1) -> str:\n        \"\"\"\n        Return an additional output of the instruction\n\n        :returns: additional output string\n        \"\"\"\n        return \" \".join(\"%x\" % i for i in self.keys)\n\n    def get_operands(self, idx: int = -1) -> str:\n        \"\"\"\n        Return an additional output of the instruction\n\n        :returns: additional output string\n        \"\"\"\n        return []\n\n    def get_formatted_operands(self) -> None:\n        return None\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the name of the instruction\n\n        :returns: name string\n        \"\"\"\n        return \"sparse-switch-payload\"\n\n    def show_buff(self, pos: int) -> str:\n        \"\"\"\n        Return the display of the instruction\n\n        :returns: display string\n        \"\"\"\n        buff = self.get_name() + \" \"\n        for i in range(0, len(self.keys)):\n            buff += \"{:x}:{:x} \".format(self.keys[i], self.targets[i])\n\n        return buff\n\n    def show(self, pos) -> None:\n        \"\"\"\n        Print the instruction\n        \"\"\"\n        print(self.show_buff(pos), end=' ')\n\n    def get_length(self) -> int:\n        return self.format_general_size + (self.size * calcsize('<L')) * 2\n\n    def get_raw(self) -> bytes:\n        return (\n            self.CM.packer[\"2H\"].pack(self.ident, self.size)\n            + b''.join(self.CM.packer[\"l\"].pack(i) for i in self.keys)\n            + b''.join(self.CM.packer[\"l\"].pack(i) for i in self.targets)\n        )\n\n    def get_hex(self) -> str:\n        \"\"\"\n        Returns a HEX String, separated by spaces every byte\n\n        :returns: hex string\n        \"\"\"\n        s = binascii.hexlify(self.get_raw()).decode('ascii')\n        return \" \".join(s[i : i + 2] for i in range(0, len(s), 2))\n\n    def disasm(self) -> str:\n        # FIXME:\n        return self.show_buff(None)\n\n\nclass PackedSwitch:\n    \"\"\"\n    This class can parse a `PackedSwitch` instruction\n\n    :param buff: a Buff object which represents a buffer where the instruction is stored\n    \"\"\"\n\n    # FIXME: why is this not a subclass of Instruction?\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        self.OP = 0x0\n        self.notes = []\n        self.CM = cm\n\n        self.format_general_size = calcsize(\"2HI\")\n\n        self.ident, self.size, self.first_key = cm.packer[\"2Hi\"].unpack(\n            buff[0:8]\n        )\n\n        self.targets = []\n\n        idx = self.format_general_size\n\n        max_size = self.size\n        if (max_size * 4) > len(buff):\n            max_size = len(buff) - idx - 8\n\n        for i in range(0, max_size):\n            self.targets.append(cm.packer[\"l\"].unpack(buff[idx : idx + 4])[0])\n            idx += 4\n\n    def add_note(self, msg: str) -> None:\n        \"\"\"\n        Add a note to this instruction\n\n        :param msg: the message\n        \"\"\"\n        self.notes.append(msg)\n\n    def get_notes(self) -> list[str]:\n        \"\"\"\n        Get all notes from this instruction\n\n        :returns: a list of note strings\n        \"\"\"\n        return self.notes\n\n    def get_op_value(self) -> int:\n        \"\"\"\n        Get the value of the opcode\n\n        :returns: opcode value\n        \"\"\"\n        return self.ident\n\n    def get_keys(self) -> list[int]:\n        \"\"\"\n        Return the keys of the instruction\n\n        :returns: a list of long (integer)\n        \"\"\"\n        return [(self.first_key + i) for i in range(0, len(self.targets))]\n\n    def get_values(self) -> list[int]:\n        return self.get_keys()\n\n    def get_targets(self) -> list[int]:\n        \"\"\"\n        Return the targets (address) of the instruction\n\n        :returns: a list of long (integer)\n        \"\"\"\n        return self.targets\n\n    def get_output(self, idx: int = -1) -> str:\n        \"\"\"\n        Return an additional output of the instruction\n\n        :returns: additional output string\n        \"\"\"\n        return \" \".join(\n            \"%x\" % (self.first_key + i) for i in range(0, len(self.targets))\n        )\n\n    def get_operands(self, idx: int = -1) -> list:\n        \"\"\"\n        Return an additional output of the instruction\n\n        :returns: list\n        \"\"\"\n        return []\n\n    def get_formatted_operands(self) -> None:\n        return None\n\n    def get_name(self) -> str:\n        \"\"\"\n        Return the name of the instruction\n\n        :returns: name string\n        \"\"\"\n        return \"packed-switch-payload\"\n\n    def show_buff(self, pos: int) -> str:\n        \"\"\"\n        Return the display of the instruction\n\n        :returns: display string\n        \"\"\"\n        buff = self.get_name() + \" \"\n        buff += \"%x:\" % self.first_key\n\n        for i in self.targets:\n            buff += \" %x\" % i\n\n        return buff\n\n    def show(self, pos: int) -> None:\n        \"\"\"\n        Print the instruction\n        \"\"\"\n        print(self.show_buff(pos), end=' ')\n\n    def get_length(self) -> int:\n        return self.format_general_size + (self.size * calcsize('<L'))\n\n    def get_raw(self) -> bytes:\n        return self.CM.packer[\"2Hi\"].pack(\n            self.ident, self.size, self.first_key\n        ) + b''.join(self.CM.packer[\"l\"].pack(i) for i in self.targets)\n\n    def get_hex(self) -> bytes:\n        \"\"\"\n        Returns a HEX String, separated by spaces every byte\n        \"\"\"\n        s = binascii.hexlify(self.get_raw()).decode('ascii')\n        return \" \".join(s[i : i + 2] for i in range(0, len(s), 2))\n\n    def disasm(self) -> str:\n        # FIXME:\n        return self.show_buff(None)\n\n\nclass Instruction35c(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 35c format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        i16a, self.BBBB, i16b = cm.packer[\"3H\"].unpack(buff[: self.length])\n        self.OP = i16a & 0xFF\n        self.G = (i16a >> 8) & 0xF\n        self.A = (i16a >> 12) & 0xF\n\n        self.C = i16b & 0xF\n        self.D = (i16b >> 4) & 0xF\n        self.E = (i16b >> 8) & 0xF\n        self.F = (i16b >> 12) & 0xF\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.A == 0:\n            return \"%s\" % kind\n        elif self.A == 1:\n            return \"v%d, %s\" % (self.C, kind)\n        elif self.A == 2:\n            return \"v%d, v%d, %s\" % (self.C, self.D, kind)\n        elif self.A == 3:\n            return \"v%d, v%d, v%d, %s\" % (self.C, self.D, self.E, kind)\n        elif self.A == 4:\n            return \"v%d, v%d, v%d, v%d, %s\" % (\n                self.C,\n                self.D,\n                self.E,\n                self.F,\n                kind,\n            )\n        elif self.A == 5:\n            return \"v%d, v%d, v%d, v%d, v%d, %s\" % (\n                self.C,\n                self.D,\n                self.E,\n                self.F,\n                self.G,\n                kind,\n            )\n\n        return ''\n\n    def get_operands(self, idx: int = -1) -> list[tuple]:\n        l = []\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.A == 0:\n            l.append((self.get_kind() + Operand.KIND, self.BBBB, kind))\n        elif self.A == 1:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 2:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 3:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 4:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (Operand.REGISTER, self.F),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 5:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (Operand.REGISTER, self.F),\n                    (Operand.REGISTER, self.G),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n\n        return l\n\n    def get_ref_kind(self) -> int:\n        return self.BBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"3H\"].pack(\n            (self.A << 12) | (self.G << 8) | self.OP,\n            self.BBBB,\n            (self.F << 12) | (self.E << 8) | (self.D << 4) | self.C,\n        )\n\n\nclass Instruction10x(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 10x format\n    \"\"\"\n\n    length = 2\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, padding = cm.packer[\"BB\"].unpack(buff[: self.length])\n        if padding != 0:\n            raise InvalidInstruction(\n                'High byte of opcode with format 10x must be zero!'\n            )\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"H\"].pack(self.OP)\n\n\nclass Instruction21h(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 21h format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.__BBBB = cm.packer[\"BBh\"].unpack(\n            buff[: self.length]\n        )\n\n        if self.OP == 0x15:\n            # OP 0x15: int16_t -> int32_t\n            self.BBBB = self.__BBBB << 16\n        elif self.OP == 0x19:\n            # OP 0x19: int16_t -> int64_t\n            self.BBBB = self.__BBBB << 48\n        else:\n            # Unknown opcode?\n            self.BBBB = self.__BBBB\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, {}\".format(self.AA, self.BBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.AA), (Operand.LITERAL, self.BBBB)]\n\n    def get_literals(self) -> list[int]:\n        return [self.BBBB]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Hh\"].pack((self.AA << 8) | self.OP, self.__BBBB)\n\n\nclass Instruction11n(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 11n format\n    \"\"\"\n\n    length = 2\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, i8 = cm.packer[\"Bb\"].unpack(buff[: self.length])\n        self.A = i8 & 0xF\n        # Sign extension not required\n        self.B = i8 >> 4\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, {}\".format(self.A, self.B)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.A), (Operand.LITERAL, self.B)]\n\n    def get_literals(self) -> list[int]:\n        return [self.B]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"h\"].pack(\n            (self.B << 12) | (self.A << 8) | self.OP\n        )\n\n\nclass Instruction21c(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 21c format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n        self.OP, self.AA, self.BBBB = cm.packer[\"BBH\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n        if self.get_kind() == Kind.STRING:\n            kind = '\"{}\"'.format(kind)\n        return \"v{}, {}\".format(self.AA, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n        return [\n            (Operand.REGISTER, self.AA),\n            (self.get_kind() + Operand.KIND, self.BBBB, kind),\n        ]\n\n    def get_ref_kind(self) -> int:\n        return self.BBBB\n\n    def get_string(self) -> str:\n        return get_kind(self.cm, self.get_kind(), self.BBBB)\n\n    def get_raw_string(self) -> str:\n        return get_kind(self.cm, Kind.RAW_STRING, self.BBBB)\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"2H\"].pack((self.AA << 8) | self.OP, self.BBBB)\n\n\nclass Instruction21s(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 21s format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> bytes:\n        super().__init__()\n        self.cm = cm\n\n        # BBBB is a signed int (16bit)\n        self.OP, self.AA, self.BBBB = self.cm.packer[\"BBh\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, {}\".format(self.AA, self.BBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.AA), (Operand.LITERAL, self.BBBB)]\n\n    def get_literals(self) -> list[int]:\n        return [self.BBBB]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"BBh\"].pack(self.OP, self.AA, self.BBBB)\n\n\nclass Instruction22c(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 22c format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        i16, self.CCCC = cm.packer[\"2H\"].unpack(buff[: self.length])\n        self.OP = i16 & 0xFF\n        self.A = (i16 >> 8) & 0xF\n        self.B = (i16 >> 12) & 0xF\n\n    def get_output(self, idx: int = -1):\n        kind = get_kind(self.cm, self.get_kind(), self.CCCC)\n        return \"v{}, v{}, {}\".format(self.A, self.B, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.CCCC)\n        return [\n            (Operand.REGISTER, self.A),\n            (Operand.REGISTER, self.B),\n            (self.get_kind() + Operand.KIND, self.CCCC, kind),\n        ]\n\n    def get_ref_kind(self) -> int:\n        return self.CCCC\n\n    def get_raw(self) -> int:\n        return self.cm.packer[\"2H\"].pack(\n            (self.B << 12) | (self.A << 8) | self.OP, self.CCCC\n        )\n\n\nclass Instruction22cs(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 22cs format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> str:\n        super().__init__()\n        self.cm = cm\n\n        i16, self.CCCC = cm.packer[\"2H\"].unpack(buff[: self.length])\n        self.OP = i16 & 0xFF\n        self.A = (i16 >> 8) & 0xF\n        self.B = (i16 >> 12) & 0xF\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.CCCC)\n        return \"v{}, v{}, {}\".format(self.A, self.B, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.CCCC)\n        return [\n            (Operand.REGISTER, self.A),\n            (Operand.REGISTER, self.B),\n            (self.get_kind() + Operand.KIND, self.CCCC, kind),\n        ]\n\n    def get_ref_kind(self) -> int:\n        return self.CCCC\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"2H\"].pack(\n            (self.B << 12) | (self.A << 8) | self.OP, self.CCCC\n        )\n\n\nclass Instruction31t(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 31t format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBBBBBB = cm.packer[\"BBi\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, {:+08x}h\".format(self.AA, self.BBBBBBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.AA), (Operand.OFFSET, self.BBBBBBBB)]\n\n    def get_ref_off(self) -> int:\n        return self.BBBBBBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Hi\"].pack(\n            (self.AA << 8) | self.OP, self.BBBBBBBB\n        )\n\n\nclass Instruction31c(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 31c format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n        self.OP, self.AA, self.BBBBBBBB = cm.packer[\"BBi\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n        return \"v{}, {}\".format(self.AA, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n        return [\n            (Operand.REGISTER, self.AA),\n            (self.get_kind() + Operand.KIND, self.BBBBBBBB, kind),\n        ]\n\n    def get_ref_kind(self) -> int:\n        return self.BBBBBBBB\n\n    def get_string(self) -> str:\n        \"\"\"\n        Return the string associated to the 'kind' argument\n\n        :returns: string\n        \"\"\"\n        return get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n\n    def get_raw_string(self) -> str:\n        return get_kind(self.cm, Kind.RAW_STRING, self.BBBBBBBB)\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"HI\"].pack(\n            (self.AA << 8) | self.OP, self.BBBBBBBB\n        )\n\n\nclass Instruction12x(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 12x format\n    \"\"\"\n\n    length = 2\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        (i16,) = cm.packer[\"h\"].unpack(buff[: self.length])\n        self.OP = i16 & 0xFF\n        self.A = (i16 >> 8) & 0xF\n        self.B = (i16 >> 12) & 0xF\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, v{}\".format(self.A, self.B)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.A), (Operand.REGISTER, self.B)]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"H\"].pack(\n            (self.B << 12) | (self.A << 8) | self.OP\n        )\n\n\nclass Instruction11x(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 11x format\n    \"\"\"\n\n    length = 2\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA = cm.packer[\"BB\"].unpack(buff[: self.length])\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}\".format(self.AA)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.AA)]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"H\"].pack((self.AA << 8) | self.OP)\n\n\nclass Instruction51l(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 51l format\n    \"\"\"\n\n    length = 10\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        # arbitrary double-width (64-bit) constant\n        self.OP, self.AA, self.BBBBBBBBBBBBBBBB = cm.packer[\"BBq\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, {}\".format(self.AA, self.BBBBBBBBBBBBBBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [\n            (Operand.REGISTER, self.AA),\n            (Operand.LITERAL, self.BBBBBBBBBBBBBBBB),\n        ]\n\n    def get_literals(self) -> list[int]:\n        return [self.BBBBBBBBBBBBBBBB]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"BBq\"].pack(\n            self.OP, self.AA, self.BBBBBBBBBBBBBBBB\n        )\n\n\nclass Instruction31i(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 31i format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBBBBBB = cm.packer[\"BBi\"].unpack(\n            buff[: self.length]\n        )\n\n        # 0x14 // const vAA, #+BBBBBBBB: arbitrary 32-bit constant\n        # 0x17 // const-wide/32 vAA, #+BBBBBBBB: signed int (32 bits)\n\n    def get_output(self, idx: int = -1) -> str:\n        # FIXME: on const-wide/32: it is actually a register pair vAA:vAA+1!\n        return \"v{}, {}\".format(self.AA, self.BBBBBBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.AA), (Operand.LITERAL, self.BBBBBBBB)]\n\n    def get_literals(self) -> list[int]:\n        return [self.BBBBBBBB]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"BBi\"].pack(self.OP, self.AA, self.BBBBBBBB)\n\n\nclass Instruction22x(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 22x format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBB = cm.packer[\"BBH\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, v{}\".format(self.AA, self.BBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.AA), (Operand.REGISTER, self.BBBB)]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"2H\"].pack((self.AA << 8) | self.OP, self.BBBB)\n\n\nclass Instruction23x(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 23x format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BB, self.CC = cm.packer[\"BBBB\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, v{}, v{}\".format(self.AA, self.BB, self.CC)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [\n            (Operand.REGISTER, self.AA),\n            (Operand.REGISTER, self.BB),\n            (Operand.REGISTER, self.CC),\n        ]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"2H\"].pack(\n            (self.AA << 8) | self.OP, (self.CC << 8) | self.BB\n        )\n\n\nclass Instruction20t(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 20t format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, padding, self.AAAA = cm.packer[\"BBh\"].unpack(\n            buff[: self.length]\n        )\n        if padding != 0:\n            raise InvalidInstruction(\n                'High byte of opcode with format 20t must be zero!'\n            )\n\n    def get_output(self, idx: int = -1) -> str:\n        # Offset is in 16bit units\n        return \"{:+04x}h\".format(self.AAAA)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.OFFSET, self.AAAA)]\n\n    def get_ref_off(self) -> int:\n        return self.AAAA\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Hh\"].pack(self.OP, self.AAAA)\n\n\nclass Instruction21t(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 21t format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBB = cm.packer[\"BBh\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, {:+04x}h\".format(self.AA, self.BBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.AA), (Operand.OFFSET, self.BBBB)]\n\n    def get_ref_off(self) -> int:\n        return self.BBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Hh\"].pack((self.AA << 8) | self.OP, self.BBBB)\n\n\nclass Instruction10t(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 10t format\n    \"\"\"\n\n    length = 2\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA = cm.packer[\"Bb\"].unpack(buff[: self.length])\n\n    def get_output(self, idx: int = -1) -> str:\n        # Offset is given in 16bit units\n        return \"{:+02x}h\".format(self.AA)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.OFFSET, self.AA)]\n\n    def get_ref_off(self) -> int:\n        return self.AA\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Bb\"].pack(self.OP, self.AA)\n\n\nclass Instruction22t(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 22t format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        i16, self.CCCC = cm.packer[\"Hh\"].unpack(buff[: self.length])\n        self.OP = i16 & 0xFF\n        self.A = (i16 >> 8) & 0xF\n        self.B = (i16 >> 12) & 0xF\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, v{}, {:+04x}h\".format(self.A, self.B, self.CCCC)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [\n            (Operand.REGISTER, self.A),\n            (Operand.REGISTER, self.B),\n            (Operand.OFFSET, self.CCCC),\n        ]\n\n    def get_ref_off(self) -> int:\n        return self.CCCC\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Hh\"].pack(\n            (self.B << 12) | (self.A << 8) | self.OP, self.CCCC\n        )\n\n\nclass Instruction22s(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 22s format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        i16, self.CCCC = cm.packer[\"Hh\"].unpack(buff[: self.length])\n        self.OP = i16 & 0xFF\n        self.A = (i16 >> 8) & 0xF\n        self.B = (i16 >> 12) & 0xF\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, v{}, {}\".format(self.A, self.B, self.CCCC)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [\n            (Operand.REGISTER, self.A),\n            (Operand.REGISTER, self.B),\n            (Operand.LITERAL, self.CCCC),\n        ]\n\n    def get_literals(self) -> list[int]:\n        return [self.CCCC]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Hh\"].pack(\n            (self.B << 12) | (self.A << 8) | self.OP, self.CCCC\n        )\n\n\nclass Instruction22b(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 22b format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BB, self.CC = cm.packer[\"BBBb\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, v{}, {}\".format(self.AA, self.BB, self.CC)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [\n            (Operand.REGISTER, self.AA),\n            (Operand.REGISTER, self.BB),\n            (Operand.LITERAL, self.CC),\n        ]\n\n    def get_literals(self) -> list[int]:\n        return [self.CC]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Hh\"].pack(\n            (self.AA << 8) | self.OP, (self.CC << 8) | self.BB\n        )\n\n\nclass Instruction30t(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 30t format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, padding, self.AAAAAAAA = cm.packer[\"BBi\"].unpack(\n            buff[: self.length]\n        )\n        if padding != 0:\n            raise InvalidInstruction(\n                'High byte of opcode with format 30t must be zero!'\n            )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"{:+08x}h\".format(self.AAAAAAAA)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.OFFSET, self.AAAAAAAA)]\n\n    def get_ref_off(self) -> int:\n        return self.AAAAAAAA\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"Hi\"].pack(self.OP, self.AAAAAAAA)\n\n\nclass Instruction3rc(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 3rc format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBB, self.CCCC = cm.packer[\"BBHH\"].unpack(\n            buff[: self.length]\n        )\n\n        self.NNNN = self.CCCC + self.AA - 1\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.CCCC == self.NNNN:\n            return \"v{}, {}\".format(self.CCCC, kind)\n        else:\n            return \"v{} ... v{}, {}\".format(self.CCCC, self.NNNN, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        return [\n            (Operand.REGISTER, i) for i in range(self.CCCC, self.NNNN + 1)\n        ] + [(self.get_kind() + Operand.KIND, self.BBBB, kind)]\n\n    def get_ref_kind(self) -> int:\n        return self.BBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"3H\"].pack(\n            (self.AA << 8) | self.OP, self.BBBB, self.CCCC\n        )\n\n\nclass Instruction32x(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 32x format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, padding, self.AAAA, self.BBBB = cm.packer[\"BBHH\"].unpack(\n            buff[: self.length]\n        )\n        if padding != 0:\n            raise InvalidInstruction(\n                'High byte of opcode with format 32x must be zero!'\n            )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"v{}, v{}\".format(self.AAAA, self.BBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.REGISTER, self.AAAA), (Operand.REGISTER, self.BBBB)]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"3H\"].pack(self.OP, self.AAAA, self.BBBB)\n\n\nclass Instruction20bc(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 20bc format\n    \"\"\"\n\n    length = 4\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBB = cm.packer[\"BBH\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        return \"{}, {}\".format(self.AA, self.BBBB)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        return [(Operand.LITERAL, self.AA), (Operand.LITERAL, self.BBBB)]\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"2H\"].pack((self.AA << 8) | self.OP, self.BBBB)\n\n\nclass Instruction35mi(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 35mi format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        i16a, self.BBBB, i16b = cm.packer[\"3H\"].unpack(buff[: self.length])\n        self.OP = i16a & 0xFF\n        self.G = (i16a >> 8) & 0xF\n        self.A = (i16a >> 12) & 0xF\n        self.C = i16b & 0xF\n        self.D = (i16b >> 4) & 0xF\n        self.E = (i16b >> 8) & 0xF\n        self.F = (i16b >> 12) & 0xF\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.A == 1:\n            return \"v%d, %s\" % (self.C, kind)\n        elif self.A == 2:\n            return \"v%d, v%d, %s\" % (self.C, self.D, kind)\n        elif self.A == 3:\n            return \"v%d, v%d, v%d, %s\" % (self.C, self.D, self.E, kind)\n        elif self.A == 4:\n            return \"v%d, v%d, v%d, v%d, %s\" % (\n                self.C,\n                self.D,\n                self.E,\n                self.F,\n                kind,\n            )\n        elif self.A == 5:\n            return \"v%d, v%d, v%d, v%d, v%d, %s\" % (\n                self.C,\n                self.D,\n                self.E,\n                self.F,\n                self.G,\n                kind,\n            )\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        l = []\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.A == 1:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 2:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 3:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 4:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (Operand.REGISTER, self.F),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 5:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (Operand.REGISTER, self.F),\n                    (Operand.REGISTER, self.G),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n\n        return l\n\n    def get_ref_kind(self) -> int:\n        return self.BBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"3H\"].pack(\n            (self.A << 12) | (self.G << 8) | self.OP,\n            self.BBBB,\n            (self.F << 12) | (self.E << 8) | (self.D << 4) | self.C,\n        )\n\n\nclass Instruction35ms(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 35ms format\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        i16a, self.BBBB, i16b = cm.packer[\"3H\"].unpack(buff[: self.length])\n        self.OP = i16a & 0xFF\n        self.G = (i16a >> 8) & 0xF\n        self.A = (i16a >> 12) & 0xF\n        self.C = i16b & 0xF\n        self.D = (i16b >> 4) & 0xF\n        self.E = (i16b >> 8) & 0xF\n        self.F = (i16b >> 12) & 0xF\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.A == 1:\n            return \"v%d, %s\" % (self.C, kind)\n        elif self.A == 2:\n            return \"v%d, v%d, %s\" % (self.C, self.D, kind)\n        elif self.A == 3:\n            return \"v%d, v%d, v%d, %s\" % (self.C, self.D, self.E, kind)\n        elif self.A == 4:\n            return \"v%d, v%d, v%d, v%d, %s\" % (\n                self.C,\n                self.D,\n                self.E,\n                self.F,\n                kind,\n            )\n        elif self.A == 5:\n            return \"v%d, v%d, v%d, v%d, v%d, %s\" % (\n                self.C,\n                self.D,\n                self.E,\n                self.F,\n                self.G,\n                kind,\n            )\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        l = []\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.A == 1:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 2:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 3:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 4:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (Operand.REGISTER, self.F),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n        elif self.A == 5:\n            l.extend(\n                [\n                    (Operand.REGISTER, self.C),\n                    (Operand.REGISTER, self.D),\n                    (Operand.REGISTER, self.E),\n                    (Operand.REGISTER, self.F),\n                    (Operand.REGISTER, self.G),\n                    (self.get_kind() + Operand.KIND, self.BBBB, kind),\n                ]\n            )\n\n        return l\n\n    def get_ref_kind(self) -> int:\n        return self.BBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"3H\"].pack(\n            (self.A << 12) | (self.G << 8) | self.OP,\n            self.BBBB,\n            (self.F << 12) | (self.E << 8) | (self.D << 4) | self.C,\n        )\n\n\nclass Instruction3rmi(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 3rmi format\n\n    Note, this instruction is similar to 3rc but holds an inline\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBB, self.CCCC = cm.packer[\"BBHH\"].unpack(\n            buff[: self.length]\n        )\n\n        self.NNNN = self.CCCC + self.AA - 1\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.CCCC == self.NNNN:\n            return \"v{}, {}\".format(self.CCCC, kind)\n        else:\n            return \"v{} ... v{}, {}\".format(self.CCCC, self.NNNN, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.CCCC == self.NNNN:\n            return [\n                (Operand.REGISTER, self.CCCC),\n                (self.get_kind() + Operand.KIND, self.BBBB, kind),\n            ]\n        else:\n            l = []\n            for i in range(self.CCCC, self.NNNN):\n                l.append((Operand.REGISTER, i))\n\n            l.append((self.get_kind() + Operand.KIND, self.BBBB, kind))\n            return l\n\n    def get_ref_kind(self) -> int:\n        return self.BBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"3H\"].pack(\n            (self.AA << 8) | self.OP, self.BBBB, self.CCCC\n        )\n\n\nclass Instruction3rms(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 3rms format\n\n    Note, this instruction is similar to 3rc but holds a vtaboff\n    \"\"\"\n\n    length = 6\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBB, self.CCCC = cm.packer[\"BBHH\"].unpack(\n            buff[: self.length]\n        )\n\n        self.NNNN = self.CCCC + self.AA - 1\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.CCCC == self.NNNN:\n            return \"v{}, {}\".format(self.CCCC, kind)\n        else:\n            return \"v{} ... v{}, {}\".format(self.CCCC, self.NNNN, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBB)\n\n        if self.CCCC == self.NNNN:\n            return [\n                (Operand.REGISTER, self.CCCC),\n                (self.get_kind() + Operand.KIND, self.BBBB, kind),\n            ]\n        else:\n            l = []\n            for i in range(self.CCCC, self.NNNN):\n                l.append((Operand.REGISTER, i))\n\n            l.append((self.get_kind() + Operand.KIND, self.BBBB, kind))\n            return l\n\n    def get_ref_kind(self) -> int:\n        return self.BBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"3H\"].pack(\n            (self.AA << 8) | self.OP, self.BBBB, self.CCCC\n        )\n\n\nclass Instruction41c(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 41c format\n\n    This instruction is only used in ODEX\n    \"\"\"\n\n    length = 8\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.BBBBBBBB, self.AAAA = cm.packer[\"HIH\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n        return \"v{}, {}\".format(self.AAAA, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n        return [\n            (Operand.REGISTER, self.AAAA),\n            (self.get_kind() + Operand.KIND, self.BBBBBBBB, kind),\n        ]\n\n    def get_ref_kind(self) -> int:\n        return self.BBBBBBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"HIH\"].pack(self.OP, self.BBBBBBBB, self.AAAA)\n\n\nclass Instruction40sc(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 40sc format\n\n    This instruction is only used in ODEX\n    \"\"\"\n\n    length = 8\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.BBBBBBBB, self.AAAA = cm.packer[\"HIH\"].unpack(\n            buff[: self.length]\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n        return \"{}, {}\".format(self.AAAA, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n        return [\n            (Operand.LITERAL, self.AAAA),\n            (self.get_kind() + Operand.KIND, self.BBBBBBBB, kind),\n        ]\n\n    def get_ref_kind(self) -> int:\n        return self.BBBBBBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"HIH\"].pack(self.OP, self.BBBBBBBB, self.AAAA)\n\n\nclass Instruction52c(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 52c format\n\n    This instruction is only used in ODEX\n    \"\"\"\n\n    length = 10\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        # FIXME: Not in the documentation!\n        # Using 16bit for opcode, but its ODEX, so...\n        self.OP, self.CCCCCCCC, self.AAAA, self.BBBB = cm.packer[\n            \"HI2H\"\n        ].unpack(buff[: self.length])\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.CCCCCCCC)\n        return \"v{}, v{}, {}\".format(self.AAAA, self.BBBB, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.CCCCCCCC)\n        return [\n            (Operand.LITERAL, self.AAAA),\n            (Operand.LITERAL, self.BBBB),\n            (self.get_kind() + Operand.KIND, self.CCCCCCCC, kind),\n        ]\n\n    def get_ref_kind(self) -> int:\n        return self.CCCCCCCC\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"HI2H\"].pack(\n            self.OP, self.CCCCCCCC, self.AAAA, self.BBBB\n        )\n\n\nclass Instruction5rc(Instruction):\n    \"\"\"\n    This class represents all instructions which have the 5rc format\n\n    This instruction is only used in ODEX\n    \"\"\"\n\n    length = 10\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.BBBBBBBB, self.AAAA, self.CCCC = cm.packer[\n            \"HI2H\"\n        ].unpack(buff[: self.length])\n\n        self.NNNN = self.CCCC + self.AAAA - 1\n\n    def get_output(self, idx: int = -1) -> str:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n\n        if self.CCCC == self.NNNN:\n            return \"v{}, {}\".format(self.CCCC, kind)\n        else:\n            return \"v{} ... v{}, {}\".format(self.CCCC, self.NNNN, kind)\n\n    def get_operands(self, idx: int = -1) -> list[tuple[Operand, int]]:\n        kind = get_kind(self.cm, self.get_kind(), self.BBBBBBBB)\n\n        if self.CCCC == self.NNNN:\n            return [\n                (Operand.REGISTER, self.CCCC),\n                (self.get_kind() + Operand.KIND, self.BBBBBBBB, kind),\n            ]\n        else:\n            l = []\n            for i in range(self.CCCC, self.NNNN):\n                l.append((Operand.REGISTER, i))\n\n            l.append((self.get_kind() + Operand.KIND, self.BBBBBBBB, kind))\n            return l\n\n    def get_ref_kind(self) -> int:\n        return self.BBBBBBBB\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"HI2H\"].pack(\n            self.OP, self.BBBBBBBB, self.AAAA, self.CCCC\n        )\n\n\nclass Instruction45cc(Instruction):\n    length = 8\n\n    # FIXME!!!\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        # Note: the documentation says A|G|op|BBBB ... but we need to parse op|A|G because of LE\n        self.OP, reg1, self.BBBB, reg2, self.HHHH = self.cm.packer[\n            \"BBHHH\"\n        ].unpack(buff[: self.get_length()])\n        # TODO need to check if registers are correct\n        self.A = (reg1 & 0xF0) >> 4\n        if self.A > 5:\n            raise InvalidInstruction(\n                \"A is greater than 5 (it is {}) which should never happen!\".format(\n                    self.A\n                )\n            )\n        self.G = reg1 & 0x0F\n\n        self.D = (reg2 & 0xF0) >> 4\n        self.C = reg2 & 0x0F\n\n        self.F = (reg2 & 0xF000) >> 12\n        self.E = (reg2 & 0x0F00) >> 8\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer[\"BBHHH\"].pack(\n            self.OP,\n            self.A << 4 | self.G,\n            self.BBBB,\n            self.F << 12 | self.E << 8 | self.D << 4 | self.C,\n            self.HHHH,\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        # FIXME get_kind of BBBB (method) and HHHH (proto)\n        if self.A == 1:\n            return 'v{}, {}, {}'.format(self.C, self.BBBB, self.HHHH)\n        if self.A == 2:\n            return 'v{}, v{}, {}, {}'.format(\n                self.C, self.D, self.BBBB, self.HHHH\n            )\n        if self.A == 3:\n            return 'v{}, v{}, v{}, {}, {}'.format(\n                self.C, self.D, self.E, self.BBBB, self.HHHH\n            )\n        if self.A == 4:\n            return 'v{}, v{}, v{}, v{}, {}, {}'.format(\n                self.C, self.D, self.E, self.F, self.BBBB, self.HHHH\n            )\n        if self.A == 5:\n            return 'v{}, v{}, v{}, v{}, v{}, {}, {}'.format(\n                self.C, self.D, self.E, self.F, self.G, self.BBBB, self.HHHH\n            )\n\n    def get_operands(self):\n        # FIXME\n        # THis one gets especially nasty, as all other opcodes assume that there\n        # is only a single kind type! But this opcode has two...\n        pass\n\n\nclass Instruction4rcc(Instruction):\n    length = 8\n\n    # FIXME!!!\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        super().__init__()\n        self.cm = cm\n\n        self.OP, self.AA, self.BBBB, self.CCCC, self.HHHH = self.cm.packer[\n            'BBHHH'\n        ].unpack(buff[: self.get_length()])\n        self.NNNN = self.AA + self.CCCC - 1\n\n    def get_raw(self) -> bytes:\n        return self.cm.packer['BBHHH'].pack(\n            self.OP, self.AA, self.BBBB, self.CCCC, self.HHHH\n        )\n\n    def get_output(self, idx: int = -1) -> str:\n        # FIXME get_kind of BBBB (meth) and HHHH (proto)\n        return 'v{} .. v{} {} {}'.format(\n            self.CCCC, self.NNNN, self.BBBB, self.HHHH\n        )\n\n    def get_operands(self):\n        # FIXME\n        pass\n\n\nclass Instruction00x(Instruction):\n    \"\"\"A class for unused instructions, has zero length and raises an error on initialization\"\"\"\n\n    length = 0\n\n    def __init__(self, cm: ClassManager, buff: bytes) -> None:\n        raise InvalidInstruction(\n            \"Instruction with opcode '0x{:02x}' is unused! This looks like invalid bytecode.\".format(\n                buff[0]\n            )\n        )\n\n\nDALVIK_OPCODES_FORMAT = {\n    # From the Dalvik documentation:\n    #\n    # > Most format IDs consist of three characters, two digits followed by a letter.\n    # > The first digit indicates the number of 16-bit code units in the format.\n    # > The second digit indicates the maximum number of registers that the\n    # > format contains (maximum, since some formats can accommodate a variable number of registers),\n    # > with the special designation \"r\" indicating that a range of registers is encoded.\n    # > The final letter semi-mnemonically indicates the type of any extra data encoded by the format.\n    # > For example, format \"21t\" is of length two, contains one register reference,\n    # > and additionally contains a branch target.\n    #\n    # This dict contains the Instruction type as a python class, the instruction\n    # name and if the instruction contains typed arguments also the Kind\n    # descriptor.\n    0x00: [Instruction10x, [\"nop\"]],\n    0x01: [Instruction12x, [\"move\"]],\n    0x02: [Instruction22x, [\"move/from16\"]],\n    0x03: [Instruction32x, [\"move/16\"]],\n    0x04: [Instruction12x, [\"move-wide\"]],\n    0x05: [Instruction22x, [\"move-wide/from16\"]],\n    0x06: [Instruction32x, [\"move-wide/16\"]],\n    0x07: [Instruction12x, [\"move-object\"]],\n    0x08: [Instruction22x, [\"move-object/from16\"]],\n    0x09: [Instruction32x, [\"move-object/16\"]],\n    0x0A: [Instruction11x, [\"move-result\"]],\n    0x0B: [Instruction11x, [\"move-result-wide\"]],\n    0x0C: [Instruction11x, [\"move-result-object\"]],\n    0x0D: [Instruction11x, [\"move-exception\"]],\n    0x0E: [Instruction10x, [\"return-void\"]],\n    0x0F: [Instruction11x, [\"return\"]],\n    0x10: [Instruction11x, [\"return-wide\"]],\n    0x11: [Instruction11x, [\"return-object\"]],\n    0x12: [Instruction11n, [\"const/4\"]],\n    0x13: [Instruction21s, [\"const/16\"]],\n    0x14: [Instruction31i, [\"const\"]],\n    0x15: [Instruction21h, [\"const/high16\"]],\n    0x16: [Instruction21s, [\"const-wide/16\"]],\n    0x17: [Instruction31i, [\"const-wide/32\"]],\n    0x18: [Instruction51l, [\"const-wide\"]],\n    0x19: [Instruction21h, [\"const-wide/high16\"]],\n    0x1A: [Instruction21c, [\"const-string\", Kind.STRING]],\n    0x1B: [Instruction31c, [\"const-string/jumbo\", Kind.STRING]],\n    0x1C: [Instruction21c, [\"const-class\", Kind.TYPE]],\n    0x1D: [Instruction11x, [\"monitor-enter\"]],\n    0x1E: [Instruction11x, [\"monitor-exit\"]],\n    0x1F: [Instruction21c, [\"check-cast\", Kind.TYPE]],\n    0x20: [Instruction22c, [\"instance-of\", Kind.TYPE]],\n    0x21: [Instruction12x, [\"array-length\"]],\n    0x22: [Instruction21c, [\"new-instance\", Kind.TYPE]],\n    0x23: [Instruction22c, [\"new-array\", Kind.TYPE]],\n    0x24: [Instruction35c, [\"filled-new-array\", Kind.TYPE]],\n    0x25: [Instruction3rc, [\"filled-new-array/range\", Kind.TYPE]],\n    0x26: [Instruction31t, [\"fill-array-data\"]],\n    0x27: [Instruction11x, [\"throw\"]],\n    0x28: [Instruction10t, [\"goto\"]],\n    0x29: [Instruction20t, [\"goto/16\"]],\n    0x2A: [Instruction30t, [\"goto/32\"]],\n    0x2B: [Instruction31t, [\"packed-switch\"]],\n    0x2C: [Instruction31t, [\"sparse-switch\"]],\n    0x2D: [Instruction23x, [\"cmpl-float\"]],\n    0x2E: [Instruction23x, [\"cmpg-float\"]],\n    0x2F: [Instruction23x, [\"cmpl-double\"]],\n    0x30: [Instruction23x, [\"cmpg-double\"]],\n    0x31: [Instruction23x, [\"cmp-long\"]],\n    0x32: [Instruction22t, [\"if-eq\"]],\n    0x33: [Instruction22t, [\"if-ne\"]],\n    0x34: [Instruction22t, [\"if-lt\"]],\n    0x35: [Instruction22t, [\"if-ge\"]],\n    0x36: [Instruction22t, [\"if-gt\"]],\n    0x37: [Instruction22t, [\"if-le\"]],\n    0x38: [Instruction21t, [\"if-eqz\"]],\n    0x39: [Instruction21t, [\"if-nez\"]],\n    0x3A: [Instruction21t, [\"if-ltz\"]],\n    0x3B: [Instruction21t, [\"if-gez\"]],\n    0x3C: [Instruction21t, [\"if-gtz\"]],\n    0x3D: [Instruction21t, [\"if-lez\"]],\n    # unused\n    0x3E: [Instruction00x, [\"unused\"]],\n    0x3F: [Instruction00x, [\"unused\"]],\n    0x40: [Instruction00x, [\"unused\"]],\n    0x41: [Instruction00x, [\"unused\"]],\n    0x42: [Instruction00x, [\"unused\"]],\n    0x43: [Instruction00x, [\"unused\"]],\n    0x44: [Instruction23x, [\"aget\"]],\n    0x45: [Instruction23x, [\"aget-wide\"]],\n    0x46: [Instruction23x, [\"aget-object\"]],\n    0x47: [Instruction23x, [\"aget-boolean\"]],\n    0x48: [Instruction23x, [\"aget-byte\"]],\n    0x49: [Instruction23x, [\"aget-char\"]],\n    0x4A: [Instruction23x, [\"aget-short\"]],\n    0x4B: [Instruction23x, [\"aput\"]],\n    0x4C: [Instruction23x, [\"aput-wide\"]],\n    0x4D: [Instruction23x, [\"aput-object\"]],\n    0x4E: [Instruction23x, [\"aput-boolean\"]],\n    0x4F: [Instruction23x, [\"aput-byte\"]],\n    0x50: [Instruction23x, [\"aput-char\"]],\n    0x51: [Instruction23x, [\"aput-short\"]],\n    0x52: [Instruction22c, [\"iget\", Kind.FIELD]],\n    0x53: [Instruction22c, [\"iget-wide\", Kind.FIELD]],\n    0x54: [Instruction22c, [\"iget-object\", Kind.FIELD]],\n    0x55: [Instruction22c, [\"iget-boolean\", Kind.FIELD]],\n    0x56: [Instruction22c, [\"iget-byte\", Kind.FIELD]],\n    0x57: [Instruction22c, [\"iget-char\", Kind.FIELD]],\n    0x58: [Instruction22c, [\"iget-short\", Kind.FIELD]],\n    0x59: [Instruction22c, [\"iput\", Kind.FIELD]],\n    0x5A: [Instruction22c, [\"iput-wide\", Kind.FIELD]],\n    0x5B: [Instruction22c, [\"iput-object\", Kind.FIELD]],\n    0x5C: [Instruction22c, [\"iput-boolean\", Kind.FIELD]],\n    0x5D: [Instruction22c, [\"iput-byte\", Kind.FIELD]],\n    0x5E: [Instruction22c, [\"iput-char\", Kind.FIELD]],\n    0x5F: [Instruction22c, [\"iput-short\", Kind.FIELD]],\n    0x60: [Instruction21c, [\"sget\", Kind.FIELD]],\n    0x61: [Instruction21c, [\"sget-wide\", Kind.FIELD]],\n    0x62: [Instruction21c, [\"sget-object\", Kind.FIELD]],\n    0x63: [Instruction21c, [\"sget-boolean\", Kind.FIELD]],\n    0x64: [Instruction21c, [\"sget-byte\", Kind.FIELD]],\n    0x65: [Instruction21c, [\"sget-char\", Kind.FIELD]],\n    0x66: [Instruction21c, [\"sget-short\", Kind.FIELD]],\n    0x67: [Instruction21c, [\"sput\", Kind.FIELD]],\n    0x68: [Instruction21c, [\"sput-wide\", Kind.FIELD]],\n    0x69: [Instruction21c, [\"sput-object\", Kind.FIELD]],\n    0x6A: [Instruction21c, [\"sput-boolean\", Kind.FIELD]],\n    0x6B: [Instruction21c, [\"sput-byte\", Kind.FIELD]],\n    0x6C: [Instruction21c, [\"sput-char\", Kind.FIELD]],\n    0x6D: [Instruction21c, [\"sput-short\", Kind.FIELD]],\n    0x6E: [Instruction35c, [\"invoke-virtual\", Kind.METH]],\n    0x6F: [Instruction35c, [\"invoke-super\", Kind.METH]],\n    0x70: [Instruction35c, [\"invoke-direct\", Kind.METH]],\n    0x71: [Instruction35c, [\"invoke-static\", Kind.METH]],\n    0x72: [Instruction35c, [\"invoke-interface\", Kind.METH]],\n    # unused\n    0x73: [Instruction00x, [\"unused\"]],\n    0x74: [Instruction3rc, [\"invoke-virtual/range\", Kind.METH]],\n    0x75: [Instruction3rc, [\"invoke-super/range\", Kind.METH]],\n    0x76: [Instruction3rc, [\"invoke-direct/range\", Kind.METH]],\n    0x77: [Instruction3rc, [\"invoke-static/range\", Kind.METH]],\n    0x78: [Instruction3rc, [\"invoke-interface/range\", Kind.METH]],\n    # unused\n    0x79: [Instruction00x, [\"unused\"]],\n    0x7A: [Instruction00x, [\"unused\"]],\n    0x7B: [Instruction12x, [\"neg-int\"]],\n    0x7C: [Instruction12x, [\"not-int\"]],\n    0x7D: [Instruction12x, [\"neg-long\"]],\n    0x7E: [Instruction12x, [\"not-long\"]],\n    0x7F: [Instruction12x, [\"neg-float\"]],\n    0x80: [Instruction12x, [\"neg-double\"]],\n    0x81: [Instruction12x, [\"int-to-long\"]],\n    0x82: [Instruction12x, [\"int-to-float\"]],\n    0x83: [Instruction12x, [\"int-to-double\"]],\n    0x84: [Instruction12x, [\"long-to-int\"]],\n    0x85: [Instruction12x, [\"long-to-float\"]],\n    0x86: [Instruction12x, [\"long-to-double\"]],\n    0x87: [Instruction12x, [\"float-to-int\"]],\n    0x88: [Instruction12x, [\"float-to-long\"]],\n    0x89: [Instruction12x, [\"float-to-double\"]],\n    0x8A: [Instruction12x, [\"double-to-int\"]],\n    0x8B: [Instruction12x, [\"double-to-long\"]],\n    0x8C: [Instruction12x, [\"double-to-float\"]],\n    0x8D: [Instruction12x, [\"int-to-byte\"]],\n    0x8E: [Instruction12x, [\"int-to-char\"]],\n    0x8F: [Instruction12x, [\"int-to-short\"]],\n    0x90: [Instruction23x, [\"add-int\"]],\n    0x91: [Instruction23x, [\"sub-int\"]],\n    0x92: [Instruction23x, [\"mul-int\"]],\n    0x93: [Instruction23x, [\"div-int\"]],\n    0x94: [Instruction23x, [\"rem-int\"]],\n    0x95: [Instruction23x, [\"and-int\"]],\n    0x96: [Instruction23x, [\"or-int\"]],\n    0x97: [Instruction23x, [\"xor-int\"]],\n    0x98: [Instruction23x, [\"shl-int\"]],\n    0x99: [Instruction23x, [\"shr-int\"]],\n    0x9A: [Instruction23x, [\"ushr-int\"]],\n    0x9B: [Instruction23x, [\"add-long\"]],\n    0x9C: [Instruction23x, [\"sub-long\"]],\n    0x9D: [Instruction23x, [\"mul-long\"]],\n    0x9E: [Instruction23x, [\"div-long\"]],\n    0x9F: [Instruction23x, [\"rem-long\"]],\n    0xA0: [Instruction23x, [\"and-long\"]],\n    0xA1: [Instruction23x, [\"or-long\"]],\n    0xA2: [Instruction23x, [\"xor-long\"]],\n    0xA3: [Instruction23x, [\"shl-long\"]],\n    0xA4: [Instruction23x, [\"shr-long\"]],\n    0xA5: [Instruction23x, [\"ushr-long\"]],\n    0xA6: [Instruction23x, [\"add-float\"]],\n    0xA7: [Instruction23x, [\"sub-float\"]],\n    0xA8: [Instruction23x, [\"mul-float\"]],\n    0xA9: [Instruction23x, [\"div-float\"]],\n    0xAA: [Instruction23x, [\"rem-float\"]],\n    0xAB: [Instruction23x, [\"add-double\"]],\n    0xAC: [Instruction23x, [\"sub-double\"]],\n    0xAD: [Instruction23x, [\"mul-double\"]],\n    0xAE: [Instruction23x, [\"div-double\"]],\n    0xAF: [Instruction23x, [\"rem-double\"]],\n    0xB0: [Instruction12x, [\"add-int/2addr\"]],\n    0xB1: [Instruction12x, [\"sub-int/2addr\"]],\n    0xB2: [Instruction12x, [\"mul-int/2addr\"]],\n    0xB3: [Instruction12x, [\"div-int/2addr\"]],\n    0xB4: [Instruction12x, [\"rem-int/2addr\"]],\n    0xB5: [Instruction12x, [\"and-int/2addr\"]],\n    0xB6: [Instruction12x, [\"or-int/2addr\"]],\n    0xB7: [Instruction12x, [\"xor-int/2addr\"]],\n    0xB8: [Instruction12x, [\"shl-int/2addr\"]],\n    0xB9: [Instruction12x, [\"shr-int/2addr\"]],\n    0xBA: [Instruction12x, [\"ushr-int/2addr\"]],\n    0xBB: [Instruction12x, [\"add-long/2addr\"]],\n    0xBC: [Instruction12x, [\"sub-long/2addr\"]],\n    0xBD: [Instruction12x, [\"mul-long/2addr\"]],\n    0xBE: [Instruction12x, [\"div-long/2addr\"]],\n    0xBF: [Instruction12x, [\"rem-long/2addr\"]],\n    0xC0: [Instruction12x, [\"and-long/2addr\"]],\n    0xC1: [Instruction12x, [\"or-long/2addr\"]],\n    0xC2: [Instruction12x, [\"xor-long/2addr\"]],\n    0xC3: [Instruction12x, [\"shl-long/2addr\"]],\n    0xC4: [Instruction12x, [\"shr-long/2addr\"]],\n    0xC5: [Instruction12x, [\"ushr-long/2addr\"]],\n    0xC6: [Instruction12x, [\"add-float/2addr\"]],\n    0xC7: [Instruction12x, [\"sub-float/2addr\"]],\n    0xC8: [Instruction12x, [\"mul-float/2addr\"]],\n    0xC9: [Instruction12x, [\"div-float/2addr\"]],\n    0xCA: [Instruction12x, [\"rem-float/2addr\"]],\n    0xCB: [Instruction12x, [\"add-double/2addr\"]],\n    0xCC: [Instruction12x, [\"sub-double/2addr\"]],\n    0xCD: [Instruction12x, [\"mul-double/2addr\"]],\n    0xCE: [Instruction12x, [\"div-double/2addr\"]],\n    0xCF: [Instruction12x, [\"rem-double/2addr\"]],\n    0xD0: [Instruction22s, [\"add-int/lit16\"]],\n    0xD1: [Instruction22s, [\"rsub-int\"]],\n    0xD2: [Instruction22s, [\"mul-int/lit16\"]],\n    0xD3: [Instruction22s, [\"div-int/lit16\"]],\n    0xD4: [Instruction22s, [\"rem-int/lit16\"]],\n    0xD5: [Instruction22s, [\"and-int/lit16\"]],\n    0xD6: [Instruction22s, [\"or-int/lit16\"]],\n    0xD7: [Instruction22s, [\"xor-int/lit16\"]],\n    0xD8: [Instruction22b, [\"add-int/lit8\"]],\n    0xD9: [Instruction22b, [\"rsub-int/lit8\"]],\n    0xDA: [Instruction22b, [\"mul-int/lit8\"]],\n    0xDB: [Instruction22b, [\"div-int/lit8\"]],\n    0xDC: [Instruction22b, [\"rem-int/lit8\"]],\n    0xDD: [Instruction22b, [\"and-int/lit8\"]],\n    0xDE: [Instruction22b, [\"or-int/lit8\"]],\n    0xDF: [Instruction22b, [\"xor-int/lit8\"]],\n    0xE0: [Instruction22b, [\"shl-int/lit8\"]],\n    0xE1: [Instruction22b, [\"shr-int/lit8\"]],\n    0xE2: [Instruction22b, [\"ushr-int/lit8\"]],\n    # unused\n    0xE3: [Instruction00x, [\"unused\"]],\n    0xE4: [Instruction00x, [\"unused\"]],\n    0xE5: [Instruction00x, [\"unused\"]],\n    0xE6: [Instruction00x, [\"unused\"]],\n    0xE7: [Instruction00x, [\"unused\"]],\n    0xE8: [Instruction00x, [\"unused\"]],\n    0xE9: [Instruction00x, [\"unused\"]],\n    0xEA: [Instruction00x, [\"unused\"]],\n    0xEB: [Instruction00x, [\"unused\"]],\n    0xEC: [Instruction00x, [\"unused\"]],\n    0xED: [Instruction00x, [\"unused\"]],\n    0xEE: [Instruction00x, [\"unused\"]],\n    0xEF: [Instruction00x, [\"unused\"]],\n    0xF0: [Instruction00x, [\"unused\"]],\n    0xF1: [Instruction00x, [\"unused\"]],\n    0xF2: [Instruction00x, [\"unused\"]],\n    0xF3: [Instruction00x, [\"unused\"]],\n    0xF4: [Instruction00x, [\"unused\"]],\n    0xF5: [Instruction00x, [\"unused\"]],\n    0xF6: [Instruction00x, [\"unused\"]],\n    0xF7: [Instruction00x, [\"unused\"]],\n    0xF8: [Instruction00x, [\"unused\"]],\n    0xF9: [Instruction00x, [\"unused\"]],\n    # FIXME: what is with the Kinds? Need to implement in get_kinds and opcodes too\n    0xFA: [\n        Instruction45cc,\n        [\"invoke-polymorphic\", Kind.METH_PROTO],\n    ],  # Dalvik 038\n    0xFB: [\n        Instruction4rcc,\n        [\"invoke-polymorphic/range\", Kind.METH_PROTO],\n    ],  # Dalvik 038\n    0xFC: [Instruction35c, [\"invoke-custom\", Kind.CALL_SITE]],  # Dalvik 038\n    0xFD: [\n        Instruction3rc,\n        [\"invoke-custom/range\", Kind.CALL_SITE],\n    ],  # Dalvik 038\n    0xFE: [Instruction21c, [\"const-method-handle\", Kind.METH]],  # Dalvik 039\n    0xFF: [Instruction21c, ['const-method-type', Kind.PROTO]],  # Dalvik 039\n}\n\n# Pseudo instructions used for payload\nDALVIK_OPCODES_PAYLOAD = {\n    0x0100: [PackedSwitch],\n    0x0200: [SparseSwitch],\n    0x0300: [FillArrayData],\n}\n\n# TODO: is this even used? Examples?\nINLINE_METHODS = [\n    [\n        \"Lorg/apache/harmony/dalvik/NativeTestTarget;\",\n        \"emptyInlineMethod\",\n        \"()V\",\n    ],\n    [\"Ljava/lang/String;\", \"charAt\", \"(I)C\"],\n    [\"Ljava/lang/String;\", \"compareTo\", \"(Ljava/lang/String;)I\"],\n    [\"Ljava/lang/String;\", \"equals\", \"(Ljava/lang/Object;)Z\"],\n    [\"Ljava/lang/String;\", \"fastIndexOf\", \"(II)I\"],\n    [\"Ljava/lang/String;\", \"isEmpty\", \"()Z\"],\n    [\"Ljava/lang/String;\", \"length\", \"()I\"],\n    [\"Ljava/lang/Math;\", \"abs\", \"(I)I\"],\n    [\"Ljava/lang/Math;\", \"abs\", \"(J)J\"],\n    [\"Ljava/lang/Math;\", \"abs\", \"(F)F\"],\n    [\"Ljava/lang/Math;\", \"abs\", \"(D)D\"],\n    [\"Ljava/lang/Math;\", \"min\", \"(II)I\"],\n    [\"Ljava/lang/Math;\", \"max\", \"(II)I\"],\n    [\"Ljava/lang/Math;\", \"sqrt\", \"(D)D\"],\n    [\"Ljava/lang/Math;\", \"cos\", \"(D)D\"],\n    [\"Ljava/lang/Math;\", \"sin\", \"(D)D\"],\n    [\"Ljava/lang/Float;\", \"floatToIntBits\", \"(F)I\"],\n    [\"Ljava/lang/Float;\", \"floatToRawIntBits\", \"(F)I\"],\n    [\"Ljava/lang/Float;\", \"intBitsToFloat\", \"(I)F\"],\n    [\"Ljava/lang/Double;\", \"doubleToLongBits\", \"(D)J\"],\n    [\"Ljava/lang/Double;\", \"doubleToRawLongBits\", \"(D)J\"],\n    [\"Ljava/lang/Double;\", \"longBitsToDouble\", \"(J)D\"],\n]\n\nDALVIK_OPCODES_OPTIMIZED = {\n    0xF2FF: [Instruction5rc, [\"invoke-object-init/jumbo\", Kind.METH]],\n    0xF3FF: [Instruction52c, [\"iget-volatile/jumbo\", Kind.FIELD]],\n    0xF4FF: [Instruction52c, [\"iget-wide-volatile/jumbo\", Kind.FIELD]],\n    0xF5FF: [Instruction52c, [\"iget-object-volatile/jumbo \", Kind.FIELD]],\n    0xF6FF: [Instruction52c, [\"iput-volatile/jumbo\", Kind.FIELD]],\n    0xF7FF: [Instruction52c, [\"iput-wide-volatile/jumbo\", Kind.FIELD]],\n    0xF8FF: [Instruction52c, [\"iput-object-volatile/jumbo\", Kind.FIELD]],\n    0xF9FF: [Instruction41c, [\"sget-volatile/jumbo\", Kind.FIELD]],\n    0xFAFF: [Instruction41c, [\"sget-wide-volatile/jumbo\", Kind.FIELD]],\n    0xFBFF: [Instruction41c, [\"sget-object-volatile/jumbo\", Kind.FIELD]],\n    0xFCFF: [Instruction41c, [\"sput-volatile/jumbo\", Kind.FIELD]],\n    0xFDFF: [Instruction41c, [\"sput-wide-volatile/jumbo\", Kind.FIELD]],\n    0xFEFF: [Instruction41c, [\"sput-object-volatile/jumbo\", Kind.FIELD]],\n    0xFFFF: [Instruction40sc, [\"throw-verification-error/jumbo\", Kind.VARIES]],\n}\n\n\ndef get_instruction(\n    cm: ClassManager, op_value: int, buff: bytearray\n) -> Instruction:\n    \"\"\"\n    Return the [Instruction][androguard.core.dex.Instruction] for the given opcode\n\n    :param cm: `ClassManager` to propagate to `Instruction`\n    :param op_value: integer value of the instruction\n    :param buff: Bytecode starting with the `instruction`\n    :raises InvalidInstruction: if instruction is invalid\n    :returns: the parsed `Instruction`\n    \"\"\"\n    try:\n        return DALVIK_OPCODES_FORMAT[op_value][0](cm, buff)\n    except struct.error:\n        # FIXME: there are other possible errors too...\n        raise InvalidInstruction(\n            \"Invalid Instruction for '0x{:02x}': {}\".format(\n                op_value, repr(buff)\n            )\n        )\n\n\ndef get_optimized_instruction(\n    cm: ClassManager, op_value: int, buff: bytearray\n) -> Instruction:\n    \"\"\"Return the [Instruction][androguard.core.dex.Instruction] for the given optimized opcode\n\n    :param cm: `ClassManager` to propagate to `Instruction`\n    :param op_value: integer value of the instruction\n    :param buff: Bytecode starting with the `instruction`\n    :raises InvalidInstruction: if instruction is invalid\n    :returns: the parsed `Instruction`\n    \"\"\"\n    try:\n        return DALVIK_OPCODES_OPTIMIZED[op_value][0](cm, buff)\n    except struct.error:\n        # FIXME: there are other possible errors too...\n        raise InvalidInstruction(\n            \"Invalid Instruction for '0x{:04x}': {}\".format(\n                op_value, repr(buff)\n            )\n        )\n\n\ndef get_instruction_payload(\n    op_value: int, cm: ClassManager, buff: bytearray\n) -> Union[PackedSwitch, SparseSwitch, FillArrayData]:\n    try:\n        return DALVIK_OPCODES_PAYLOAD[op_value][0](cm, buff)\n    except struct.error:\n        # FIXME: there are other possible errors too...\n        raise InvalidInstruction(\n            \"Invalid Instruction for '0x{:04x}': {}\".format(\n                op_value, repr(buff)\n            )\n        )\n\n\nclass LinearSweepAlgorithm:\n    \"\"\"\n    This class is used to disassemble a method. The algorithm used by this class is linear sweep.\n    \"\"\"\n\n    @staticmethod\n    def get_instructions(\n        cm: ClassManager, size: int, insn: bytearray, idx: int\n    ) -> Iterator[Instruction]:\n        \"\"\"\n        Yields all instructions for the given bytecode sequence.\n        If unknown/corrupt/unused instructions are encountered,\n        the loop will stop and an error is written to the logger.\n\n        That means that the bytecode read might be corrupt\n        or was crafted in this way, to break parsers.\n\n        :param cm: a `ClassManager` object\n        :param size: the total size of the buffer in 16-bit units\n        :param insn: a raw buffer where are the instructions\n        :param idx: a start address in the buffer\n        :raises InvalidInstruction: if an instruction is invalid\n        :returns: iterator over `Instruction`s\n        \"\"\"\n        is_odex = cm.get_odex_format()\n\n        max_idx = size * calcsize('H')\n        if max_idx > len(insn):\n            logger.warning(\n                \"Declared size of instructions is larger than the bytecode!\"\n            )\n            max_idx = len(insn)\n\n        # Get instructions\n        # TODO sometimes there are padding bytes after the last instruction, to ensure 16bit alignment.\n        while idx < max_idx:\n            # Get one 16bit unit\n            # TODO: possible optimization; instead of reading the first 16 bits twice,\n            #       just push this into the Instruction's constructor\n            (op_value,) = cm.packer['H'].unpack(insn[idx : idx + 2])\n\n            try:\n                if op_value > 0xFF and (op_value & 0xFF) in (0x00, 0xFF):\n                    # FIXME: in theory, it could happen that this is a normal opcode? I.e. a 0xff opcode with AA being non zero\n                    if op_value in DALVIK_OPCODES_PAYLOAD:\n                        # payload instructions, i.e. for arrays or switch\n                        obj = get_instruction_payload(op_value, cm, insn[idx:])\n                    elif is_odex and (op_value in DALVIK_OPCODES_OPTIMIZED):\n                        # optimized instructions, only of ODEX file\n                        obj = get_optimized_instruction(\n                            cm, op_value, insn[idx:]\n                        )\n                    else:\n                        raise InvalidInstruction(\n                            \"Unknown Instruction '0x{:04x}'\".format(op_value)\n                        )\n                else:\n                    obj = get_instruction(cm, op_value & 0xFF, insn[idx:])\n            except InvalidInstruction as e:\n                raise InvalidInstruction(\n                    \"Invalid instruction encountered! Stop parsing bytecode at idx %s. Message: %s\",\n                    idx,\n                    e,\n                )\n            # emit instruction\n            yield obj\n            idx += obj.get_length()\n\n\nclass DCode:\n    \"\"\"\n    This class represents the instructions of a method\n\n    :param class_manager: the `ClassManager`\n    :param offset: the offset of the buffer\n    :param size: the total size of the buffer\n    :param buff: a raw buffer where are the instructions\n    \"\"\"\n\n    def __init__(\n        self, class_manager: ClassManager, offset: int, size: int, buff: bytes\n    ) -> None:\n        self.CM = class_manager\n        self.insn = buff\n        self.offset = offset\n        self.size = size\n\n        self.notes = {}\n        self.cached_instructions = None\n\n        self.idx = 0\n\n    def get_insn(self) -> bytes:\n        \"\"\"\n        Get the insn buffer\n\n        :returns: insn bytes\n        \"\"\"\n        return self.insn\n\n    def set_insn(self, insn: bytes) -> None:\n        \"\"\"\n        Set a new raw buffer to disassemble\n\n        :param insn: the buffer\n        \"\"\"\n        self.insn = insn\n        self.size = len(self.insn)\n\n    def seek(self, idx: int) -> None:\n        \"\"\"\n        Set the start address of the buffer\n\n        :param idx: the index\n        \"\"\"\n        self.idx = idx\n\n    def is_cached_instructions(self) -> bool:\n        if self.cached_instructions is not None:\n            return True\n        return False\n\n    def set_instructions(self, instructions: list[Instruction]) -> None:\n        \"\"\"\n        Set the instructions\n\n        :param instructions: the list of instructions\n        \"\"\"\n        self.cached_instructions = instructions\n\n    def get_instructions(self) -> Iterator[Instruction]:\n        \"\"\"\n        Return an iterator over [Instruction][androguard.core.dex.Instruction]\n\n        :returns: a generator of each `Instruction` (or a cached list of instructions if you have setup instructions)\n        \"\"\"\n        # it is possible to a cache for instructions (avoid a new disasm)\n        if self.cached_instructions is None:\n            ins = LinearSweepAlgorithm.get_instructions(\n                self.CM, self.size, self.insn, self.idx\n            )\n            self.cached_instructions = list(ins)\n\n        for i in self.cached_instructions:\n            yield i\n\n    def add_inote(\n        self, msg: str, idx: int, off: Union[int, None] = None\n    ) -> None:\n        \"\"\"\n        Add a message to a specific instruction by using (default) the index of the address if specified\n\n        :param msg: the message\n        :param idx: index of the instruction (the position in the list of the instruction)\n        :param off: address of the instruction\n        \"\"\"\n        if off is not None:\n            idx = self.off_to_pos(off)\n\n        if idx not in self.notes:\n            self.notes[idx] = []\n\n        self.notes[idx].append(msg)\n\n    def get_instruction(\n        self, idx: int, off: Union[int, None] = None\n    ) -> Instruction:\n        \"\"\"\n        Get a particular instruction by using (default) the index of the address if specified\n\n        :param idx: index of the instruction (the position in the list of the instruction)\n        :param off: address of the instruction\n\n        :returns: an `Instruction` object\n        \"\"\"\n        if off is not None:\n            idx = self.off_to_pos(off)\n        if self.cached_instructions is None:\n            self.get_instructions()\n        return self.cached_instructions[idx]\n\n    def off_to_pos(self, off: int) -> int:\n        \"\"\"\n        Get the position of an instruction by using the address\n\n        :param off: address of the instruction\n\n        :returns: the offset\n        \"\"\"\n        idx = 0\n        nb = 0\n        for i in self.get_instructions():\n            if idx == off:\n                return nb\n            nb += 1\n            idx += i.get_length()\n        return -1\n\n    def get_ins_off(self, off: int) -> Instruction:\n        \"\"\"\n        Get a particular instruction by using the address\n\n        :param off: address of the instruction\n\n        :returns: an `Instruction` object\n        \"\"\"\n        idx = 0\n        for i in self.get_instructions():\n            if idx == off:\n                return i\n            idx += i.get_length()\n        return None\n\n    def show(self) -> None:\n        \"\"\"\n        Display (with a pretty print) this object\n        \"\"\"\n        off = 0\n        for n, i in enumerate(self.get_instructions()):\n            print(\n                \"{:8d} (0x{:08x}) {:04x} {:30} {}\".format(\n                    n,\n                    off,\n                    i.get_op_value(),\n                    i.get_name(),\n                    i.get_output(self.idx),\n                )\n            )\n            off += i.get_length()\n\n    def get_raw(self) -> bytearray:\n        \"\"\"\n        Return the raw buffer of this object\n\n        :returns: buffer bytearray\n        \"\"\"\n        buff = bytearray()\n        for i in self.get_instructions():\n            buff += i.get_raw()\n        return buff\n\n    def get_length(self) -> int:\n        \"\"\"\n        Return the length of this object\n\n        :returns: length int\n        \"\"\"\n        return len(self.get_raw())\n\n\nclass TryItem:\n    \"\"\"\n    This class represents the `try_item` format\n\n    :param buff: a raw buffer where are the `try_item` format\n    :param cm: the `ClassManager`\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.offset = buff.tell()\n\n        self.CM = cm\n\n        self.start_addr, self.insn_count, self.handler_off = cm.packer[\n            \"I2H\"\n        ].unpack(buff.read(8))\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def get_start_addr(self) -> int:\n        \"\"\"\n        Get the start address of the block of code covered by this entry. The address is a count of 16-bit code units to the start of the first covered instruction.\n\n        :returns: address int\n        \"\"\"\n        return self.start_addr\n\n    def get_insn_count(self) -> int:\n        \"\"\"\n        Get the number of 16-bit code units covered by this entry\n\n        :returns: int\n        \"\"\"\n        return self.insn_count\n\n    def get_handler_off(self) -> int:\n        \"\"\"\n        Get the offset in bytes from the start of the associated `EncodedCatchHandlerList` to the `EncodedCatchHandler` for this entry.\n\n        :returns: int\n        \"\"\"\n        return self.handler_off\n\n    def get_raw(self) -> bytes:\n        return self.CM.packer[\"I2H\"].pack(\n            self.start_addr, self.insn_count, self.handler_off\n        )\n\n    def get_length(self) -> int:\n        return len(self.get_raw())\n\n\nclass DalvikCode:\n    \"\"\"\n    This class represents the instructions of a method\n\n    :param buff: a raw buffer where are the instructions\n    :param cm: the `ClassManager`\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO, cm: ClassManager) -> None:\n        self.CM = cm\n        self.offset = buff.tell()\n\n        (\n            self.registers_size,\n            self.ins_size,\n            self.outs_size,\n            self.tries_size,\n            self.debug_info_off,\n            self.insns_size,\n        ) = cm.packer[\"4H2I\"].unpack(buff.read(16))\n\n        ushort = calcsize('H')\n\n        self.code = DCode(\n            self.CM,\n            buff.tell(),\n            self.insns_size,\n            buff.read(self.insns_size * ushort),\n        )\n\n        if self.insns_size % 2 == 1 and self.tries_size > 0:\n            (self.padding,) = cm.packer[\"H\"].unpack(buff.read(2))\n\n        self.tries = []\n        self.handlers = None\n        if self.tries_size > 0:\n            for i in range(0, self.tries_size):\n                self.tries.append(TryItem(buff, self.CM))\n\n            self.handlers = EncodedCatchHandlerList(buff, self.CM)\n\n    def get_registers_size(self) -> int:\n        \"\"\"\n        Get the number of registers used by this code\n\n        :returns: number of registers\n        \"\"\"\n        return self.registers_size\n\n    def get_ins_size(self) -> int:\n        \"\"\"\n        Get the number of words of incoming arguments to the method that this code is for\n\n        :returns: number of words\n        \"\"\"\n        return self.ins_size\n\n    def get_outs_size(self) -> int:\n        \"\"\"\n        Get the number of words of outgoing argument space required by this code for method invocation\n\n        :returns: number of words\n        \"\"\"\n        return self.outs_size\n\n    def get_tries_size(self) -> int:\n        \"\"\"\n        Get the number of [TryItem][androguard.core.dex.TryItem] for this instance\n\n        :returns: number of `TryItem`\n        \"\"\"\n        return self.tries_size\n\n    def get_debug_info_off(self) -> int:\n        \"\"\"\n        Get the offset from the start of the file to the debug info (line numbers + local variable info) sequence for this code, or 0 if there simply is no information\n\n        :returns: offset int\n        \"\"\"\n        return self.debug_info_off\n\n    def get_insns_size(self) -> int:\n        \"\"\"\n        Get the size of the instructions list, in 16-bit code units\n\n        :returns: size int\n        \"\"\"\n        return self.insns_size\n\n    def get_handlers(self) -> EncodedCatchHandlerList:\n        \"\"\"\n        Get the bytes representing a list of lists of catch types and associated handler addresses.\n\n        :returns: `EncodedCatchHandlerList` object\n        \"\"\"\n        return self.handlers\n\n    def get_tries(self) -> list[TryItem]:\n        \"\"\"\n        Get the array indicating where in the code exceptions are caught and how to handle them\n\n        :returns: a list of `TryItem` objects\n        \"\"\"\n        return self.tries\n\n    def get_debug(self) -> DebugInfoItem:\n        \"\"\"\n        Return the associated debug object\n\n        :returns: `DebugInfoItem` object\n        \"\"\"\n        return self.CM.get_debug_off(self.debug_info_off)\n\n    def get_bc(self) -> DCode:\n        \"\"\"\n        Return the associated code object\n\n        :returns: `DCode` object\n        \"\"\"\n        return self.code\n\n    def seek(self, idx: int) -> None:\n        self.code.seek(idx)\n\n    def get_length(self) -> int:\n        return self.insns_size\n\n    def _begin_show(self) -> None:\n        logger.debug(\"registers_size: %d\" % self.registers_size)\n        logger.debug(\"ins_size: %d\" % self.ins_size)\n        logger.debug(\"outs_size: %d\" % self.outs_size)\n        logger.debug(\"tries_size: %d\" % self.tries_size)\n        logger.debug(\"debug_info_off: %d\" % self.debug_info_off)\n        logger.debug(\"insns_size: %d\" % self.insns_size)\n\n        bytecode._PrintBanner()\n\n    def show(self) -> None:\n        self._begin_show()\n        self.code.show()\n        self._end_show()\n\n    def _end_show(self) -> None:\n        bytecode._PrintBanner()\n\n    def get_obj(self) -> tuple[DCode, list[TryItem], EncodedCatchHandlerList]:\n        return [self.code, self.tries, self.handlers]\n\n    def get_raw(self) -> bytearray:\n        \"\"\"\n        Get the reconstructed code as bytearray\n\n        :returns: code bytearray\n        \"\"\"\n        code_raw = self.code.get_raw()\n        self.insns_size = (len(code_raw) // 2) + (len(code_raw) % 2)\n\n        buff = bytearray()\n        buff += (\n            self.CM.packer[\"4H2I\"].pack(\n                self.registers_size,\n                self.ins_size,\n                self.outs_size,\n                self.tries_size,\n                self.debug_info_off,\n                self.insns_size,\n            )\n            + code_raw\n        )\n\n        if self.tries_size > 0:\n            if self.insns_size % 2 == 1:\n                buff += self.CM.packer[\"H\"].pack(self.padding)\n\n            for i in self.tries:\n                buff += i.get_raw()\n            buff += self.handlers.get_raw()\n\n        return buff\n\n    def add_inote(self, msg: str, idx: int, off: int = None) -> None:\n        \"\"\"\n        Add a message to a specific instruction by using (default) the index of the address if specified\n\n        :param msg: the message\n        :param idx: index of the instruction (the position in the list of the instruction)\n        :param off: address of the instruction\n        \"\"\"\n        if self.code:\n            return self.code.add_inote(msg, idx, off)\n\n    def get_instruction(\n        self, idx: int, off: Union[int, None] = None\n    ) -> Instruction:\n        if self.code:\n            return self.code.get_instruction(idx, off)\n\n    def get_size(self) -> int:\n        return len(self.get_raw())\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n\nclass CodeItem:\n    def __init__(self, size: int, buff: bytes, cm: ClassManager) -> None:\n        self.CM = cm\n\n        self.offset = buff.tell()\n\n        self.code = []\n        self.__code_off = {}\n\n        for i in range(0, size):\n            # As we read the DalvikCode items from the map, there might be\n            # padding bytes in between.\n            # We know, that the alignment is 4 bytes.\n            off = buff.tell()\n            if off % 4 != 0:\n                buff.seek(off + (4 - (off % 4)))\n\n            x = DalvikCode(buff, cm)\n            self.code.append(x)\n            self.__code_off[x.get_off()] = x\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def get_code(self, off: int) -> DalvikCode:\n        try:\n            return self.__code_off[off]\n        except KeyError:\n            return None\n\n    def show(self) -> None:\n        # FIXME workaround for showing the MAP_ITEMS\n        # if m_a is none, we use get_raw.\n        # Otherwise the real code is printed...\n        bytecode._PrintDefault(\"CODE_ITEM\\n\")\n        bytecode._PrintDefault(\n            binascii.hexlify(self.get_raw()).decode(\"ASCII\")\n        )\n        bytecode._PrintDefault(\"\\n\")\n\n    def get_obj(self) -> list[DalvikCode]:\n        return [i for i in self.code]\n\n    def get_raw(self) -> bytearray:\n        buff = bytearray()\n        for c in self.code:\n            buff += c.get_raw()\n        return buff\n\n    def get_length(self) -> int:\n        length = 0\n        for i in self.code:\n            length += i.get_size()\n        return length\n\n\nclass MapItem:\n    def __init__(self, buff: bytes, cm: ClassManager) -> None:\n        \"\"\"\n        Implementation of a map_item, which occours in a map_list\n\n        https://source.android.com/devices/tech/dalvik/dex-format#map-item\n        \"\"\"\n        self.CM = cm\n        self.buff = buff\n\n        self.off = buff.tell()\n\n        self.type = TypeMapItem(cm.packer[\"H\"].unpack(buff.read(2))[0])\n        self.unused, self.size, self.offset = cm.packer[\"H2I\"].unpack(\n            buff.read(10)\n        )\n\n        self.item = None\n\n    def get_off(self) -> int:\n        \"\"\"Gets the offset of the map item itself inside the DEX file\"\"\"\n        return self.off\n\n    def get_offset(self) -> int:\n        \"\"\"Gets the offset of the item of the map item\"\"\"\n        return self.offset\n\n    def get_type(self) -> TypeMapItem:\n        return self.type\n\n    def get_size(self) -> int:\n        \"\"\"\n        Returns the number of items found at the location indicated by\n        [get_offset][androguard.core.dex.MapItem.get_offset].\n\n        :returns: number of items\n        \"\"\"\n        return self.size\n\n    def parse(self) -> None:\n        \"\"\"parse this map_item by parsing its potential [TypeMapItem][androguard.core.dex.dex_types.TypeMapItem] type and cast it appropriately.\"\"\"\n        logger.debug(\"Starting parsing map_item '{}'\".format(self.type.name))\n        started_at = time.time()\n\n        # Not all items are aligned in the same way. Most are aligned by four bytes,\n        # but there are a few which are not!\n        # Hence, we need to check the alignment for each item.\n\n        buff = self.buff\n        cm = self.CM\n\n        if TypeMapItem.STRING_ID_ITEM == self.type:\n            # Byte aligned\n            buff.seek(self.offset)\n            self.item = [StringIdItem(buff, cm) for _ in range(self.size)]\n\n        elif TypeMapItem.CODE_ITEM == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = CodeItem(self.size, buff, cm)\n\n        elif TypeMapItem.TYPE_ID_ITEM == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = TypeHIdItem(self.size, buff, cm)\n\n        elif TypeMapItem.PROTO_ID_ITEM == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = ProtoHIdItem(self.size, buff, cm)\n\n        elif TypeMapItem.FIELD_ID_ITEM == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = FieldHIdItem(self.size, buff, cm)\n\n        elif TypeMapItem.METHOD_ID_ITEM == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = MethodHIdItem(self.size, buff, cm)\n\n        elif TypeMapItem.CLASS_DEF_ITEM == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = ClassHDefItem(self.size, buff, cm)\n\n        elif TypeMapItem.HEADER_ITEM == self.type:\n            # FIXME probably not necessary to parse again here...\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = HeaderItem(self.size, buff, cm)\n\n        elif TypeMapItem.ANNOTATION_ITEM == self.type:\n            # Byte aligned\n            buff.seek(self.offset)\n            self.item = [AnnotationItem(buff, cm) for _ in range(self.size)]\n\n        elif TypeMapItem.ANNOTATION_SET_ITEM == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = [AnnotationSetItem(buff, cm) for _ in range(self.size)]\n\n        elif TypeMapItem.ANNOTATIONS_DIRECTORY_ITEM == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = [\n                AnnotationsDirectoryItem(buff, cm) for _ in range(self.size)\n            ]\n\n        elif TypeMapItem.HIDDENAPI_CLASS_DATA_ITEM == self.type:\n            # Byte aligned\n            buff.seek(self.offset)\n            self.item = HiddenApiClassDataItem(buff, cm)\n\n        elif TypeMapItem.ANNOTATION_SET_REF_LIST == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = [\n                AnnotationSetRefList(buff, cm) for _ in range(self.size)\n            ]\n\n        elif TypeMapItem.TYPE_LIST == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            self.item = [TypeList(buff, cm) for _ in range(self.size)]\n\n        elif TypeMapItem.STRING_DATA_ITEM == self.type:\n            # Byte aligned\n            buff.seek(self.offset)\n            self.item = [StringDataItem(buff, cm) for _ in range(self.size)]\n\n        elif TypeMapItem.DEBUG_INFO_ITEM == self.type:\n            # Byte aligned\n            buff.seek(self.offset)\n            self.item = DebugInfoItemEmpty(buff, cm)\n\n        elif TypeMapItem.ENCODED_ARRAY_ITEM == self.type:\n            # Byte aligned\n            buff.seek(self.offset)\n            self.item = [EncodedArrayItem(buff, cm) for _ in range(self.size)]\n\n        elif TypeMapItem.CLASS_DATA_ITEM == self.type:\n            # Byte aligned\n            buff.seek(self.offset)\n            self.item = [ClassDataItem(buff, cm) for _ in range(self.size)]\n\n        elif TypeMapItem.MAP_LIST == self.type:\n            # 4-byte aligned\n            buff.seek(self.offset + (self.offset % 4))\n            pass  # It's me I think !!! No need to parse again\n\n        else:\n            logger.warning(\n                \"Map item with id '{type}' offset: 0x{off:x} ({off}) \"\n                \"size: {size} is unknown. \"\n                \"Is this a newer DEX format?\".format(\n                    type=self.type, off=buff.tell(), size=self.size\n                )\n            )\n\n        diff = time.time() - started_at\n        minutes, seconds = diff // 60, diff % 60\n        logger.debug(\n            \"End of parsing map_item '{}'. Required time {:.0f}:{:07.4f}\".format(\n                self.type.name, minutes, seconds\n            )\n        )\n\n    def show(self) -> None:\n        bytecode._Print(\"\\tMAP_TYPE_ITEM\", self.type.name)\n\n        if self.item is not None:\n            if isinstance(self.item, list):\n                for i in self.item:\n                    i.show()\n            else:\n                self.item.show()\n\n    def get_obj(self) -> object:\n        \"\"\"\n        Return the associated item itself.\n        Might return `None`, if [parse][androguard.core.dex.MapItem.parse] was not called yet.\n\n        This method is the same as `item`.\n\n        :returns: item object\n        \"\"\"\n        return self.item\n\n    # alias\n    get_item = get_obj\n\n    def get_raw(self) -> bytes:\n        # FIXME why is it necessary to get the offset here agin? We have this\n        # stored?!\n        if isinstance(self.item, list):\n            self.offset = self.item[0].get_off()\n        else:\n            self.offset = self.item.get_off()\n\n        return self.CM.packer[\"2H2I\"].pack(\n            self.type, self.unused, self.size, self.offset\n        )\n\n    def get_length(self) -> int:\n        return calcsize(\"HHII\")\n\n    def set_item(self, item: object) -> None:\n        self.item = item\n\n\nclass ClassManager:\n    \"\"\"\n    This class is used to access to all elements (strings, type, proto ...) of the dex format\n    based on their offset or index.\n    \"\"\"\n\n    def __init__(self, vm: DEX) -> None:\n        \"\"\"\n        :param DEX vm: the VM to create a `ClassManager` for\n        \"\"\"\n        self.vm = vm\n        self.buff = vm\n\n        self.analysis_dex = None\n        self.decompiler_ob = None\n\n        self.__packer = None\n\n        self.__manage_item = {}\n        self.__manage_item_off = []\n\n        self.__strings_off = {}\n        self.__typelists_off = {}\n        self.__classdata_off = {}\n\n        self.__obj_offset = {}\n        self.__item_offset = {}\n\n        self.__cached_proto = {}\n\n        self.hook_strings = {}\n\n        if self.vm:\n            self.odex_format = self.vm.get_format_type() == \"ODEX\"\n        else:\n            self.odex_format = False\n\n    @property\n    def packer(self):\n        return self.__packer\n\n    @packer.setter\n    def packer(self, p):\n        self.__packer = p\n\n    def get_ascii_string(self, s: str) -> str:\n        # TODO Remove method\n        try:\n            return s.decode(\"ascii\")\n        except UnicodeDecodeError:\n            d = \"\"\n            for i in s:\n                if i < 128:\n                    d += i\n                else:\n                    d += \"%x\" % i\n            return d\n\n    def get_odex_format(self) -> bool:\n        \"\"\"Returns `True` if the underlying VM is ODEX\n\n        :returns: `True` if vm is ODEX, `False` if not\n        \"\"\"\n        return self.odex_format\n\n    def get_obj_by_offset(self, offset: int) -> object:\n        \"\"\"\n        Returns a object from as given offset inside the DEX file\n        \"\"\"\n        return self.__obj_offset[offset]\n\n    def get_item_by_offset(self, offset: int) -> object:\n        return self.__item_offset[offset]\n\n    def get_string_by_offset(self, offset: int) -> object:\n        return self.__strings_off[offset]\n\n    def set_decompiler(self, decompiler: DecompilerDAD) -> None:\n        self.decompiler_ob = decompiler\n\n    def set_analysis(self, analysis_dex: Analysis) -> None:\n        self.analysis_dex = analysis_dex\n\n    def get_analysis(self) -> Analysis:\n        return self.analysis_dex\n\n    def add_type_item(\n        self, type_item: TypeMapItem, c_item: MapItem, item: object\n    ) -> None:\n        self.__manage_item[type_item] = item\n\n        self.__obj_offset[c_item.get_off()] = c_item\n        self.__item_offset[c_item.get_offset()] = item\n\n        if item is None:\n            pass\n        elif isinstance(item, list):\n            for i in item:\n                goff = i.offset\n                self.__manage_item_off.append(goff)\n\n                self.__obj_offset[i.get_off()] = i\n\n                if type_item == TypeMapItem.STRING_DATA_ITEM:\n                    self.__strings_off[goff] = i\n                elif type_item == TypeMapItem.TYPE_LIST:\n                    self.__typelists_off[goff] = i\n                elif type_item == TypeMapItem.CLASS_DATA_ITEM:\n                    self.__classdata_off[goff] = i\n        else:\n            self.__manage_item_off.append(c_item.get_offset())\n\n    def get_code(self, idx: int) -> Union[DalvikCode, None]:\n        try:\n            return self.__manage_item[TypeMapItem.CODE_ITEM].get_code(idx)\n        except KeyError:\n            return None\n\n    def get_class_data_item(self, off: int) -> ClassDataItem:\n        i = self.__classdata_off.get(off)\n        if i is None:\n            logger.warning(\"unknown class data item @ 0x%x\" % off)\n        return i\n\n    def get_encoded_array_item(self, off: int) -> EncodedArrayItem:\n        for i in self.__manage_item[TypeMapItem.ENCODED_ARRAY_ITEM]:\n            if i.get_off() == off:\n                return i\n\n    def get_annotations_directory_item(\n        self, off: int\n    ) -> AnnotationsDirectoryItem:\n        for i in self.__manage_item[TypeMapItem.ANNOTATIONS_DIRECTORY_ITEM]:\n            if i.get_off() == off:\n                return i\n\n    def get_annotation_set_item(self, off: int) -> AnnotationSetItem:\n        for i in self.__manage_item[TypeMapItem.ANNOTATION_SET_ITEM]:\n            if i.get_off() == off:\n                return i\n\n    def get_annotation_off_item(self, off: int) -> AnnotationOffItem:\n        for i in self.__manage_item[TypeMapItem.ANNOTATION_OFF_ITEM]:\n            if i.get_off() == off:\n                return i\n\n    def get_annotation_item(self, off: int) -> AnnotationItem:\n        for i in self.__manage_item[TypeMapItem.ANNOTATION_ITEM]:\n            if i.get_off() == off:\n                return i\n\n    def get_hiddenapi_class_data_item(\n        self, off: int\n    ) -> HiddenApiClassDataItem:\n        for i in self.__manage_item[TypeMapItem.HIDDENAPI_CLASS_DATA_ITEM]:\n            if i.get_off() == off:\n                return i\n\n    def get_string(self, idx: int) -> str:\n        \"\"\"\n        Return a string from the string table at index `idx`\n\n        If string is hooked, the hooked string is returned.\n\n        :param idx: index in the string section\n\n        :returns: string entry\n        \"\"\"\n        if idx in self.hook_strings:\n            return self.hook_strings[idx]\n\n        return self.get_raw_string(idx)\n\n    def get_raw_string(self, idx: int) -> str:\n        \"\"\"\n        Return the (unprocessed) string from the string table at index `idx`.\n\n        :param idx: the index in the string section\n        \"\"\"\n        try:\n            off = self.__manage_item[TypeMapItem.STRING_ID_ITEM][\n                idx\n            ].get_string_data_off()\n        except IndexError:\n            logger.warning(\"unknown string item @ %d\" % idx)\n            return \"AG:IS: invalid string\"\n\n        try:\n            return self.__strings_off[off].get()\n        except KeyError:\n            logger.warning(\"unknown string item @ 0x%x(%d)\" % (off, idx))\n            return \"AG:IS: invalid string\"\n\n    def get_type_list(self, off: int) -> list[str]:\n        if off == 0:\n            return []\n\n        i = self.__typelists_off[off]\n        return [type_.get_string() for type_ in i.get_list()]\n\n    def get_type(self, idx: int) -> str:\n        \"\"\"\n        Return the resolved type name based on the index\n\n        This returns the string associated with the type.\n\n        :param int idx:\n        :returns: the type name\n        \"\"\"\n        _type = self.get_type_ref(idx)\n        if _type == -1:\n            return \"AG:ITI: invalid type\"\n        return self.get_string(_type)\n\n    def get_type_ref(self, idx: int) -> TypeIdItem:\n        \"\"\"\n        Returns the string reference ID for a given type ID.\n\n        This method is similar to [get_type][androguard.core.dex.ClassManager.get_type] but does not resolve\n        the string but returns the ID into the string section.\n\n        If the type IDX is not found, -1 is returned.\n        \"\"\"\n        return self.__manage_item[TypeMapItem.TYPE_ID_ITEM].get(idx)\n\n    def get_proto(self, idx: int) -> list:\n        proto = self.__cached_proto.get(idx)\n        if not proto:\n            proto = self.__manage_item[TypeMapItem.PROTO_ID_ITEM].get(idx)\n            self.__cached_proto[idx] = proto\n\n        return [\n            proto.get_parameters_off_value(),\n            proto.get_return_type_idx_value(),\n        ]\n\n    def get_field(self, idx: int) -> list[str]:\n        field = self.get_field_ref(idx)\n        # return [field.get_class_name(), field.get_type(), field.get_name()]\n        return field.get_list()\n\n    def get_field_ref(self, idx: int) -> FieldIdItem:\n        return self.__manage_item[TypeMapItem.FIELD_ID_ITEM].get(idx)\n\n    def get_method(self, idx: int) -> list[str]:\n        return self.get_method_ref(idx).get_list()\n\n    def get_method_ref(self, idx: int) -> MethodIdItem:\n        return self.__manage_item[TypeMapItem.METHOD_ID_ITEM].get(idx)\n\n    def set_hook_class_name(self, class_def: ClassDefItem, value: str) -> None:\n        python_export = True\n        _type = self.__manage_item[TypeMapItem.TYPE_ID_ITEM].get(\n            class_def.get_class_idx()\n        )\n        self.set_hook_string(_type, value)\n\n        try:\n            self.vm._delete_python_export_class(class_def)\n        except AttributeError:\n            python_export = False\n\n        class_def.reload()\n\n        # FIXME\n        self.__manage_item[TypeMapItem.METHOD_ID_ITEM].reload()\n\n        for i in class_def.get_methods():\n            i.reload()\n\n        for i in class_def.get_fields():\n            i.reload()\n\n        if python_export:\n            self.vm._create_python_export_class(class_def)\n\n    def set_hook_method_name(\n        self, encoded_method: EncodedMethod, value: str\n    ) -> None:\n        python_export = True\n\n        method = self.__manage_item[TypeMapItem.METHOD_ID_ITEM].get(\n            encoded_method.get_method_idx()\n        )\n        self.set_hook_string(method.get_name_idx(), value)\n\n        class_def = self.__manage_item[\n            TypeMapItem.CLASS_DEF_ITEM\n        ].get_class_idx(method.get_class_idx())\n        if class_def is not None:\n            try:\n                name = bytecode.FormatNameToPython(encoded_method.get_name())\n            except AttributeError:\n                name += \"_\" + bytecode.FormatDescriptorToPython(\n                    encoded_method.get_descriptor()\n                )\n\n            logger.debug(\"try deleting old name in python...\")\n            try:\n                delattr(class_def.M, name)\n                logger.debug(\"success with regular name\")\n            except AttributeError:\n                logger.debug(\"WARNING: fail with regular name\")\n                # python_export = False\n\n                try:\n                    name = bytecode.FormatNameToPython(\n                        encoded_method.get_name()\n                        + '_'\n                        + encoded_method.proto.replace(' ', '')\n                        .replace('(', '')\n                        .replace('[', '')\n                        .replace(')', '')\n                        .replace('/', '_')\n                        .replace(';', '')\n                    )\n                except AttributeError:\n                    name += \"_\" + bytecode.FormatDescriptorToPython(\n                        encoded_method.get_descriptor()\n                    )\n\n                try:\n                    delattr(class_def.M, name)\n                    logger.debug(\"success with name containing prototype\")\n                except AttributeError:\n                    logger.debug(\n                        \"WARNING: fail with name containing prototype\"\n                    )\n                    python_export = False\n\n            if python_export:\n                name = bytecode.FormatNameToPython(value)\n                setattr(class_def.M, name, encoded_method)\n                logger.debug(\"new name in python: created: %s.\" % name)\n            else:\n                logger.debug(\"skipping creating new name in python\")\n\n        method.reload()\n\n    def set_hook_field_name(\n        self, encoded_field: EncodedField, value: str\n    ) -> None:\n        python_export = True\n\n        field = self.__manage_item[TypeMapItem.FIELD_ID_ITEM].get(\n            encoded_field.get_field_idx()\n        )\n        self.set_hook_string(field.get_name_idx(), value)\n\n        class_def = self.__manage_item[\n            TypeMapItem.CLASS_DEF_ITEM\n        ].get_class_idx(field.get_class_idx())\n        if class_def is not None:\n            try:\n                name = bytecode.FormatNameToPython(encoded_field.get_name())\n            except AttributeError:\n                name += \"_\" + bytecode.FormatDescriptorToPython(\n                    encoded_field.get_descriptor()\n                )\n\n            try:\n                delattr(class_def.F, name)\n            except AttributeError:\n                python_export = False\n\n            if python_export:\n                name = bytecode.FormatNameToPython(value)\n                setattr(class_def.F, name, encoded_field)\n\n        field.reload()\n\n    def set_hook_string(self, idx: int, value: str) -> None:\n        self.hook_strings[idx] = value\n\n    def get_next_offset_item(self, idx: int) -> int:\n        for i in self.__manage_item_off:\n            if i > idx:\n                return i\n        return idx\n\n    def get_debug_off(self, off: int) -> DebugInfoItem:\n        self.buff.seek(off)\n        return DebugInfoItem(self.buff, self)\n\n\nclass MapList:\n    \"\"\"\n    This class can parse the \"map_list\" of the dex format\n\n    https://source.android.com/devices/tech/dalvik/dex-format#map-list\n    \"\"\"\n\n    def __init__(self, cm: ClassManager, off: int, buff: BinaryIO) -> None:\n        self.CM = cm\n\n        buff.seek(off)\n\n        self.offset = off\n\n        (self.size,) = cm.packer[\"I\"].unpack(buff.read(4))\n\n        self.map_item = []\n        for _ in range(0, self.size):\n            idx = buff.tell()\n\n            mi = MapItem(buff, self.CM)\n            self.map_item.append(mi)\n\n            buff.seek(idx + mi.get_length())\n\n        load_order = TypeMapItem.determine_load_order()\n        ordered = sorted(\n            self.map_item, key=lambda mi: load_order[mi.get_type()]\n        )\n\n        for mi in ordered:\n            mi.parse()\n\n            c_item = mi.get_item()\n            if c_item is None:\n                mi.set_item(self)\n                c_item = mi.get_item()\n\n            self.CM.add_type_item(mi.get_type(), mi, c_item)\n\n    def get_off(self) -> int:\n        return self.offset\n\n    def set_off(self, off: int) -> None:\n        self.offset = off\n\n    def get_item_type(self, ttype: TypeMapItem) -> object:\n        \"\"\"\n        Get a particular item type\n\n        :param ttype: a `TypeMapItem` enum which represents the desired type\n\n        :returns: `None` or the item object\n        \"\"\"\n        for i in self.map_item:\n            if i.get_type() == ttype:\n                return i.get_item()\n        return None\n\n    def show(self) -> None:\n        \"\"\"\n        Print with a pretty display the MapList object\n        \"\"\"\n        bytecode._Print(\"MAP_LIST SIZE\", self.size)\n        for i in self.map_item:\n            if i.item != self:\n                # FIXME this does not work for CodeItems!\n                # as we do not have the method analysis here...\n                i.show()\n\n    def get_obj(self) -> list[object]:\n        return [x.get_obj() for x in self.map_item]\n\n    def get_raw(self) -> bytes:\n        return self.CM.packer[\"I\"].pack(self.size) + b''.join(\n            x.get_raw() for x in self.map_item\n        )\n\n    def get_class_manager(self) -> ClassManager:\n        return self.CM\n\n    def get_length(self) -> int:\n        return len(self.get_raw())\n\n\nclass DalvikPacker:\n    \"\"\"\n    Generic Packer class to unpack bytes based on different endianness\n    \"\"\"\n\n    def __init__(self, endian_tag: int) -> None:\n        if endian_tag == 0x78563412:\n            logger.error(\n                \"DEX file with byte swapped endian tag is not supported!\"\n            )\n            raise NotImplementedError(\"Byte swapped endian tag encountered!\")\n        elif endian_tag == 0x12345678:\n            self.endian_tag = '<'\n        else:\n            raise ValueError(\n                \"This is not a DEX file! Wrong endian tag: '0x{:08x}'\".format(\n                    endian_tag\n                )\n            )\n        self.__structs = {}\n\n    def __getitem__(self, item):\n        try:\n            return self.__structs[item]\n        except KeyError:\n            self.__structs[item] = struct.Struct(self.endian_tag + item)\n        return self.__structs[item]\n\n    def __getstate__(self):\n        return self.endian_tag\n\n    def __setstate__(self, state):\n        self.endian_tag = state\n        self.__structs = {}\n\n\nclass DEX:\n    \"\"\"\n    This class can parse a classes.dex file of an Android application (APK).\n\n    :param buff: a string which represents the classes.dex file\n    :param decompiler: associate a decompiler object to display the java source code\n\n    Example:\n\n        >>> d = DEX( read(\"classes.dex\") )\n    \"\"\"\n\n    def __init__(\n        self,\n        buff,\n        decompiler: Union[DecompilerDAD, None] = None,\n        config=None,\n        using_api: Union[int, None] = None,\n    ) -> None:\n        logger.debug(\"DEX {} {} {}\".format(decompiler, config, using_api))\n\n        # to allow to pass apk object ==> we do not need to pass additionally target version\n        if isinstance(buff, apk.APK):\n            self.api_version = buff.get_target_sdk_version()\n            buff = buff.get_dex()  # getting dex from APK file\n        elif using_api:\n            self.api_version = using_api\n        else:\n            self.api_version = CONF[\"DEFAULT_API\"]\n\n        self.raw = io.BufferedReader(io.BytesIO(buff))\n\n        self._flush()\n\n        self.CM = ClassManager(self)\n        self.CM.set_decompiler(decompiler)\n\n        self._preload(buff)\n        self._load(buff)\n\n    def _preload(self, buff):\n        pass\n\n    def _load(self, buff) -> None:\n        self.header = HeaderItem(0, self.raw, self.CM)\n\n        if self.header.map_off == 0:\n            # TODO check if the header specifies items but does not have a map\n            logger.warning(\"no map list! This DEX file is probably empty.\")\n        else:\n            self.map_list = MapList(self.CM, self.header.map_off, self.raw)\n\n            self.classes = self.map_list.get_item_type(\n                TypeMapItem.CLASS_DEF_ITEM\n            )\n            self.methods = self.map_list.get_item_type(\n                TypeMapItem.METHOD_ID_ITEM\n            )\n            self.fields = self.map_list.get_item_type(\n                TypeMapItem.FIELD_ID_ITEM\n            )\n            self.codes = self.map_list.get_item_type(TypeMapItem.CODE_ITEM)\n            self.strings = self.map_list.get_item_type(\n                TypeMapItem.STRING_DATA_ITEM\n            )\n            self.debug = self.map_list.get_item_type(\n                TypeMapItem.DEBUG_INFO_ITEM\n            )\n            self.hidden_api = self.map_list.get_item_type(\n                TypeMapItem.HIDDENAPI_CLASS_DATA_ITEM\n            )\n\n        self._flush()\n\n    def _flush(self) -> None:\n        \"\"\"\n        Flush all caches\n        Might be used after classes, methods or fields are added.\n        \"\"\"\n        self.classes_names = None\n        self.__cache_methods = None\n        self.__cached_methods_idx = None\n        self.__cache_fields = None\n\n        # cache methods and fields as well, otherwise the decompiler is quite slow\n        self.__cache_all_methods = None\n        self.__cache_all_fields = None\n\n    @property\n    def version(self) -> int:\n        \"\"\"\n        Returns the version number of the DEX Format\n        \"\"\"\n        return self.header.dex_version\n\n    def get_api_version(self) -> int:\n        \"\"\"\n        This method returns api version that should be used for loading api\n        specific resources.\n\n        :returns: api version string\n        \"\"\"\n        return self.api_version\n\n    def get_classes_def_item(self) -> ClassHDefItem:\n        \"\"\"\n        This function returns the class def item\n\n        :returns: `ClassHDefItem` object\n        \"\"\"\n        return self.classes\n\n    def get_methods_id_item(self) -> MethodHIdItem:\n        \"\"\"\n        This function returns the method id item\n\n        :returns: `MethodHIdItem` object\n        \"\"\"\n        return self.methods\n\n    def get_fields_id_item(self) -> FieldHIdItem:\n        \"\"\"\n        This function returns the field id item\n\n        :returns: `FieldHIdItem` object\n        \"\"\"\n        return self.fields\n\n    def get_codes_item(self) -> CodeItem:\n        \"\"\"\n        This function returns the code item\n\n        :returns: `CodeItem` object\n        \"\"\"\n        return self.codes\n\n    def get_string_data_item(self) -> StringDataItem:\n        \"\"\"\n        This function returns the string data item\n\n        :returns: `StringDataItem` object\n        \"\"\"\n        return self.strings\n\n    # TODO: this returns DebugInfoItemEmpty, as DebugInfoItem never gets set as a MapItem\n    def get_debug_info_item(self) -> DebugInfoItemEmpty:\n        \"\"\"\n        This function returns the debug info item\n        :returns: `DebugInfoItemEmpty` object\n        \"\"\"\n        return self.debug\n\n    def get_header_item(self) -> HeaderItem:\n        \"\"\"\n        This function returns the header item\n\n        :returns: `HeaderItem` object\n        \"\"\"\n        return self.header\n\n    def get_hidden_api(self) -> HiddenApiClassDataItem:\n        \"\"\"\n        This function returns the hidden api item (from Android 10)\n\n        :returns: `HiddenApiClassDataItem` object\n        \"\"\"\n        return self.hidden_api\n\n    def get_class_manager(self) -> ClassManager:\n        \"\"\"\n        This function returns a ClassManager object which allow you to get\n        access to all index references (strings, methods, fields, ....)\n\n        :returns: `ClassManager` object\n        \"\"\"\n        return self.CM\n\n    def show(self) -> None:\n        \"\"\"\n        Show the all information in the object\n        \"\"\"\n        self.map_list.show()\n\n    def save(self) -> bytes:\n        \"\"\"\n        Return the dex (with the modifications) into raw format (fix checksums)\n        (beta: do not use !)\n\n        :returns: bytes\n        \"\"\"\n        l = []\n        h = {}\n        s = {}\n        h_r = {}\n\n        idx = 0\n        for i in self.map_list.get_obj():\n            length = 0\n\n            if isinstance(i, list):\n                for j in i:\n                    if isinstance(j, AnnotationsDirectoryItem):\n                        if idx % 4 != 0:\n                            idx = idx + (4 - (idx % 4))\n\n                    l.append(j)\n\n                    c_length = j.get_length()\n                    if isinstance(j, StringDataItem):\n                        c_length += 1\n                    h[j] = idx + length\n                    h_r[idx + length] = j\n                    s[idx + length] = c_length\n\n                    length += c_length\n                    # logger.debug(\"SAVE\" + str(j) + \" @ 0x%x\" % (idx+length))\n\n                logger.debug(\n                    \"SAVE \" + str(i[0]) + \" @0x{:x} ({:x})\".format(idx, length)\n                )\n\n            else:\n                if isinstance(i, MapList):\n                    if idx % 4 != 0:\n                        idx = idx + (4 - (idx % 4))\n\n                l.append(i)\n                h[i] = idx\n                h_r[idx] = i\n\n                length = i.get_length()\n\n                s[idx] = length\n\n                logger.debug(\n                    \"SAVE \" + str(i) + \" @0x{:x} ({:x})\".format(idx, length)\n                )\n\n            idx += length\n\n        self.header.file_size = idx\n\n        for i in l:\n            idx = h[i]\n            i.set_off(idx)\n            if isinstance(i, CodeItem):\n                last_idx = idx\n                for j in i.get_obj():\n                    j.set_off(last_idx)\n                    # j.set_debug_info_off(0)\n                    last_idx += j.get_size()\n\n        last_idx = 0\n        buff = bytearray()\n        for i in l:\n            idx = h[i]\n\n            if idx != last_idx:\n                logger.debug(\n                    \"Adjust alignment @{:x} with 00 {:x}\".format(\n                        idx, idx - last_idx\n                    )\n                )\n                buff += bytearray([0] * (idx - last_idx))\n\n            buff += i.get_raw()\n            if isinstance(i, StringDataItem):\n                buff += b\"\\x00\"\n            last_idx = idx + s[idx]\n\n        logger.debug(\"GLOBAL SIZE %d\" % len(buff))\n\n        return self.fix_checksums(buff)\n\n    def fix_checksums(self, buff: bytes) -> bytes:\n        \"\"\"\n        Fix a dex format buffer by setting all checksums\n\n        :returns: bytes\n        \"\"\"\n\n        signature = hashlib.sha1(buff[32:]).digest()\n\n        buff = buff[:12] + signature + buff[32:]\n        checksum = zlib.adler32(buff[12:])\n        buff = buff[:8] + self.CM.packer[\"I\"].pack(checksum) + buff[12:]\n\n        logger.debug(\"NEW SIGNATURE %s\" % repr(signature))\n        logger.debug(\"NEW CHECKSUM %x\" % checksum)\n\n        return buff\n\n    def get_cm_field(self, idx: int) -> list[str]:\n        \"\"\"\n        Get a specific field by using an index\n\n        :param idx: index of the field\n        \"\"\"\n        return self.CM.get_field(idx)\n\n    def get_cm_method(self, idx: int) -> list[str]:\n        \"\"\"\n        Get a specific method by using an index\n\n        :param idx: index of the method\n        \"\"\"\n        return self.CM.get_method(idx)\n\n    def get_cm_string(self, idx: int) -> str:\n        \"\"\"\n        Get a specific string by using an index\n\n        :param idx: index of the string\n\n        :returns: the string\n        \"\"\"\n        return self.CM.get_raw_string(idx)\n\n    def get_cm_type(self, idx: int) -> str:\n        \"\"\"\n        Get a specific type by using an index\n\n        :param idx: index of the type\n\n        :returns: the string type\n        \"\"\"\n        return self.CM.get_type(idx)\n\n    def get_classes_names(self, update: bool = False) -> list[str]:\n        \"\"\"\n        Return the names of classes\n\n        :param update: `True` indicates to recompute the list. Maybe needed after using a MyClass.set_name().\n        :returns: a list of string names\n        \"\"\"\n        if self.classes_names is None or update:\n            self.classes_names = [i.get_name() for i in self.get_classes()]\n        return self.classes_names\n\n    def get_classes(self) -> list[ClassDefItem]:\n        \"\"\"\n        Return all classes\n\n        :returns: a list of `ClassDefItem` objects\n        \"\"\"\n        if self.classes:\n            return self.classes.class_def\n        else:\n            # There is a rare case that the DEX has no classes\n            return []\n\n    def get_len_classes(self) -> int:\n        \"\"\"\n        Return the number of classes\n\n        :returns: int\n        \"\"\"\n        return len(self.get_classes())\n\n    def get_class(self, name: str) -> Union[ClassDefItem, None]:\n        \"\"\"\n        Return a specific class\n\n        :param name: the name of the class\n\n        :returns: a `ClassDefItem`\n        \"\"\"\n        for i in self.get_classes():\n            if i.get_name() == name:\n                return i\n        return None\n\n    def get_field(self, name: str) -> list[FieldIdItem]:\n        \"\"\"get field id item by name\n\n        :param name: the name of the field (a python string regexp)\n        :returns: the list of matching `FieldIdItem` objects\n        \"\"\"\n\n        prog = re.compile(name)\n        l = []\n        for i in self.get_fields():\n            if prog.match(i.name):\n                l.append(i)\n        return l\n\n    def get_fields(self) -> list[FieldIdItem]:\n        \"\"\"\n        Return a list of field items\n\n        :returns: a list of `FieldIdItem` objects\n        \"\"\"\n        try:\n            return self.fields.gets()\n        except AttributeError:\n            return []\n\n    def get_len_fields(self) -> int:\n        \"\"\"\n        Return the number of fields\n\n        :returns: int\n        \"\"\"\n        return len(self.get_fields())\n\n    def get_encoded_field(self, name: str) -> list[EncodedField]:\n        \"\"\"\n        Return a list all fields which corresponds to the regexp\n\n        :param name: the name of the field (a python string regexp)\n\n        :returns: a list with all `EncodedField` objects\n        \"\"\"\n        # TODO could use a generator here\n        prog = re.compile(name)\n        l = []\n        for i in self.get_encoded_fields():\n            if prog.match(i.get_name()):\n                l.append(i)\n        return l\n\n    def get_encoded_fields(self) -> list[EncodedField]:\n        \"\"\"\n        Return all field objects\n\n        :returns: a list of `EncodedField` objects\n        \"\"\"\n        if self.__cache_all_fields is None:\n            self.__cache_all_fields = []\n            for i in self.get_classes():\n                for j in i.get_fields():\n                    self.__cache_all_fields.append(j)\n        return self.__cache_all_fields\n\n    def get_len_encoded_fields(self) -> int:\n        return len(self.get_encoded_fields())\n\n    def get_field(self, name: str) -> list[FieldIdItem]:\n        \"\"\"get field id item by name\n\n        :param name: the name of the field (a python string regexp)\n        :returns: the list of matching `FieldIdItem` objects\n        \"\"\"\n        prog = re.compile(name)\n        l = []\n        for i in self.get_fields():\n            if prog.match(i.name):\n                l.append(i)\n        return l\n\n    def get_method(self, name: str) -> list[MethodIdItem]:\n        \"\"\"get method id item by name\n\n        :param name: the name of the field (a python string regexp)\n        :returns: the list of matching `MethodIdItem` objects\n        \"\"\"\n        prog = re.compile(name)\n        l = []\n        for i in self.get_methods():\n            if prog.match(i.name):\n                l.append(i)\n        return l\n\n    def get_methods(self) -> list[MethodIdItem]:\n        \"\"\"\n        Return a list of method items\n\n        :returns: a list of `MethodIdItem` objects\n        \"\"\"\n        try:\n            return self.methods.gets()\n        except AttributeError:\n            return []\n\n    def get_len_methods(self) -> int:\n        \"\"\"\n        Return the number of methods\n\n        :returns: int\n        \"\"\"\n        return len(self.get_methods())\n\n    def get_encoded_method(self, name: str) -> list[EncodedMethod]:\n        \"\"\"\n        Return a list all encoded methods whose name corresponds to the regexp\n\n        :param name: the name of the method (a python string regexp)\n\n        :returns: a list with all `EncodedMethod` objects\n        \"\"\"\n        prog = re.compile(name)\n        l = []\n        for i in self.get_encoded_methods():\n            if prog.match(i.name):\n                l.append(i)\n        return l\n\n    def get_encoded_methods(self) -> list[EncodedMethod]:\n        \"\"\"\n        Return all encoded method objects\n\n        :returns: a list of `EncodedMethod` objects\n        \"\"\"\n        if self.__cache_all_methods is None:\n            self.__cache_all_methods = []\n            for i in self.get_classes():\n                for j in i.get_methods():\n                    self.__cache_all_methods.append(j)\n        return self.__cache_all_methods\n\n    def get_len_encoded_methods(self) -> int:\n        \"\"\"\n        Return the number of encoded methods\n\n        :returns: int\n        \"\"\"\n        return len(self.get_encoded_methods())\n\n    def get_encoded_method_by_idx(\n        self, idx: int\n    ) -> Union[EncodedMethod, None]:\n        \"\"\"\n        Return a specific encoded method by using an index\n        :param idx: the index of the method\n\n        :returns: `None` or an `EncodedMethod` object\n        \"\"\"\n        if self.__cached_methods_idx is None:\n            self.__cached_methods_idx = {}\n            for i in self.get_classes():\n                for j in i.get_methods():\n                    self.__cached_methods_idx[j.get_method_idx()] = j\n\n        try:\n            return self.__cached_methods_idx[idx]\n        except KeyError:\n            return None\n\n    def get_encoded_method_descriptor(\n        self, class_name: str, method_name: str, descriptor: str\n    ) -> Union[EncodedMethod, None]:\n        \"\"\"\n        Return the specific encoded method given a class name, method name, and descriptor\n\n        :param class_name: the class name of the method\n        :param method_name: the name of the method\n        :param descriptor: the descriptor of the method\n\n        :returns: `None` or a `EncodedMethod` object\n        \"\"\"\n        key = class_name + method_name + descriptor\n\n        if self.__cache_methods is None:\n            self.__cache_methods = {}\n            for i in self.get_classes():\n                for j in i.get_methods():\n                    self.__cache_methods[\n                        j.get_class_name() + j.get_name() + j.get_descriptor()\n                    ] = j\n\n        return self.__cache_methods.get(key)\n\n    def get_encoded_methods_class_method(\n        self, class_name: str, method_name: str\n    ) -> Union[EncodedMethod, None]:\n        \"\"\"\n        Return the specific encoded methods of the class\n\n        :param class_name: the class name of the method\n        :param method_name: the name of the method\n\n        :returns: `None` or a `EncodedMethod` object\n        \"\"\"\n        for i in self.get_encoded_methods():\n            if (\n                i.get_name() == method_name\n                and i.get_class_name() == class_name\n            ):\n                return i\n        return None\n\n    def get_encoded_methods_class(\n        self, class_name: str\n    ) -> list[EncodedMethod]:\n        \"\"\"\n        Return all encoded methods of a specific class by class name\n\n        :param class_name: the class name\n\n        :returns: a list with `EncodedMethod` objects\n        \"\"\"\n        l = []\n        for i in self.get_encoded_methods():\n            if class_name == i.get_class_name():\n                l.append(i)\n        return l\n\n    def get_encoded_fields_class(self, class_name: str) -> list[EncodedField]:\n        \"\"\"\n        Return all encoded fields of a specific class by class name\n\n        :param class_name: the class name\n\n        :returns: a list with `EncodedField` objects\n        \"\"\"\n        l = []\n        for i in self.get_encoded_fields():\n            if class_name == i.get_class_name():\n                l.append(i)\n        return l\n\n    def get_encoded_field_descriptor(\n        self, class_name: str, field_name: str, descriptor: str\n    ) -> EncodedField:\n        \"\"\"\n        Return the specific encoded field given a class name, field name, and descriptor\n\n        :param class_name: the class name of the field\n        :param field_name: the name of the field\n        :param descriptor: the descriptor of the field\n\n        :returns: `None` or a `EncodedField` object\n        \"\"\"\n\n        key = class_name + field_name + descriptor\n\n        if self.__cache_fields is None:\n            self.__cache_fields = {}\n            for i in self.get_classes():\n                for j in i.get_fields():\n                    self.__cache_fields[\n                        j.get_class_name() + j.get_name() + j.get_descriptor()\n                    ] = j\n\n        return self.__cache_fields.get(key)\n\n    def get_strings(self) -> list[str]:\n        \"\"\"\n        Return all strings\n\n        The strings will have escaped surrogates, if only a single high or low surrogate is found.\n        Complete surrogates are put together into the representing 32bit character.\n\n        :returns: a list with all strings used in the format (types, names ...)\n        \"\"\"\n        return (\n            [i.get() for i in self.strings] if self.strings is not None else []\n        )\n\n    def get_len_strings(self) -> int:\n        \"\"\"\n        Return the number of strings\n\n        :returns: int\n        \"\"\"\n        return len(self.get_strings())\n\n    def get_regex_strings(\n        self, regular_expressions: str\n    ) -> Union[list[str], None]:\n        \"\"\"\n        Return all target strings matched the regex\n\n        :param regular_expressions: the python regex string\n\n        :returns: a list of strings matching the regex expression\n        \"\"\"\n        str_list = []\n        if regular_expressions.count is None:\n            return None\n        for i in self.get_strings():\n            if re.match(regular_expressions, i):\n                str_list.append(i)\n        return str_list\n\n    def get_format_type(self) -> str:\n        \"\"\"\n        Return the type\n\n        :returns: a string\n        \"\"\"\n        return \"DEX\"\n\n    def create_python_export(self) -> None:\n        \"\"\"\n        Export classes/methods/fields' names in the python namespace\n        \"\"\"\n        logger.debug(\"Exporting Python objects\")\n        setattr(self, \"C\", ExportObject())\n\n        for _class in self.get_classes():\n            self._create_python_export_class(_class)\n\n    def _delete_python_export_class(self, _class: ClassDefItem) -> None:\n        self._create_python_export_class(_class, True)\n\n    def _create_python_export_class(\n        self, _class: ClassDefItem, delete: bool = False\n    ) -> None:\n        if _class is not None:\n            ### Class\n            name = str(bytecode.FormatClassToPython(_class.get_name()))\n            if delete:\n                delattr(self.C, name)\n                return\n            else:\n                setattr(self.C, name, _class)\n                setattr(_class, \"M\", ExportObject())\n                setattr(_class, \"F\", ExportObject())\n\n            self._create_python_export_methods(_class, delete)\n            self._create_python_export_fields(_class, delete)\n\n    def _create_python_export_methods(\n        self, _class: ClassDefItem, delete\n    ) -> None:\n        m = {}\n        for method in _class.get_methods():\n            if method.get_name() not in m:\n                m[method.get_name()] = []\n            m[method.get_name()].append(method)\n            setattr(method, \"XF\", ExportObject())\n            setattr(method, \"XT\", ExportObject())\n\n        for i in m:\n            if len(m[i]) == 1:\n                j = m[i][0]\n                name = str(bytecode.FormatNameToPython(j.get_name()))\n                setattr(_class.M, name, j)\n            else:\n                for j in m[i]:\n                    name = (\n                        str(bytecode.FormatNameToPython(j.get_name()))\n                        + \"_\"\n                        + str(\n                            bytecode.FormatDescriptorToPython(\n                                j.get_descriptor()\n                            )\n                        )\n                    )\n                    setattr(_class.M, name, j)\n\n    def _create_python_export_fields(\n        self, _class: ClassDefItem, delete\n    ) -> None:\n        f = {}\n        for field in _class.get_fields():\n            if field.get_name() not in f:\n                f[field.get_name()] = []\n            f[field.get_name()].append(field)\n            setattr(field, \"XR\", ExportObject())\n            setattr(field, \"XW\", ExportObject())\n\n        for i in f:\n            if len(f[i]) == 1:\n                j = f[i][0]\n                name = str(bytecode.FormatNameToPython(j.get_name()))\n                setattr(_class.F, name, j)\n            else:\n                for j in f[i]:\n                    name = (\n                        str(bytecode.FormatNameToPython(j.get_name()))\n                        + \"_\"\n                        + str(\n                            bytecode.FormatDescriptorToPython(\n                                j.get_descriptor()\n                            )\n                        )\n                    )\n                    setattr(_class.F, name, j)\n\n    def set_decompiler(self, decompiler: DecompilerDAD) -> None:\n        self.CM.set_decompiler(decompiler)\n\n    def set_analysis(self, analysis_dex: Analysis) -> None:\n        self.CM.set_analysis(analysis_dex)\n\n    def disassemble(self, offset: int, size: int) -> Iterator[Instruction]:\n        \"\"\"\n        Disassembles a given offset in the DEX file\n\n        :param offset: offset to disassemble in the file (from the beginning of the file)\n        :param size:\n\n        :returns: iterator over `Instruction`s at the given offset\n        \"\"\"\n        for i in DCode(\n            self.CM, offset, size, read_at(self.raw, offset, size)\n        ).get_instructions():\n            yield i\n\n    def _get_class_hierarchy(self) -> Node:\n        \"\"\"\n        Constructs a tree out of all the classes.\n        The classes are added to this tree by their superclass.\n\n        :returns: the root `Node` of the tree\n        \"\"\"\n        # Contains the class names as well as their running number\n        ids = dict()\n        present = dict()\n        r_ids = dict()\n        to_add = dict()\n        els = []\n\n        for current_class in self.get_classes():\n            s_name = current_class.get_superclassname()[1:-1]\n            c_name = current_class.get_name()[1:-1]\n\n            if s_name not in ids:\n                ids[s_name] = len(ids) + 1\n                r_ids[ids[s_name]] = s_name\n\n            if c_name not in ids:\n                ids[c_name] = len(ids) + 1\n\n            els.append([ids[c_name], ids[s_name], c_name])\n            present[ids[c_name]] = True\n\n        for i in els:\n            if i[1] not in present:\n                to_add[i[1]] = r_ids[i[1]]\n\n        for i in to_add:\n            els.append([i, 0, to_add[i]])\n\n        treeMap = dict()\n        Root = bytecode.Node(0, \"Root\")\n        treeMap[Root.id] = Root\n        for element in els:\n            nodeId, parentId, title = element\n            if not nodeId in treeMap:\n                treeMap[nodeId] = bytecode.Node(nodeId, title)\n            else:\n                treeMap[nodeId].id = nodeId\n                treeMap[nodeId].title = title\n\n            if not parentId in treeMap:\n                treeMap[parentId] = bytecode.Node(0, '')\n            treeMap[parentId].children.append(treeMap[nodeId])\n\n        return Root\n\n    def list_classes_hierarchy(self) -> dict[str, list[dict[str, list]]]:\n        \"\"\"\n        Get a tree structure of the classes.\n        The parent is always the superclass.\n\n        You can use `pprint.pprint` to print the\n        dictionary in a pretty way.\n\n        :returns: a tree in dictionary format where the key is the class name and the value is a list of dictionaries containing a child class name as a key and subsequent child classes as a value list\n        \"\"\"\n\n        def print_map(node, l):\n            if node.title not in l:\n                l[node.title] = []\n\n            for n in node.children:\n                if len(n.children) > 0:\n                    w = {n.title: []}\n                    l[node.title].append(w)\n\n                    print_map(n, w)\n                else:\n                    l[node.title].append(n.title)\n\n        l = {}\n        print_map(self._get_class_hierarchy(), l)\n\n        return l\n\n\nclass OdexHeaderItem:\n    \"\"\"\n    This class can parse the odex header\n\n    :param buff: a Buff object string which represents the odex dependencies\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO) -> None:\n        buff.seek(8)\n\n        self.dex_offset = unpack(\"=I\", buff.read(4))[0]\n        self.dex_length = unpack(\"=I\", buff.read(4))[0]\n        self.deps_offset = unpack(\"=I\", buff.read(4))[0]\n        self.deps_length = unpack(\"=I\", buff.read(4))[0]\n        self.aux_offset = unpack(\"=I\", buff.read(4))[0]\n        self.aux_length = unpack(\"=I\", buff.read(4))[0]\n        self.flags = unpack(\"=I\", buff.read(4))[0]\n        self.padding = unpack(\"=I\", buff.read(4))[0]\n\n    def show(self) -> None:\n        print(\n            \"dex_offset:{:x} dex_length:{:x} deps_offset:{:x} deps_length:{:x} aux_offset:{:x} aux_length:{:x} flags:{:x}\".format(\n                self.dex_offset,\n                self.dex_length,\n                self.deps_offset,\n                self.deps_length,\n                self.aux_offset,\n                self.aux_length,\n                self.flags,\n            )\n        )\n\n    def get_raw(self) -> bytes:\n        return (\n            pack(\"=I\", self.dex_offset)\n            + pack(\"=I\", self.dex_length)\n            + pack(\"=I\", self.deps_offset)\n            + pack(\"=I\", self.deps_length)\n            + pack(\"=I\", self.aux_offset)\n            + pack(\"=I\", self.aux_length)\n            + pack(\"=I\", self.flags)\n            + pack(\"=I\", self.padding)\n        )\n\n\nclass OdexDependencies:\n    \"\"\"\n    This class can parse the odex dependencies\n\n    :param buff: a Buff object string which represents the odex dependencies\n    \"\"\"\n\n    def __init__(self, buff: BinaryIO) -> None:\n        self.modification_time = unpack(\"=I\", buff.read(4))[0]\n        self.crc = unpack(\"=I\", buff.read(4))[0]\n        self.dalvik_build = unpack(\"=I\", buff.read(4))[0]\n        self.dependency_count = unpack(\"=I\", buff.read(4))[0]\n        self.dependencies = []\n        self.dependency_checksums = []\n\n        for i in range(0, self.dependency_count):\n            string_length = unpack(\"=I\", buff.read(4))[0]\n            name_dependency = buff.read(string_length)\n            self.dependencies.append(name_dependency)\n            self.dependency_checksums.append(buff.read(20))\n\n    def get_dependencies(self) -> list[str]:\n        \"\"\"\n        Return the list of dependencies\n\n        :returns: a list of strings\n        \"\"\"\n        return self.dependencies\n\n    def get_raw(self) -> bytes:\n        dependencies = b\"\"\n\n        for idx, value in enumerate(self.dependencies):\n            dependencies += (\n                pack(\"=I\", len(value))\n                + pack(\"=%ds\" % len(value), value)\n                + pack(\"=20s\", self.dependency_checksums[idx])\n            )\n\n        return (\n            pack(\"=I\", self.modification_time)\n            + pack(\"=I\", self.crc)\n            + pack(\"=I\", self.dalvik_build)\n            + pack(\"=I\", self.dependency_count)\n            + dependencies\n        )\n\n\nclass ODEX(DEX):\n    \"\"\"\n    This class can parse an odex file\n\n    :param buff: byteswhich represents the odex file\n    :param decompiler: associate a decompiler object to display the java source code\n\n    Example:\n\n        >>> ODEX( read(\"classes.odex\") )\n    \"\"\"\n\n    def _preload(self, buff: BinaryIO):\n        self.orig_buff = buff\n        self.magic = buff[:8]\n        if self.magic in (\n            ODEX_FILE_MAGIC_35,\n            ODEX_FILE_MAGIC_36,\n            ODEX_FILE_MAGIC_37,\n        ):\n            self.odex_header = OdexHeaderItem(self)\n\n            self.seek(self.odex_header.deps_offset)\n            self.dependencies = OdexDependencies(self)\n\n            self.padding = buff[\n                self.odex_header.deps_offset + self.odex_header.deps_length :\n            ]\n\n            self.seek(self.odex_header.dex_offset)\n            self.set_buff(self.read(self.odex_header.dex_length))\n            self.seek(0)\n\n    def save(self) -> bytes:\n        \"\"\"\n        Do not use !\n        \"\"\"\n        dex_raw = super().save()\n        return (\n            self.magic\n            + self.odex_header.get_raw()\n            + dex_raw\n            + self.dependencies.get_raw()\n            + self.padding\n        )\n\n    def get_buff(self) -> bytes:\n        return (\n            self.magic\n            + self.odex_header.get_raw()\n            + super().get_buff()\n            + self.dependencies.get_raw()\n            + self.padding\n        )\n\n    def get_dependencies(self) -> OdexDependencies:\n        \"\"\"\n        Return the odex dependencies object\n\n        :returns: an `OdexDependencies` object\n        \"\"\"\n        return self.dependencies\n\n    def get_format_type(self) -> str:\n        \"\"\"\n        Return the type\n\n        :returns: a string\n        \"\"\"\n        return \"ODEX\"\n\n\ndef get_params_info(nb: int, proto: str) -> str:\n    \"\"\"return a string of parameter info given a function prototype (proto)\n\n    :param nb: the number of parameters\n    :param proto: the function prototype with parameters\n    :returns: a string representation of the parameter info\n    \"\"\"\n    i_buffer = \"# Parameters:\\n\"\n\n    ret = proto.split(')')\n    params = ret[0][1:].split()\n    if params:\n        i_buffer += \"# - local registers: v%d...v%d\\n\" % (\n            0,\n            nb - len(params) - 1,\n        )\n        j = 0\n        for i in range(nb - len(params), nb):\n            i_buffer += \"# - v%d:%s\\n\" % (i, get_type(params[j]))\n            j += 1\n    else:\n        i_buffer += \"# local registers: v%d...v%d\\n\" % (0, nb - 1)\n\n    i_buffer += \"#\\n# - return:%s\\n\\n\" % get_type(ret[1])\n\n    return i_buffer\n\ndef get_bytecodes_method(\n    dex_object, analysis_object: Analysis, method: EncodedMethod\n) -> str:\n    \"\"\"return a string representation of method and its code. Wraps [get_bytecodes_methodx][androguard.core.dex.get_bytecodes_methodx]\n    \n    :param dex_object: unused\n    :param analysis_object: the `Analysis` object containing the class\n    :param method: the `EncodedMethod` to get\n    \"\"\"\n    mx = analysis_object.get_method(method)\n    return get_bytecodes_methodx(method, mx)\n\n\ndef get_bytecodes_methodx(method: EncodedMethod, mx: MethodAnalysis) -> str:\n    \"\"\"return a string representation of a method and its code\n\n    :param method: the associated`EncodedMethod` to get\n    :param mx: the associated `MethodAnalysis` to get\n    :returns: the string representation\n    \"\"\"\n    basic_blocks = mx.basic_blocks.gets()\n    i_buffer = \"\"\n\n    idx = 0\n    nb = 0\n\n    i_buffer += \"# {}->{}{} [access_flags={}]\\n#\\n\".format(\n        method.get_class_name(),\n        method.get_name(),\n        method.get_descriptor(),\n        method.get_access_flags_string(),\n    )\n    if method.code is not None:\n        i_buffer += get_params_info(\n            method.code.get_registers_size(), method.get_descriptor()\n        )\n\n        for i in basic_blocks:\n            bb_buffer = \"\"\n            ins_buffer = \"\"\n\n            bb_buffer += \"%s : \" % i.name\n\n            # TODO using the generator object as a list again is not ideal...\n            instructions = list(i.get_instructions())\n            for ins in instructions:\n                ins_buffer += \"\\t%-8d(%08x) \" % (nb, idx)\n                ins_buffer += \"{:<20} {}\".format(\n                    ins.get_name(), ins.get_output(idx)\n                )\n\n                op_value = ins.get_op_value()\n                if ins == instructions[-1] and i.childs != []:\n                    # packed/sparse-switch\n                    if (op_value == 0x2B or op_value == 0x2C) and len(\n                        i.childs\n                    ) > 1:\n                        values = i.get_special_ins(idx).get_values()\n                        bb_buffer += \"[ D:%s \" % i.childs[0][2].name\n                        bb_buffer += (\n                            ' '.join(\n                                \"%d:%s\" % (values[j], i.childs[j + 1][2].name)\n                                for j in range(0, len(i.childs) - 1)\n                            )\n                            + \" ]\"\n                        )\n                    else:\n                        # if len(i.childs) == 2:\n                        #    i_buffer += \"%s[ %s%s \" % (branch_false_color, i.childs[0][2].name, branch_true_color))\n                        #    print_fct(' '.join(\"%s\" % c[2].name for c in i.childs[1:]) + \" ]%s\" % normal_color)\n                        # else:\n                        bb_buffer += (\n                            \"[ \"\n                            + ' '.join(\"%s\" % c[2].name for c in i.childs)\n                            + \" ]\"\n                        )\n\n                idx += ins.get_length()\n                nb += 1\n\n                ins_buffer += \"\\n\"\n\n            if i.get_exception_analysis() is not None:\n                ins_buffer += \"\\t%s\\n\" % (i.exception_analysis.show_buff())\n\n            i_buffer += bb_buffer + \"\\n\" + ins_buffer + \"\\n\"\n\n    return i_buffer\n\n\nclass ExportObject:\n    \"\"\"\n    Wrapper object for ipython exports\n    \"\"\"\n\n    pass\n"
  },
  {
    "path": "libs/androguard/core/dex/dex_types.py",
    "content": "from collections import OrderedDict\nfrom enum import IntEnum\n\n# This file contains dictionaries used in the Dalvik Format.\n\n\n# Used to identify different types of operands\nclass Kind(IntEnum):\n    \"\"\"\n    This Enum is used to determine the kind of argument\n    inside an Dalvik instruction.\n\n    It is used to reference the actual item instead of the refernece index\n    from the `ClassManager` when disassembling the bytecode.\n    \"\"\"\n\n    # Indicates a method reference\n    METH = 0\n    # Indicates that opcode argument is a string index\n    STRING = 1\n    # Indicates a field reference\n    FIELD = 2\n    # Indicates a type reference\n    TYPE = 3\n    # indicates a prototype reference\n    PROTO = 9\n    # indicates method reference and proto reference (invoke-polymorphic)\n    METH_PROTO = 10\n    # indicates call site item\n    CALL_SITE = 11\n\n    # TODO: not very well documented\n    VARIES = 4\n    # inline lined stuff\n    INLINE_METHOD = 5\n    # static linked stuff\n    VTABLE_OFFSET = 6\n    FIELD_OFFSET = 7\n    RAW_STRING = 8\n\n\nclass Operand(IntEnum):\n    \"\"\"\n    Enumeration used for the operand type of opcodes\n    \"\"\"\n\n    REGISTER = 0\n    LITERAL = 1\n    RAW = 2\n    OFFSET = 3\n    # FIXME: KIND is used in combination with others, ie the Kind enum, therefore it is 0x100...\n    # thus we could use an IntFlag here as well\n    KIND = 0x100\n\n\n# https://source.android.com/devices/tech/dalvik/dex-format#type-codes\nclass TypeMapItem(IntEnum):\n    \"\"\"Enumeration used for map_items\"\"\"\n    HEADER_ITEM = 0x0\n    STRING_ID_ITEM = 0x1\n    TYPE_ID_ITEM = 0x2\n    PROTO_ID_ITEM = 0x3\n    FIELD_ID_ITEM = 0x4\n    METHOD_ID_ITEM = 0x5\n    CLASS_DEF_ITEM = 0x6\n    CALL_SITE_ITEM = 0x7  # New in DEX038\n    METHOD_HANDLE_ITEM = 0x8  # New in DEX038\n    MAP_LIST = 0x1000\n    TYPE_LIST = 0x1001\n    ANNOTATION_SET_REF_LIST = 0x1002\n    ANNOTATION_SET_ITEM = 0x1003\n    CLASS_DATA_ITEM = 0x2000\n    CODE_ITEM = 0x2001\n    STRING_DATA_ITEM = 0x2002\n    DEBUG_INFO_ITEM = 0x2003\n    ANNOTATION_ITEM = 0x2004\n    ENCODED_ARRAY_ITEM = 0x2005\n    ANNOTATIONS_DIRECTORY_ITEM = 0x2006\n    HIDDENAPI_CLASS_DATA_ITEM = 0xF000\n\n    @staticmethod\n    def _get_dependencies():\n        return OrderedDict(\n            [\n                (TypeMapItem.HEADER_ITEM, set()),\n                (TypeMapItem.STRING_ID_ITEM, {TypeMapItem.STRING_DATA_ITEM}),\n                (TypeMapItem.TYPE_ID_ITEM, {TypeMapItem.STRING_ID_ITEM}),\n                (\n                    TypeMapItem.PROTO_ID_ITEM,\n                    {\n                        TypeMapItem.STRING_ID_ITEM,\n                        TypeMapItem.TYPE_ID_ITEM,\n                        TypeMapItem.TYPE_LIST,\n                    },\n                ),\n                (\n                    TypeMapItem.FIELD_ID_ITEM,\n                    {TypeMapItem.STRING_ID_ITEM, TypeMapItem.TYPE_ID_ITEM},\n                ),\n                (\n                    TypeMapItem.METHOD_ID_ITEM,\n                    {\n                        TypeMapItem.STRING_ID_ITEM,\n                        TypeMapItem.TYPE_ID_ITEM,\n                        TypeMapItem.PROTO_ID_ITEM,\n                    },\n                ),\n                (\n                    TypeMapItem.CLASS_DEF_ITEM,\n                    {\n                        TypeMapItem.TYPE_ID_ITEM,\n                        TypeMapItem.TYPE_LIST,\n                        TypeMapItem.STRING_ID_ITEM,\n                        TypeMapItem.DEBUG_INFO_ITEM,\n                        TypeMapItem.ANNOTATIONS_DIRECTORY_ITEM,\n                        TypeMapItem.CLASS_DATA_ITEM,\n                        TypeMapItem.ENCODED_ARRAY_ITEM,\n                    },\n                ),\n                (\n                    TypeMapItem.CALL_SITE_ITEM,\n                    {\n                        TypeMapItem.METHOD_HANDLE_ITEM,\n                        TypeMapItem.STRING_ID_ITEM,\n                        TypeMapItem.METHOD_ID_ITEM,\n                    },\n                ),\n                # TODO: check if this is correct\n                (\n                    TypeMapItem.METHOD_HANDLE_ITEM,\n                    {TypeMapItem.FIELD_ID_ITEM, TypeMapItem.METHOD_ID_ITEM},\n                ),\n                # TODO: check if this is correct\n                (TypeMapItem.MAP_LIST, set()),\n                (TypeMapItem.TYPE_LIST, {TypeMapItem.TYPE_ID_ITEM}),\n                (\n                    TypeMapItem.ANNOTATION_SET_REF_LIST,\n                    {TypeMapItem.ANNOTATION_SET_ITEM},\n                ),\n                (\n                    TypeMapItem.ANNOTATION_SET_ITEM,\n                    {TypeMapItem.ANNOTATION_ITEM},\n                ),\n                (\n                    TypeMapItem.CLASS_DATA_ITEM,\n                    {TypeMapItem.FIELD_ID_ITEM, TypeMapItem.METHOD_ID_ITEM},\n                ),\n                (\n                    TypeMapItem.CODE_ITEM,\n                    {TypeMapItem.DEBUG_INFO_ITEM, TypeMapItem.TYPE_ID_ITEM},\n                ),\n                (TypeMapItem.STRING_DATA_ITEM, set()),\n                (\n                    TypeMapItem.DEBUG_INFO_ITEM,\n                    {TypeMapItem.STRING_ID_ITEM, TypeMapItem.TYPE_ID_ITEM},\n                ),\n                (\n                    TypeMapItem.ANNOTATION_ITEM,\n                    {\n                        TypeMapItem.PROTO_ID_ITEM,\n                        TypeMapItem.STRING_ID_ITEM,\n                        TypeMapItem.TYPE_ID_ITEM,\n                        TypeMapItem.FIELD_ID_ITEM,\n                        TypeMapItem.METHOD_ID_ITEM,\n                    },\n                ),\n                (\n                    TypeMapItem.ENCODED_ARRAY_ITEM,\n                    {\n                        TypeMapItem.PROTO_ID_ITEM,\n                        TypeMapItem.STRING_ID_ITEM,\n                        TypeMapItem.TYPE_ID_ITEM,\n                        TypeMapItem.FIELD_ID_ITEM,\n                        TypeMapItem.METHOD_ID_ITEM,\n                    },\n                ),\n                (\n                    TypeMapItem.ANNOTATIONS_DIRECTORY_ITEM,\n                    {\n                        TypeMapItem.FIELD_ID_ITEM,\n                        TypeMapItem.METHOD_ID_ITEM,\n                        TypeMapItem.ANNOTATION_SET_ITEM,\n                    },\n                ),\n                (TypeMapItem.HIDDENAPI_CLASS_DATA_ITEM, set()),\n            ]\n        )\n\n    @staticmethod\n    def determine_load_order():\n        dependencies = TypeMapItem._get_dependencies()\n        ordered = dict()\n        while dependencies:\n            found_next = False\n            for type_name, unloaded in dependencies.items():\n                if not unloaded:\n                    ordered[type_name] = len(ordered)\n                    found_next = True\n                    break\n            if found_next is False:\n                raise Exception('recursive loading dependency')\n            dependencies.pop(type_name)\n            for unloaded in dependencies.values():\n                unloaded.discard(type_name)\n        return ordered\n\n\n# https://source.android.com/devices/tech/dalvik/dex-format#access-flags\nACCESS_FLAGS = {\n    0x1: 'public',\n    0x2: 'private',\n    0x4: 'protected',\n    0x8: 'static',\n    0x10: 'final',\n    0x20: 'synchronized',\n    0x40: 'bridge',\n    0x80: 'varargs',\n    0x100: 'native',\n    0x200: 'interface',\n    0x400: 'abstract',\n    0x800: 'strictfp',\n    0x1000: 'synthetic',\n    0x4000: 'enum',\n    0x8000: 'unused',\n    0x10000: 'constructor',\n    0x20000: 'synchronized',\n}\n\n# https://source.android.com/devices/tech/dalvik/dex-format#typedescriptor\nTYPE_DESCRIPTOR = {\n    'V': 'void',\n    'Z': 'boolean',\n    'B': 'byte',\n    'S': 'short',\n    'C': 'char',\n    'I': 'int',\n    'J': 'long',\n    'F': 'float',\n    'D': 'double',\n}\n"
  },
  {
    "path": "libs/androguard/core/mutf8/__init__.py",
    "content": "from mutf8 import decode_modified_utf8, encode_modified_utf8\n\ndecode = decode_modified_utf8\nencode = encode_modified_utf8\n"
  },
  {
    "path": "libs/androguard/core/resources/__init__.py",
    "content": ""
  },
  {
    "path": "libs/androguard/core/resources/public.json",
    "content": "{\n    \"attr\": {\n        \"theme\": 16842752,\n        \"label\": 16842753,\n        \"icon\": 16842754,\n        \"name\": 16842755,\n        \"manageSpaceActivity\": 16842756,\n        \"allowClearUserData\": 16842757,\n        \"permission\": 16842758,\n        \"readPermission\": 16842759,\n        \"writePermission\": 16842760,\n        \"protectionLevel\": 16842761,\n        \"permissionGroup\": 16842762,\n        \"sharedUserId\": 16842763,\n        \"hasCode\": 16842764,\n        \"persistent\": 16842765,\n        \"enabled\": 16842766,\n        \"debuggable\": 16842767,\n        \"exported\": 16842768,\n        \"process\": 16842769,\n        \"taskAffinity\": 16842770,\n        \"multiprocess\": 16842771,\n        \"finishOnTaskLaunch\": 16842772,\n        \"clearTaskOnLaunch\": 16842773,\n        \"stateNotNeeded\": 16842774,\n        \"excludeFromRecents\": 16842775,\n        \"authorities\": 16842776,\n        \"syncable\": 16842777,\n        \"initOrder\": 16842778,\n        \"grantUriPermissions\": 16842779,\n        \"priority\": 16842780,\n        \"launchMode\": 16842781,\n        \"screenOrientation\": 16842782,\n        \"configChanges\": 16842783,\n        \"description\": 16842784,\n        \"targetPackage\": 16842785,\n        \"handleProfiling\": 16842786,\n        \"functionalTest\": 16842787,\n        \"value\": 16842788,\n        \"resource\": 16842789,\n        \"mimeType\": 16842790,\n        \"scheme\": 16842791,\n        \"host\": 16842792,\n        \"port\": 16842793,\n        \"path\": 16842794,\n        \"pathPrefix\": 16842795,\n        \"pathPattern\": 16842796,\n        \"action\": 16842797,\n        \"data\": 16842798,\n        \"targetClass\": 16842799,\n        \"colorForeground\": 16842800,\n        \"colorBackground\": 16842801,\n        \"backgroundDimAmount\": 16842802,\n        \"disabledAlpha\": 16842803,\n        \"textAppearance\": 16842804,\n        \"textAppearanceInverse\": 16842805,\n        \"textColorPrimary\": 16842806,\n        \"textColorPrimaryDisableOnly\": 16842807,\n        \"textColorSecondary\": 16842808,\n        \"textColorPrimaryInverse\": 16842809,\n        \"textColorSecondaryInverse\": 16842810,\n        \"textColorPrimaryNoDisable\": 16842811,\n        \"textColorSecondaryNoDisable\": 16842812,\n        \"textColorPrimaryInverseNoDisable\": 16842813,\n        \"textColorSecondaryInverseNoDisable\": 16842814,\n        \"textColorHintInverse\": 16842815,\n        \"textAppearanceLarge\": 16842816,\n        \"textAppearanceMedium\": 16842817,\n        \"textAppearanceSmall\": 16842818,\n        \"textAppearanceLargeInverse\": 16842819,\n        \"textAppearanceMediumInverse\": 16842820,\n        \"textAppearanceSmallInverse\": 16842821,\n        \"textCheckMark\": 16842822,\n        \"textCheckMarkInverse\": 16842823,\n        \"buttonStyle\": 16842824,\n        \"buttonStyleSmall\": 16842825,\n        \"buttonStyleInset\": 16842826,\n        \"buttonStyleToggle\": 16842827,\n        \"galleryItemBackground\": 16842828,\n        \"listPreferredItemHeight\": 16842829,\n        \"expandableListPreferredItemPaddingLeft\": 16842830,\n        \"expandableListPreferredChildPaddingLeft\": 16842831,\n        \"expandableListPreferredItemIndicatorLeft\": 16842832,\n        \"expandableListPreferredItemIndicatorRight\": 16842833,\n        \"expandableListPreferredChildIndicatorLeft\": 16842834,\n        \"expandableListPreferredChildIndicatorRight\": 16842835,\n        \"windowBackground\": 16842836,\n        \"windowFrame\": 16842837,\n        \"windowNoTitle\": 16842838,\n        \"windowIsFloating\": 16842839,\n        \"windowIsTranslucent\": 16842840,\n        \"windowContentOverlay\": 16842841,\n        \"windowTitleSize\": 16842842,\n        \"windowTitleStyle\": 16842843,\n        \"windowTitleBackgroundStyle\": 16842844,\n        \"alertDialogStyle\": 16842845,\n        \"panelBackground\": 16842846,\n        \"panelFullBackground\": 16842847,\n        \"panelColorForeground\": 16842848,\n        \"panelColorBackground\": 16842849,\n        \"panelTextAppearance\": 16842850,\n        \"scrollbarSize\": 16842851,\n        \"scrollbarThumbHorizontal\": 16842852,\n        \"scrollbarThumbVertical\": 16842853,\n        \"scrollbarTrackHorizontal\": 16842854,\n        \"scrollbarTrackVertical\": 16842855,\n        \"scrollbarAlwaysDrawHorizontalTrack\": 16842856,\n        \"scrollbarAlwaysDrawVerticalTrack\": 16842857,\n        \"absListViewStyle\": 16842858,\n        \"autoCompleteTextViewStyle\": 16842859,\n        \"checkboxStyle\": 16842860,\n        \"dropDownListViewStyle\": 16842861,\n        \"editTextStyle\": 16842862,\n        \"expandableListViewStyle\": 16842863,\n        \"galleryStyle\": 16842864,\n        \"gridViewStyle\": 16842865,\n        \"imageButtonStyle\": 16842866,\n        \"imageWellStyle\": 16842867,\n        \"listViewStyle\": 16842868,\n        \"listViewWhiteStyle\": 16842869,\n        \"popupWindowStyle\": 16842870,\n        \"progressBarStyle\": 16842871,\n        \"progressBarStyleHorizontal\": 16842872,\n        \"progressBarStyleSmall\": 16842873,\n        \"progressBarStyleLarge\": 16842874,\n        \"seekBarStyle\": 16842875,\n        \"ratingBarStyle\": 16842876,\n        \"ratingBarStyleSmall\": 16842877,\n        \"radioButtonStyle\": 16842878,\n        \"scrollbarStyle\": 16842879,\n        \"scrollViewStyle\": 16842880,\n        \"spinnerStyle\": 16842881,\n        \"starStyle\": 16842882,\n        \"tabWidgetStyle\": 16842883,\n        \"textViewStyle\": 16842884,\n        \"webViewStyle\": 16842885,\n        \"dropDownItemStyle\": 16842886,\n        \"spinnerDropDownItemStyle\": 16842887,\n        \"dropDownHintAppearance\": 16842888,\n        \"spinnerItemStyle\": 16842889,\n        \"mapViewStyle\": 16842890,\n        \"preferenceScreenStyle\": 16842891,\n        \"preferenceCategoryStyle\": 16842892,\n        \"preferenceInformationStyle\": 16842893,\n        \"preferenceStyle\": 16842894,\n        \"checkBoxPreferenceStyle\": 16842895,\n        \"yesNoPreferenceStyle\": 16842896,\n        \"dialogPreferenceStyle\": 16842897,\n        \"editTextPreferenceStyle\": 16842898,\n        \"ringtonePreferenceStyle\": 16842899,\n        \"preferenceLayoutChild\": 16842900,\n        \"textSize\": 16842901,\n        \"typeface\": 16842902,\n        \"textStyle\": 16842903,\n        \"textColor\": 16842904,\n        \"textColorHighlight\": 16842905,\n        \"textColorHint\": 16842906,\n        \"textColorLink\": 16842907,\n        \"state_focused\": 16842908,\n        \"state_window_focused\": 16842909,\n        \"state_enabled\": 16842910,\n        \"state_checkable\": 16842911,\n        \"state_checked\": 16842912,\n        \"state_selected\": 16842913,\n        \"state_active\": 16842914,\n        \"state_single\": 16842915,\n        \"state_first\": 16842916,\n        \"state_middle\": 16842917,\n        \"state_last\": 16842918,\n        \"state_pressed\": 16842919,\n        \"state_expanded\": 16842920,\n        \"state_empty\": 16842921,\n        \"state_above_anchor\": 16842922,\n        \"ellipsize\": 16842923,\n        \"x\": 16842924,\n        \"y\": 16842925,\n        \"windowAnimationStyle\": 16842926,\n        \"gravity\": 16842927,\n        \"autoLink\": 16842928,\n        \"linksClickable\": 16842929,\n        \"entries\": 16842930,\n        \"layout_gravity\": 16842931,\n        \"windowEnterAnimation\": 16842932,\n        \"windowExitAnimation\": 16842933,\n        \"windowShowAnimation\": 16842934,\n        \"windowHideAnimation\": 16842935,\n        \"activityOpenEnterAnimation\": 16842936,\n        \"activityOpenExitAnimation\": 16842937,\n        \"activityCloseEnterAnimation\": 16842938,\n        \"activityCloseExitAnimation\": 16842939,\n        \"taskOpenEnterAnimation\": 16842940,\n        \"taskOpenExitAnimation\": 16842941,\n        \"taskCloseEnterAnimation\": 16842942,\n        \"taskCloseExitAnimation\": 16842943,\n        \"taskToFrontEnterAnimation\": 16842944,\n        \"taskToFrontExitAnimation\": 16842945,\n        \"taskToBackEnterAnimation\": 16842946,\n        \"taskToBackExitAnimation\": 16842947,\n        \"orientation\": 16842948,\n        \"keycode\": 16842949,\n        \"fullDark\": 16842950,\n        \"topDark\": 16842951,\n        \"centerDark\": 16842952,\n        \"bottomDark\": 16842953,\n        \"fullBright\": 16842954,\n        \"topBright\": 16842955,\n        \"centerBright\": 16842956,\n        \"bottomBright\": 16842957,\n        \"bottomMedium\": 16842958,\n        \"centerMedium\": 16842959,\n        \"id\": 16842960,\n        \"tag\": 16842961,\n        \"scrollX\": 16842962,\n        \"scrollY\": 16842963,\n        \"background\": 16842964,\n        \"padding\": 16842965,\n        \"paddingLeft\": 16842966,\n        \"paddingTop\": 16842967,\n        \"paddingRight\": 16842968,\n        \"paddingBottom\": 16842969,\n        \"focusable\": 16842970,\n        \"focusableInTouchMode\": 16842971,\n        \"visibility\": 16842972,\n        \"fitsSystemWindows\": 16842973,\n        \"scrollbars\": 16842974,\n        \"fadingEdge\": 16842975,\n        \"fadingEdgeLength\": 16842976,\n        \"nextFocusLeft\": 16842977,\n        \"nextFocusRight\": 16842978,\n        \"nextFocusUp\": 16842979,\n        \"nextFocusDown\": 16842980,\n        \"clickable\": 16842981,\n        \"longClickable\": 16842982,\n        \"saveEnabled\": 16842983,\n        \"drawingCacheQuality\": 16842984,\n        \"duplicateParentState\": 16842985,\n        \"clipChildren\": 16842986,\n        \"clipToPadding\": 16842987,\n        \"layoutAnimation\": 16842988,\n        \"animationCache\": 16842989,\n        \"persistentDrawingCache\": 16842990,\n        \"alwaysDrawnWithCache\": 16842991,\n        \"addStatesFromChildren\": 16842992,\n        \"descendantFocusability\": 16842993,\n        \"layout\": 16842994,\n        \"inflatedId\": 16842995,\n        \"layout_width\": 16842996,\n        \"layout_height\": 16842997,\n        \"layout_margin\": 16842998,\n        \"layout_marginLeft\": 16842999,\n        \"layout_marginTop\": 16843000,\n        \"layout_marginRight\": 16843001,\n        \"layout_marginBottom\": 16843002,\n        \"listSelector\": 16843003,\n        \"drawSelectorOnTop\": 16843004,\n        \"stackFromBottom\": 16843005,\n        \"scrollingCache\": 16843006,\n        \"textFilterEnabled\": 16843007,\n        \"transcriptMode\": 16843008,\n        \"cacheColorHint\": 16843009,\n        \"dial\": 16843010,\n        \"hand_hour\": 16843011,\n        \"hand_minute\": 16843012,\n        \"format\": 16843013,\n        \"checked\": 16843014,\n        \"button\": 16843015,\n        \"checkMark\": 16843016,\n        \"foreground\": 16843017,\n        \"measureAllChildren\": 16843018,\n        \"groupIndicator\": 16843019,\n        \"childIndicator\": 16843020,\n        \"indicatorLeft\": 16843021,\n        \"indicatorRight\": 16843022,\n        \"childIndicatorLeft\": 16843023,\n        \"childIndicatorRight\": 16843024,\n        \"childDivider\": 16843025,\n        \"animationDuration\": 16843026,\n        \"spacing\": 16843027,\n        \"horizontalSpacing\": 16843028,\n        \"verticalSpacing\": 16843029,\n        \"stretchMode\": 16843030,\n        \"columnWidth\": 16843031,\n        \"numColumns\": 16843032,\n        \"src\": 16843033,\n        \"antialias\": 16843034,\n        \"filter\": 16843035,\n        \"dither\": 16843036,\n        \"scaleType\": 16843037,\n        \"adjustViewBounds\": 16843038,\n        \"maxWidth\": 16843039,\n        \"maxHeight\": 16843040,\n        \"tint\": 16843041,\n        \"baselineAlignBottom\": 16843042,\n        \"cropToPadding\": 16843043,\n        \"textOn\": 16843044,\n        \"textOff\": 16843045,\n        \"baselineAligned\": 16843046,\n        \"baselineAlignedChildIndex\": 16843047,\n        \"weightSum\": 16843048,\n        \"divider\": 16843049,\n        \"dividerHeight\": 16843050,\n        \"choiceMode\": 16843051,\n        \"itemTextAppearance\": 16843052,\n        \"horizontalDivider\": 16843053,\n        \"verticalDivider\": 16843054,\n        \"headerBackground\": 16843055,\n        \"itemBackground\": 16843056,\n        \"itemIconDisabledAlpha\": 16843057,\n        \"rowHeight\": 16843058,\n        \"maxRows\": 16843059,\n        \"maxItemsPerRow\": 16843060,\n        \"moreIcon\": 16843061,\n        \"max\": 16843062,\n        \"progress\": 16843063,\n        \"secondaryProgress\": 16843064,\n        \"indeterminate\": 16843065,\n        \"indeterminateOnly\": 16843066,\n        \"indeterminateDrawable\": 16843067,\n        \"progressDrawable\": 16843068,\n        \"indeterminateDuration\": 16843069,\n        \"indeterminateBehavior\": 16843070,\n        \"minWidth\": 16843071,\n        \"minHeight\": 16843072,\n        \"interpolator\": 16843073,\n        \"thumb\": 16843074,\n        \"thumbOffset\": 16843075,\n        \"numStars\": 16843076,\n        \"rating\": 16843077,\n        \"stepSize\": 16843078,\n        \"isIndicator\": 16843079,\n        \"checkedButton\": 16843080,\n        \"stretchColumns\": 16843081,\n        \"shrinkColumns\": 16843082,\n        \"collapseColumns\": 16843083,\n        \"layout_column\": 16843084,\n        \"layout_span\": 16843085,\n        \"bufferType\": 16843086,\n        \"text\": 16843087,\n        \"hint\": 16843088,\n        \"textScaleX\": 16843089,\n        \"cursorVisible\": 16843090,\n        \"maxLines\": 16843091,\n        \"lines\": 16843092,\n        \"height\": 16843093,\n        \"minLines\": 16843094,\n        \"maxEms\": 16843095,\n        \"ems\": 16843096,\n        \"width\": 16843097,\n        \"minEms\": 16843098,\n        \"scrollHorizontally\": 16843099,\n        \"password\": 16843100,\n        \"singleLine\": 16843101,\n        \"selectAllOnFocus\": 16843102,\n        \"includeFontPadding\": 16843103,\n        \"maxLength\": 16843104,\n        \"shadowColor\": 16843105,\n        \"shadowDx\": 16843106,\n        \"shadowDy\": 16843107,\n        \"shadowRadius\": 16843108,\n        \"numeric\": 16843109,\n        \"digits\": 16843110,\n        \"phoneNumber\": 16843111,\n        \"inputMethod\": 16843112,\n        \"capitalize\": 16843113,\n        \"autoText\": 16843114,\n        \"editable\": 16843115,\n        \"freezesText\": 16843116,\n        \"drawableTop\": 16843117,\n        \"drawableBottom\": 16843118,\n        \"drawableLeft\": 16843119,\n        \"drawableRight\": 16843120,\n        \"drawablePadding\": 16843121,\n        \"completionHint\": 16843122,\n        \"completionHintView\": 16843123,\n        \"completionThreshold\": 16843124,\n        \"dropDownSelector\": 16843125,\n        \"popupBackground\": 16843126,\n        \"inAnimation\": 16843127,\n        \"outAnimation\": 16843128,\n        \"flipInterval\": 16843129,\n        \"fillViewport\": 16843130,\n        \"prompt\": 16843131,\n        \"startYear\": 16843132,\n        \"endYear\": 16843133,\n        \"mode\": 16843134,\n        \"layout_x\": 16843135,\n        \"layout_y\": 16843136,\n        \"layout_weight\": 16843137,\n        \"layout_toLeftOf\": 16843138,\n        \"layout_toRightOf\": 16843139,\n        \"layout_above\": 16843140,\n        \"layout_below\": 16843141,\n        \"layout_alignBaseline\": 16843142,\n        \"layout_alignLeft\": 16843143,\n        \"layout_alignTop\": 16843144,\n        \"layout_alignRight\": 16843145,\n        \"layout_alignBottom\": 16843146,\n        \"layout_alignParentLeft\": 16843147,\n        \"layout_alignParentTop\": 16843148,\n        \"layout_alignParentRight\": 16843149,\n        \"layout_alignParentBottom\": 16843150,\n        \"layout_centerInParent\": 16843151,\n        \"layout_centerHorizontal\": 16843152,\n        \"layout_centerVertical\": 16843153,\n        \"layout_alignWithParentIfMissing\": 16843154,\n        \"layout_scale\": 16843155,\n        \"visible\": 16843156,\n        \"variablePadding\": 16843157,\n        \"constantSize\": 16843158,\n        \"oneshot\": 16843159,\n        \"duration\": 16843160,\n        \"drawable\": 16843161,\n        \"shape\": 16843162,\n        \"innerRadiusRatio\": 16843163,\n        \"thicknessRatio\": 16843164,\n        \"startColor\": 16843165,\n        \"endColor\": 16843166,\n        \"useLevel\": 16843167,\n        \"angle\": 16843168,\n        \"type\": 16843169,\n        \"centerX\": 16843170,\n        \"centerY\": 16843171,\n        \"gradientRadius\": 16843172,\n        \"color\": 16843173,\n        \"dashWidth\": 16843174,\n        \"dashGap\": 16843175,\n        \"radius\": 16843176,\n        \"topLeftRadius\": 16843177,\n        \"topRightRadius\": 16843178,\n        \"bottomLeftRadius\": 16843179,\n        \"bottomRightRadius\": 16843180,\n        \"left\": 16843181,\n        \"top\": 16843182,\n        \"right\": 16843183,\n        \"bottom\": 16843184,\n        \"minLevel\": 16843185,\n        \"maxLevel\": 16843186,\n        \"fromDegrees\": 16843187,\n        \"toDegrees\": 16843188,\n        \"pivotX\": 16843189,\n        \"pivotY\": 16843190,\n        \"insetLeft\": 16843191,\n        \"insetRight\": 16843192,\n        \"insetTop\": 16843193,\n        \"insetBottom\": 16843194,\n        \"shareInterpolator\": 16843195,\n        \"fillBefore\": 16843196,\n        \"fillAfter\": 16843197,\n        \"startOffset\": 16843198,\n        \"repeatCount\": 16843199,\n        \"repeatMode\": 16843200,\n        \"zAdjustment\": 16843201,\n        \"fromXScale\": 16843202,\n        \"toXScale\": 16843203,\n        \"fromYScale\": 16843204,\n        \"toYScale\": 16843205,\n        \"fromXDelta\": 16843206,\n        \"toXDelta\": 16843207,\n        \"fromYDelta\": 16843208,\n        \"toYDelta\": 16843209,\n        \"fromAlpha\": 16843210,\n        \"toAlpha\": 16843211,\n        \"delay\": 16843212,\n        \"animation\": 16843213,\n        \"animationOrder\": 16843214,\n        \"columnDelay\": 16843215,\n        \"rowDelay\": 16843216,\n        \"direction\": 16843217,\n        \"directionPriority\": 16843218,\n        \"factor\": 16843219,\n        \"cycles\": 16843220,\n        \"searchMode\": 16843221,\n        \"searchSuggestAuthority\": 16843222,\n        \"searchSuggestPath\": 16843223,\n        \"searchSuggestSelection\": 16843224,\n        \"searchSuggestIntentAction\": 16843225,\n        \"searchSuggestIntentData\": 16843226,\n        \"queryActionMsg\": 16843227,\n        \"suggestActionMsg\": 16843228,\n        \"suggestActionMsgColumn\": 16843229,\n        \"menuCategory\": 16843230,\n        \"orderInCategory\": 16843231,\n        \"checkableBehavior\": 16843232,\n        \"title\": 16843233,\n        \"titleCondensed\": 16843234,\n        \"alphabeticShortcut\": 16843235,\n        \"numericShortcut\": 16843236,\n        \"checkable\": 16843237,\n        \"selectable\": 16843238,\n        \"orderingFromXml\": 16843239,\n        \"key\": 16843240,\n        \"summary\": 16843241,\n        \"order\": 16843242,\n        \"widgetLayout\": 16843243,\n        \"dependency\": 16843244,\n        \"defaultValue\": 16843245,\n        \"shouldDisableView\": 16843246,\n        \"summaryOn\": 16843247,\n        \"summaryOff\": 16843248,\n        \"disableDependentsState\": 16843249,\n        \"dialogTitle\": 16843250,\n        \"dialogMessage\": 16843251,\n        \"dialogIcon\": 16843252,\n        \"positiveButtonText\": 16843253,\n        \"negativeButtonText\": 16843254,\n        \"dialogLayout\": 16843255,\n        \"entryValues\": 16843256,\n        \"ringtoneType\": 16843257,\n        \"showDefault\": 16843258,\n        \"showSilent\": 16843259,\n        \"scaleWidth\": 16843260,\n        \"scaleHeight\": 16843261,\n        \"scaleGravity\": 16843262,\n        \"ignoreGravity\": 16843263,\n        \"foregroundGravity\": 16843264,\n        \"tileMode\": 16843265,\n        \"targetActivity\": 16843266,\n        \"alwaysRetainTaskState\": 16843267,\n        \"allowTaskReparenting\": 16843268,\n        \"searchButtonText\": 16843269,\n        \"colorForegroundInverse\": 16843270,\n        \"textAppearanceButton\": 16843271,\n        \"listSeparatorTextViewStyle\": 16843272,\n        \"streamType\": 16843273,\n        \"clipOrientation\": 16843274,\n        \"centerColor\": 16843275,\n        \"minSdkVersion\": 16843276,\n        \"windowFullscreen\": 16843277,\n        \"unselectedAlpha\": 16843278,\n        \"progressBarStyleSmallTitle\": 16843279,\n        \"ratingBarStyleIndicator\": 16843280,\n        \"apiKey\": 16843281,\n        \"textColorTertiary\": 16843282,\n        \"textColorTertiaryInverse\": 16843283,\n        \"listDivider\": 16843284,\n        \"soundEffectsEnabled\": 16843285,\n        \"keepScreenOn\": 16843286,\n        \"lineSpacingExtra\": 16843287,\n        \"lineSpacingMultiplier\": 16843288,\n        \"listChoiceIndicatorSingle\": 16843289,\n        \"listChoiceIndicatorMultiple\": 16843290,\n        \"versionCode\": 16843291,\n        \"versionName\": 16843292,\n        \"marqueeRepeatLimit\": 16843293,\n        \"windowNoDisplay\": 16843294,\n        \"backgroundDimEnabled\": 16843295,\n        \"inputType\": 16843296,\n        \"isDefault\": 16843297,\n        \"windowDisablePreview\": 16843298,\n        \"privateImeOptions\": 16843299,\n        \"editorExtras\": 16843300,\n        \"settingsActivity\": 16843301,\n        \"fastScrollEnabled\": 16843302,\n        \"reqTouchScreen\": 16843303,\n        \"reqKeyboardType\": 16843304,\n        \"reqHardKeyboard\": 16843305,\n        \"reqNavigation\": 16843306,\n        \"windowSoftInputMode\": 16843307,\n        \"imeFullscreenBackground\": 16843308,\n        \"noHistory\": 16843309,\n        \"headerDividersEnabled\": 16843310,\n        \"footerDividersEnabled\": 16843311,\n        \"candidatesTextStyleSpans\": 16843312,\n        \"smoothScrollbar\": 16843313,\n        \"reqFiveWayNav\": 16843314,\n        \"keyBackground\": 16843315,\n        \"keyTextSize\": 16843316,\n        \"labelTextSize\": 16843317,\n        \"keyTextColor\": 16843318,\n        \"keyPreviewLayout\": 16843319,\n        \"keyPreviewOffset\": 16843320,\n        \"keyPreviewHeight\": 16843321,\n        \"verticalCorrection\": 16843322,\n        \"popupLayout\": 16843323,\n        \"state_long_pressable\": 16843324,\n        \"keyWidth\": 16843325,\n        \"keyHeight\": 16843326,\n        \"horizontalGap\": 16843327,\n        \"verticalGap\": 16843328,\n        \"rowEdgeFlags\": 16843329,\n        \"codes\": 16843330,\n        \"popupKeyboard\": 16843331,\n        \"popupCharacters\": 16843332,\n        \"keyEdgeFlags\": 16843333,\n        \"isModifier\": 16843334,\n        \"isSticky\": 16843335,\n        \"isRepeatable\": 16843336,\n        \"iconPreview\": 16843337,\n        \"keyOutputText\": 16843338,\n        \"keyLabel\": 16843339,\n        \"keyIcon\": 16843340,\n        \"keyboardMode\": 16843341,\n        \"isScrollContainer\": 16843342,\n        \"fillEnabled\": 16843343,\n        \"updatePeriodMillis\": 16843344,\n        \"initialLayout\": 16843345,\n        \"voiceSearchMode\": 16843346,\n        \"voiceLanguageModel\": 16843347,\n        \"voicePromptText\": 16843348,\n        \"voiceLanguage\": 16843349,\n        \"voiceMaxResults\": 16843350,\n        \"bottomOffset\": 16843351,\n        \"topOffset\": 16843352,\n        \"allowSingleTap\": 16843353,\n        \"handle\": 16843354,\n        \"content\": 16843355,\n        \"animateOnClick\": 16843356,\n        \"configure\": 16843357,\n        \"hapticFeedbackEnabled\": 16843358,\n        \"innerRadius\": 16843359,\n        \"thickness\": 16843360,\n        \"sharedUserLabel\": 16843361,\n        \"dropDownWidth\": 16843362,\n        \"dropDownAnchor\": 16843363,\n        \"imeOptions\": 16843364,\n        \"imeActionLabel\": 16843365,\n        \"imeActionId\": 16843366,\n        \"imeExtractEnterAnimation\": 16843368,\n        \"imeExtractExitAnimation\": 16843369,\n        \"tension\": 16843370,\n        \"extraTension\": 16843371,\n        \"anyDensity\": 16843372,\n        \"searchSuggestThreshold\": 16843373,\n        \"includeInGlobalSearch\": 16843374,\n        \"onClick\": 16843375,\n        \"targetSdkVersion\": 16843376,\n        \"maxSdkVersion\": 16843377,\n        \"testOnly\": 16843378,\n        \"contentDescription\": 16843379,\n        \"gestureStrokeWidth\": 16843380,\n        \"gestureColor\": 16843381,\n        \"uncertainGestureColor\": 16843382,\n        \"fadeOffset\": 16843383,\n        \"fadeDuration\": 16843384,\n        \"gestureStrokeType\": 16843385,\n        \"gestureStrokeLengthThreshold\": 16843386,\n        \"gestureStrokeSquarenessThreshold\": 16843387,\n        \"gestureStrokeAngleThreshold\": 16843388,\n        \"eventsInterceptionEnabled\": 16843389,\n        \"fadeEnabled\": 16843390,\n        \"backupAgent\": 16843391,\n        \"allowBackup\": 16843392,\n        \"glEsVersion\": 16843393,\n        \"queryAfterZeroResults\": 16843394,\n        \"dropDownHeight\": 16843395,\n        \"smallScreens\": 16843396,\n        \"normalScreens\": 16843397,\n        \"largeScreens\": 16843398,\n        \"progressBarStyleInverse\": 16843399,\n        \"progressBarStyleSmallInverse\": 16843400,\n        \"progressBarStyleLargeInverse\": 16843401,\n        \"searchSettingsDescription\": 16843402,\n        \"textColorPrimaryInverseDisableOnly\": 16843403,\n        \"autoUrlDetect\": 16843404,\n        \"resizeable\": 16843405,\n        \"required\": 16843406,\n        \"accountType\": 16843407,\n        \"contentAuthority\": 16843408,\n        \"userVisible\": 16843409,\n        \"windowShowWallpaper\": 16843410,\n        \"wallpaperOpenEnterAnimation\": 16843411,\n        \"wallpaperOpenExitAnimation\": 16843412,\n        \"wallpaperCloseEnterAnimation\": 16843413,\n        \"wallpaperCloseExitAnimation\": 16843414,\n        \"wallpaperIntraOpenEnterAnimation\": 16843415,\n        \"wallpaperIntraOpenExitAnimation\": 16843416,\n        \"wallpaperIntraCloseEnterAnimation\": 16843417,\n        \"wallpaperIntraCloseExitAnimation\": 16843418,\n        \"supportsUploading\": 16843419,\n        \"killAfterRestore\": 16843420,\n        \"restoreNeedsApplication\": 16843421,\n        \"smallIcon\": 16843422,\n        \"accountPreferences\": 16843423,\n        \"textAppearanceSearchResultSubtitle\": 16843424,\n        \"textAppearanceSearchResultTitle\": 16843425,\n        \"summaryColumn\": 16843426,\n        \"detailColumn\": 16843427,\n        \"detailSocialSummary\": 16843428,\n        \"thumbnail\": 16843429,\n        \"detachWallpaper\": 16843430,\n        \"finishOnCloseSystemDialogs\": 16843431,\n        \"scrollbarFadeDuration\": 16843432,\n        \"scrollbarDefaultDelayBeforeFade\": 16843433,\n        \"fadeScrollbars\": 16843434,\n        \"colorBackgroundCacheHint\": 16843435,\n        \"dropDownHorizontalOffset\": 16843436,\n        \"dropDownVerticalOffset\": 16843437,\n        \"quickContactBadgeStyleWindowSmall\": 16843438,\n        \"quickContactBadgeStyleWindowMedium\": 16843439,\n        \"quickContactBadgeStyleWindowLarge\": 16843440,\n        \"quickContactBadgeStyleSmallWindowSmall\": 16843441,\n        \"quickContactBadgeStyleSmallWindowMedium\": 16843442,\n        \"quickContactBadgeStyleSmallWindowLarge\": 16843443,\n        \"author\": 16843444,\n        \"autoStart\": 16843445,\n        \"expandableListViewWhiteStyle\": 16843446,\n        \"installLocation\": 16843447,\n        \"vmSafeMode\": 16843448,\n        \"webTextViewStyle\": 16843449,\n        \"restoreAnyVersion\": 16843450,\n        \"tabStripLeft\": 16843451,\n        \"tabStripRight\": 16843452,\n        \"tabStripEnabled\": 16843453,\n        \"logo\": 16843454,\n        \"xlargeScreens\": 16843455,\n        \"immersive\": 16843456,\n        \"overScrollMode\": 16843457,\n        \"overScrollHeader\": 16843458,\n        \"overScrollFooter\": 16843459,\n        \"filterTouchesWhenObscured\": 16843460,\n        \"textSelectHandleLeft\": 16843461,\n        \"textSelectHandleRight\": 16843462,\n        \"textSelectHandle\": 16843463,\n        \"textSelectHandleWindowStyle\": 16843464,\n        \"popupAnimationStyle\": 16843465,\n        \"screenSize\": 16843466,\n        \"screenDensity\": 16843467,\n        \"allContactsName\": 16843468,\n        \"windowActionBar\": 16843469,\n        \"actionBarStyle\": 16843470,\n        \"navigationMode\": 16843471,\n        \"displayOptions\": 16843472,\n        \"subtitle\": 16843473,\n        \"customNavigationLayout\": 16843474,\n        \"hardwareAccelerated\": 16843475,\n        \"measureWithLargestChild\": 16843476,\n        \"animateFirstView\": 16843477,\n        \"dropDownSpinnerStyle\": 16843478,\n        \"actionDropDownStyle\": 16843479,\n        \"actionButtonStyle\": 16843480,\n        \"showAsAction\": 16843481,\n        \"previewImage\": 16843482,\n        \"actionModeBackground\": 16843483,\n        \"actionModeCloseDrawable\": 16843484,\n        \"windowActionModeOverlay\": 16843485,\n        \"valueFrom\": 16843486,\n        \"valueTo\": 16843487,\n        \"valueType\": 16843488,\n        \"propertyName\": 16843489,\n        \"ordering\": 16843490,\n        \"fragment\": 16843491,\n        \"windowActionBarOverlay\": 16843492,\n        \"fragmentOpenEnterAnimation\": 16843493,\n        \"fragmentOpenExitAnimation\": 16843494,\n        \"fragmentCloseEnterAnimation\": 16843495,\n        \"fragmentCloseExitAnimation\": 16843496,\n        \"fragmentFadeEnterAnimation\": 16843497,\n        \"fragmentFadeExitAnimation\": 16843498,\n        \"actionBarSize\": 16843499,\n        \"imeSubtypeLocale\": 16843500,\n        \"imeSubtypeMode\": 16843501,\n        \"imeSubtypeExtraValue\": 16843502,\n        \"splitMotionEvents\": 16843503,\n        \"listChoiceBackgroundIndicator\": 16843504,\n        \"spinnerMode\": 16843505,\n        \"animateLayoutChanges\": 16843506,\n        \"actionBarTabStyle\": 16843507,\n        \"actionBarTabBarStyle\": 16843508,\n        \"actionBarTabTextStyle\": 16843509,\n        \"actionOverflowButtonStyle\": 16843510,\n        \"actionModeCloseButtonStyle\": 16843511,\n        \"titleTextStyle\": 16843512,\n        \"subtitleTextStyle\": 16843513,\n        \"iconifiedByDefault\": 16843514,\n        \"actionLayout\": 16843515,\n        \"actionViewClass\": 16843516,\n        \"activatedBackgroundIndicator\": 16843517,\n        \"state_activated\": 16843518,\n        \"listPopupWindowStyle\": 16843519,\n        \"popupMenuStyle\": 16843520,\n        \"textAppearanceLargePopupMenu\": 16843521,\n        \"textAppearanceSmallPopupMenu\": 16843522,\n        \"breadCrumbTitle\": 16843523,\n        \"breadCrumbShortTitle\": 16843524,\n        \"listDividerAlertDialog\": 16843525,\n        \"textColorAlertDialogListItem\": 16843526,\n        \"loopViews\": 16843527,\n        \"dialogTheme\": 16843528,\n        \"alertDialogTheme\": 16843529,\n        \"dividerVertical\": 16843530,\n        \"homeAsUpIndicator\": 16843531,\n        \"enterFadeDuration\": 16843532,\n        \"exitFadeDuration\": 16843533,\n        \"selectableItemBackground\": 16843534,\n        \"autoAdvanceViewId\": 16843535,\n        \"useIntrinsicSizeAsMinimum\": 16843536,\n        \"actionModeCutDrawable\": 16843537,\n        \"actionModeCopyDrawable\": 16843538,\n        \"actionModePasteDrawable\": 16843539,\n        \"textEditPasteWindowLayout\": 16843540,\n        \"textEditNoPasteWindowLayout\": 16843541,\n        \"textIsSelectable\": 16843542,\n        \"windowEnableSplitTouch\": 16843543,\n        \"indeterminateProgressStyle\": 16843544,\n        \"progressBarPadding\": 16843545,\n        \"animationResolution\": 16843546,\n        \"state_accelerated\": 16843547,\n        \"baseline\": 16843548,\n        \"homeLayout\": 16843549,\n        \"opacity\": 16843550,\n        \"alpha\": 16843551,\n        \"transformPivotX\": 16843552,\n        \"transformPivotY\": 16843553,\n        \"translationX\": 16843554,\n        \"translationY\": 16843555,\n        \"scaleX\": 16843556,\n        \"scaleY\": 16843557,\n        \"rotation\": 16843558,\n        \"rotationX\": 16843559,\n        \"rotationY\": 16843560,\n        \"showDividers\": 16843561,\n        \"dividerPadding\": 16843562,\n        \"borderlessButtonStyle\": 16843563,\n        \"dividerHorizontal\": 16843564,\n        \"itemPadding\": 16843565,\n        \"buttonBarStyle\": 16843566,\n        \"buttonBarButtonStyle\": 16843567,\n        \"segmentedButtonStyle\": 16843568,\n        \"staticWallpaperPreview\": 16843569,\n        \"allowParallelSyncs\": 16843570,\n        \"isAlwaysSyncable\": 16843571,\n        \"verticalScrollbarPosition\": 16843572,\n        \"fastScrollAlwaysVisible\": 16843573,\n        \"fastScrollThumbDrawable\": 16843574,\n        \"fastScrollPreviewBackgroundLeft\": 16843575,\n        \"fastScrollPreviewBackgroundRight\": 16843576,\n        \"fastScrollTrackDrawable\": 16843577,\n        \"fastScrollOverlayPosition\": 16843578,\n        \"customTokens\": 16843579,\n        \"nextFocusForward\": 16843580,\n        \"firstDayOfWeek\": 16843581,\n        \"showWeekNumber\": 16843582,\n        \"minDate\": 16843583,\n        \"maxDate\": 16843584,\n        \"shownWeekCount\": 16843585,\n        \"selectedWeekBackgroundColor\": 16843586,\n        \"focusedMonthDateColor\": 16843587,\n        \"unfocusedMonthDateColor\": 16843588,\n        \"weekNumberColor\": 16843589,\n        \"weekSeparatorLineColor\": 16843590,\n        \"selectedDateVerticalBar\": 16843591,\n        \"weekDayTextAppearance\": 16843592,\n        \"dateTextAppearance\": 16843593,\n        \"solidColor\": 16843594,\n        \"spinnersShown\": 16843595,\n        \"calendarViewShown\": 16843596,\n        \"state_multiline\": 16843597,\n        \"detailsElementBackground\": 16843598,\n        \"textColorHighlightInverse\": 16843599,\n        \"textColorLinkInverse\": 16843600,\n        \"editTextColor\": 16843601,\n        \"editTextBackground\": 16843602,\n        \"horizontalScrollViewStyle\": 16843603,\n        \"layerType\": 16843604,\n        \"alertDialogIcon\": 16843605,\n        \"windowMinWidthMajor\": 16843606,\n        \"windowMinWidthMinor\": 16843607,\n        \"queryHint\": 16843608,\n        \"fastScrollTextColor\": 16843609,\n        \"largeHeap\": 16843610,\n        \"windowCloseOnTouchOutside\": 16843611,\n        \"datePickerStyle\": 16843612,\n        \"calendarViewStyle\": 16843613,\n        \"textEditSidePasteWindowLayout\": 16843614,\n        \"textEditSideNoPasteWindowLayout\": 16843615,\n        \"actionMenuTextAppearance\": 16843616,\n        \"actionMenuTextColor\": 16843617,\n        \"textCursorDrawable\": 16843618,\n        \"resizeMode\": 16843619,\n        \"requiresSmallestWidthDp\": 16843620,\n        \"compatibleWidthLimitDp\": 16843621,\n        \"largestWidthLimitDp\": 16843622,\n        \"state_hovered\": 16843623,\n        \"state_drag_can_accept\": 16843624,\n        \"state_drag_hovered\": 16843625,\n        \"stopWithTask\": 16843626,\n        \"switchTextOn\": 16843627,\n        \"switchTextOff\": 16843628,\n        \"switchPreferenceStyle\": 16843629,\n        \"switchTextAppearance\": 16843630,\n        \"track\": 16843631,\n        \"switchMinWidth\": 16843632,\n        \"switchPadding\": 16843633,\n        \"thumbTextPadding\": 16843634,\n        \"textSuggestionsWindowStyle\": 16843635,\n        \"textEditSuggestionItemLayout\": 16843636,\n        \"rowCount\": 16843637,\n        \"rowOrderPreserved\": 16843638,\n        \"columnCount\": 16843639,\n        \"columnOrderPreserved\": 16843640,\n        \"useDefaultMargins\": 16843641,\n        \"alignmentMode\": 16843642,\n        \"layout_row\": 16843643,\n        \"layout_rowSpan\": 16843644,\n        \"layout_columnSpan\": 16843645,\n        \"actionModeSelectAllDrawable\": 16843646,\n        \"isAuxiliary\": 16843647,\n        \"accessibilityEventTypes\": 16843648,\n        \"packageNames\": 16843649,\n        \"accessibilityFeedbackType\": 16843650,\n        \"notificationTimeout\": 16843651,\n        \"accessibilityFlags\": 16843652,\n        \"canRetrieveWindowContent\": 16843653,\n        \"listPreferredItemHeightLarge\": 16843654,\n        \"listPreferredItemHeightSmall\": 16843655,\n        \"actionBarSplitStyle\": 16843656,\n        \"actionProviderClass\": 16843657,\n        \"backgroundStacked\": 16843658,\n        \"backgroundSplit\": 16843659,\n        \"textAllCaps\": 16843660,\n        \"colorPressedHighlight\": 16843661,\n        \"colorLongPressedHighlight\": 16843662,\n        \"colorFocusedHighlight\": 16843663,\n        \"colorActivatedHighlight\": 16843664,\n        \"colorMultiSelectHighlight\": 16843665,\n        \"drawableStart\": 16843666,\n        \"drawableEnd\": 16843667,\n        \"actionModeStyle\": 16843668,\n        \"minResizeWidth\": 16843669,\n        \"minResizeHeight\": 16843670,\n        \"actionBarWidgetTheme\": 16843671,\n        \"uiOptions\": 16843672,\n        \"subtypeLocale\": 16843673,\n        \"subtypeExtraValue\": 16843674,\n        \"actionBarDivider\": 16843675,\n        \"actionBarItemBackground\": 16843676,\n        \"actionModeSplitBackground\": 16843677,\n        \"textAppearanceListItem\": 16843678,\n        \"textAppearanceListItemSmall\": 16843679,\n        \"targetDescriptions\": 16843680,\n        \"directionDescriptions\": 16843681,\n        \"overridesImplicitlyEnabledSubtype\": 16843682,\n        \"listPreferredItemPaddingLeft\": 16843683,\n        \"listPreferredItemPaddingRight\": 16843684,\n        \"requiresFadingEdge\": 16843685,\n        \"publicKey\": 16843686,\n        \"parentActivityName\": 16843687,\n        \"isolatedProcess\": 16843689,\n        \"importantForAccessibility\": 16843690,\n        \"keyboardLayout\": 16843691,\n        \"fontFamily\": 16843692,\n        \"mediaRouteButtonStyle\": 16843693,\n        \"mediaRouteTypes\": 16843694,\n        \"supportsRtl\": 16843695,\n        \"textDirection\": 16843696,\n        \"textAlignment\": 16843697,\n        \"layoutDirection\": 16843698,\n        \"paddingStart\": 16843699,\n        \"paddingEnd\": 16843700,\n        \"layout_marginStart\": 16843701,\n        \"layout_marginEnd\": 16843702,\n        \"layout_toStartOf\": 16843703,\n        \"layout_toEndOf\": 16843704,\n        \"layout_alignStart\": 16843705,\n        \"layout_alignEnd\": 16843706,\n        \"layout_alignParentStart\": 16843707,\n        \"layout_alignParentEnd\": 16843708,\n        \"listPreferredItemPaddingStart\": 16843709,\n        \"listPreferredItemPaddingEnd\": 16843710,\n        \"singleUser\": 16843711,\n        \"presentationTheme\": 16843712,\n        \"subtypeId\": 16843713,\n        \"initialKeyguardLayout\": 16843714,\n        \"widgetCategory\": 16843716,\n        \"permissionGroupFlags\": 16843717,\n        \"labelFor\": 16843718,\n        \"permissionFlags\": 16843719,\n        \"checkedTextViewStyle\": 16843720,\n        \"showOnLockScreen\": 16843721,\n        \"format12Hour\": 16843722,\n        \"format24Hour\": 16843723,\n        \"timeZone\": 16843724,\n        \"mipMap\": 16843725,\n        \"mirrorForRtl\": 16843726,\n        \"windowOverscan\": 16843727,\n        \"requiredForAllUsers\": 16843728,\n        \"indicatorStart\": 16843729,\n        \"indicatorEnd\": 16843730,\n        \"childIndicatorStart\": 16843731,\n        \"childIndicatorEnd\": 16843732,\n        \"restrictedAccountType\": 16843733,\n        \"requiredAccountType\": 16843734,\n        \"canRequestTouchExplorationMode\": 16843735,\n        \"canRequestEnhancedWebAccessibility\": 16843736,\n        \"canRequestFilterKeyEvents\": 16843737,\n        \"layoutMode\": 16843738,\n        \"keySet\": 16843739,\n        \"targetId\": 16843740,\n        \"fromScene\": 16843741,\n        \"toScene\": 16843742,\n        \"transition\": 16843743,\n        \"transitionOrdering\": 16843744,\n        \"fadingMode\": 16843745,\n        \"startDelay\": 16843746,\n        \"ssp\": 16843747,\n        \"sspPrefix\": 16843748,\n        \"sspPattern\": 16843749,\n        \"addPrintersActivity\": 16843750,\n        \"vendor\": 16843751,\n        \"category\": 16843752,\n        \"isAsciiCapable\": 16843753,\n        \"autoMirrored\": 16843754,\n        \"supportsSwitchingToNextInputMethod\": 16843755,\n        \"requireDeviceUnlock\": 16843756,\n        \"apduServiceBanner\": 16843757,\n        \"accessibilityLiveRegion\": 16843758,\n        \"windowTranslucentStatus\": 16843759,\n        \"windowTranslucentNavigation\": 16843760,\n        \"advancedPrintOptionsActivity\": 16843761,\n        \"banner\": 16843762,\n        \"windowSwipeToDismiss\": 16843763,\n        \"isGame\": 16843764,\n        \"allowEmbedded\": 16843765,\n        \"setupActivity\": 16843766,\n        \"fastScrollStyle\": 16843767,\n        \"windowContentTransitions\": 16843768,\n        \"windowContentTransitionManager\": 16843769,\n        \"translationZ\": 16843770,\n        \"tintMode\": 16843771,\n        \"controlX1\": 16843772,\n        \"controlY1\": 16843773,\n        \"controlX2\": 16843774,\n        \"controlY2\": 16843775,\n        \"transitionName\": 16843776,\n        \"transitionGroup\": 16843777,\n        \"viewportWidth\": 16843778,\n        \"viewportHeight\": 16843779,\n        \"fillColor\": 16843780,\n        \"pathData\": 16843781,\n        \"strokeColor\": 16843782,\n        \"strokeWidth\": 16843783,\n        \"trimPathStart\": 16843784,\n        \"trimPathEnd\": 16843785,\n        \"trimPathOffset\": 16843786,\n        \"strokeLineCap\": 16843787,\n        \"strokeLineJoin\": 16843788,\n        \"strokeMiterLimit\": 16843789,\n        \"colorControlNormal\": 16843817,\n        \"colorControlActivated\": 16843818,\n        \"colorButtonNormal\": 16843819,\n        \"colorControlHighlight\": 16843820,\n        \"persistableMode\": 16843821,\n        \"titleTextAppearance\": 16843822,\n        \"subtitleTextAppearance\": 16843823,\n        \"slideEdge\": 16843824,\n        \"actionBarTheme\": 16843825,\n        \"textAppearanceListItemSecondary\": 16843826,\n        \"colorPrimary\": 16843827,\n        \"colorPrimaryDark\": 16843828,\n        \"colorAccent\": 16843829,\n        \"nestedScrollingEnabled\": 16843830,\n        \"windowEnterTransition\": 16843831,\n        \"windowExitTransition\": 16843832,\n        \"windowSharedElementEnterTransition\": 16843833,\n        \"windowSharedElementExitTransition\": 16843834,\n        \"windowAllowReturnTransitionOverlap\": 16843835,\n        \"windowAllowEnterTransitionOverlap\": 16843836,\n        \"sessionService\": 16843837,\n        \"stackViewStyle\": 16843838,\n        \"switchStyle\": 16843839,\n        \"elevation\": 16843840,\n        \"excludeId\": 16843841,\n        \"excludeClass\": 16843842,\n        \"hideOnContentScroll\": 16843843,\n        \"actionOverflowMenuStyle\": 16843844,\n        \"documentLaunchMode\": 16843845,\n        \"maxRecents\": 16843846,\n        \"autoRemoveFromRecents\": 16843847,\n        \"stateListAnimator\": 16843848,\n        \"toId\": 16843849,\n        \"fromId\": 16843850,\n        \"reversible\": 16843851,\n        \"splitTrack\": 16843852,\n        \"targetName\": 16843853,\n        \"excludeName\": 16843854,\n        \"matchOrder\": 16843855,\n        \"windowDrawsSystemBarBackgrounds\": 16843856,\n        \"statusBarColor\": 16843857,\n        \"navigationBarColor\": 16843858,\n        \"contentInsetStart\": 16843859,\n        \"contentInsetEnd\": 16843860,\n        \"contentInsetLeft\": 16843861,\n        \"contentInsetRight\": 16843862,\n        \"paddingMode\": 16843863,\n        \"layout_rowWeight\": 16843864,\n        \"layout_columnWeight\": 16843865,\n        \"translateX\": 16843866,\n        \"translateY\": 16843867,\n        \"selectableItemBackgroundBorderless\": 16843868,\n        \"elegantTextHeight\": 16843869,\n        \"searchKeyphraseId\": 16843870,\n        \"searchKeyphrase\": 16843871,\n        \"searchKeyphraseSupportedLocales\": 16843872,\n        \"windowTransitionBackgroundFadeDuration\": 16843873,\n        \"overlapAnchor\": 16843874,\n        \"progressTint\": 16843875,\n        \"progressTintMode\": 16843876,\n        \"progressBackgroundTint\": 16843877,\n        \"progressBackgroundTintMode\": 16843878,\n        \"secondaryProgressTint\": 16843879,\n        \"secondaryProgressTintMode\": 16843880,\n        \"indeterminateTint\": 16843881,\n        \"indeterminateTintMode\": 16843882,\n        \"backgroundTint\": 16843883,\n        \"backgroundTintMode\": 16843884,\n        \"foregroundTint\": 16843885,\n        \"foregroundTintMode\": 16843886,\n        \"buttonTint\": 16843887,\n        \"buttonTintMode\": 16843888,\n        \"thumbTint\": 16843889,\n        \"thumbTintMode\": 16843890,\n        \"fullBackupOnly\": 16843891,\n        \"propertyXName\": 16843892,\n        \"propertyYName\": 16843893,\n        \"relinquishTaskIdentity\": 16843894,\n        \"tileModeX\": 16843895,\n        \"tileModeY\": 16843896,\n        \"actionModeShareDrawable\": 16843897,\n        \"actionModeFindDrawable\": 16843898,\n        \"actionModeWebSearchDrawable\": 16843899,\n        \"transitionVisibilityMode\": 16843900,\n        \"minimumHorizontalAngle\": 16843901,\n        \"minimumVerticalAngle\": 16843902,\n        \"maximumAngle\": 16843903,\n        \"searchViewStyle\": 16843904,\n        \"closeIcon\": 16843905,\n        \"goIcon\": 16843906,\n        \"searchIcon\": 16843907,\n        \"voiceIcon\": 16843908,\n        \"commitIcon\": 16843909,\n        \"suggestionRowLayout\": 16843910,\n        \"queryBackground\": 16843911,\n        \"submitBackground\": 16843912,\n        \"buttonBarPositiveButtonStyle\": 16843913,\n        \"buttonBarNeutralButtonStyle\": 16843914,\n        \"buttonBarNegativeButtonStyle\": 16843915,\n        \"popupElevation\": 16843916,\n        \"actionBarPopupTheme\": 16843917,\n        \"multiArch\": 16843918,\n        \"touchscreenBlocksFocus\": 16843919,\n        \"windowElevation\": 16843920,\n        \"launchTaskBehindTargetAnimation\": 16843921,\n        \"launchTaskBehindSourceAnimation\": 16843922,\n        \"restrictionType\": 16843923,\n        \"dayOfWeekBackground\": 16843924,\n        \"dayOfWeekTextAppearance\": 16843925,\n        \"headerMonthTextAppearance\": 16843926,\n        \"headerDayOfMonthTextAppearance\": 16843927,\n        \"headerYearTextAppearance\": 16843928,\n        \"yearListItemTextAppearance\": 16843929,\n        \"yearListSelectorColor\": 16843930,\n        \"calendarTextColor\": 16843931,\n        \"recognitionService\": 16843932,\n        \"timePickerStyle\": 16843933,\n        \"timePickerDialogTheme\": 16843934,\n        \"headerTimeTextAppearance\": 16843935,\n        \"headerAmPmTextAppearance\": 16843936,\n        \"numbersTextColor\": 16843937,\n        \"numbersBackgroundColor\": 16843938,\n        \"numbersSelectorColor\": 16843939,\n        \"amPmTextColor\": 16843940,\n        \"amPmBackgroundColor\": 16843941,\n        \"searchKeyphraseRecognitionFlags\": 16843942,\n        \"checkMarkTint\": 16843943,\n        \"checkMarkTintMode\": 16843944,\n        \"popupTheme\": 16843945,\n        \"toolbarStyle\": 16843946,\n        \"windowClipToOutline\": 16843947,\n        \"datePickerDialogTheme\": 16843948,\n        \"showText\": 16843949,\n        \"windowReturnTransition\": 16843950,\n        \"windowReenterTransition\": 16843951,\n        \"windowSharedElementReturnTransition\": 16843952,\n        \"windowSharedElementReenterTransition\": 16843953,\n        \"resumeWhilePausing\": 16843954,\n        \"datePickerMode\": 16843955,\n        \"timePickerMode\": 16843956,\n        \"inset\": 16843957,\n        \"letterSpacing\": 16843958,\n        \"fontFeatureSettings\": 16843959,\n        \"outlineProvider\": 16843960,\n        \"contentAgeHint\": 16843961,\n        \"country\": 16843962,\n        \"windowSharedElementsUseOverlay\": 16843963,\n        \"reparent\": 16843964,\n        \"reparentWithOverlay\": 16843965,\n        \"ambientShadowAlpha\": 16843966,\n        \"spotShadowAlpha\": 16843967,\n        \"navigationIcon\": 16843968,\n        \"navigationContentDescription\": 16843969,\n        \"fragmentExitTransition\": 16843970,\n        \"fragmentEnterTransition\": 16843971,\n        \"fragmentSharedElementEnterTransition\": 16843972,\n        \"fragmentReturnTransition\": 16843973,\n        \"fragmentSharedElementReturnTransition\": 16843974,\n        \"fragmentReenterTransition\": 16843975,\n        \"fragmentAllowEnterTransitionOverlap\": 16843976,\n        \"fragmentAllowReturnTransitionOverlap\": 16843977,\n        \"patternPathData\": 16843978,\n        \"strokeAlpha\": 16843979,\n        \"fillAlpha\": 16843980,\n        \"windowActivityTransitions\": 16843981,\n        \"colorEdgeEffect\": 16843982,\n        \"resizeClip\": 16843983,\n        \"collapseContentDescription\": 16843984,\n        \"accessibilityTraversalBefore\": 16843985,\n        \"accessibilityTraversalAfter\": 16843986,\n        \"dialogPreferredPadding\": 16843987,\n        \"searchHintIcon\": 16843988,\n        \"revisionCode\": 16843989,\n        \"drawableTint\": 16843990,\n        \"drawableTintMode\": 16843991,\n        \"fraction\": 16843992,\n        \"trackTint\": 16843993,\n        \"trackTintMode\": 16843994,\n        \"start\": 16843995,\n        \"end\": 16843996,\n        \"breakStrategy\": 16843997,\n        \"hyphenationFrequency\": 16843998,\n        \"allowUndo\": 16843999,\n        \"windowLightStatusBar\": 16844000,\n        \"numbersInnerTextColor\": 16844001,\n        \"colorBackgroundFloating\": 16844002,\n        \"titleTextColor\": 16844003,\n        \"subtitleTextColor\": 16844004,\n        \"thumbPosition\": 16844005,\n        \"scrollIndicators\": 16844006,\n        \"contextClickable\": 16844007,\n        \"fingerprintAuthDrawable\": 16844008,\n        \"logoDescription\": 16844009,\n        \"extractNativeLibs\": 16844010,\n        \"fullBackupContent\": 16844011,\n        \"usesCleartextTraffic\": 16844012,\n        \"lockTaskMode\": 16844013,\n        \"autoVerify\": 16844014,\n        \"showForAllUsers\": 16844015,\n        \"supportsAssist\": 16844016,\n        \"supportsLaunchVoiceAssistFromKeyguard\": 16844017,\n        \"listMenuViewStyle\": 16844018,\n        \"subMenuArrow\": 16844019,\n        \"defaultWidth\": 16844020,\n        \"defaultHeight\": 16844021,\n        \"resizeableActivity\": 16844022,\n        \"supportsPictureInPicture\": 16844023,\n        \"titleMargin\": 16844024,\n        \"titleMarginStart\": 16844025,\n        \"titleMarginEnd\": 16844026,\n        \"titleMarginTop\": 16844027,\n        \"titleMarginBottom\": 16844028,\n        \"maxButtonHeight\": 16844029,\n        \"buttonGravity\": 16844030,\n        \"collapseIcon\": 16844031,\n        \"level\": 16844032,\n        \"contextPopupMenuStyle\": 16844033,\n        \"textAppearancePopupMenuHeader\": 16844034,\n        \"windowBackgroundFallback\": 16844035,\n        \"defaultToDeviceProtectedStorage\": 16844036,\n        \"directBootAware\": 16844037,\n        \"preferenceFragmentStyle\": 16844038,\n        \"canControlMagnification\": 16844039,\n        \"languageTag\": 16844040,\n        \"pointerIcon\": 16844041,\n        \"tickMark\": 16844042,\n        \"tickMarkTint\": 16844043,\n        \"tickMarkTintMode\": 16844044,\n        \"canPerformGestures\": 16844045,\n        \"externalService\": 16844046,\n        \"supportsLocalInteraction\": 16844047,\n        \"startX\": 16844048,\n        \"startY\": 16844049,\n        \"endX\": 16844050,\n        \"endY\": 16844051,\n        \"offset\": 16844052,\n        \"use32bitAbi\": 16844053,\n        \"bitmap\": 16844054,\n        \"hotSpotX\": 16844055,\n        \"hotSpotY\": 16844056,\n        \"version\": 16844057,\n        \"backupInForeground\": 16844058,\n        \"countDown\": 16844059,\n        \"canRecord\": 16844060,\n        \"tunerCount\": 16844061,\n        \"fillType\": 16844062,\n        \"popupEnterTransition\": 16844063,\n        \"popupExitTransition\": 16844064,\n        \"forceHasOverlappingRendering\": 16844065,\n        \"contentInsetStartWithNavigation\": 16844066,\n        \"contentInsetEndWithActions\": 16844067,\n        \"numberPickerStyle\": 16844068,\n        \"enableVrMode\": 16844069,\n        \"hash\": 16844070,\n        \"networkSecurityConfig\": 16844071,\n        \"shortcutId\": 16844072,\n        \"shortcutShortLabel\": 16844073,\n        \"shortcutLongLabel\": 16844074,\n        \"shortcutDisabledMessage\": 16844075,\n        \"roundIcon\": 16844076,\n        \"contextUri\": 16844077,\n        \"contextDescription\": 16844078,\n        \"showMetadataInPreview\": 16844079,\n        \"colorSecondary\": 16844080,\n        \"visibleToInstantApps\": 16844081,\n        \"font\": 16844082,\n        \"fontWeight\": 16844083,\n        \"tooltipText\": 16844084,\n        \"autoSizeTextType\": 16844085,\n        \"autoSizeStepGranularity\": 16844086,\n        \"autoSizePresetSizes\": 16844087,\n        \"autoSizeMinTextSize\": 16844088,\n        \"min\": 16844089,\n        \"rotationAnimation\": 16844090,\n        \"layout_marginHorizontal\": 16844091,\n        \"layout_marginVertical\": 16844092,\n        \"paddingHorizontal\": 16844093,\n        \"paddingVertical\": 16844094,\n        \"fontStyle\": 16844095,\n        \"keyboardNavigationCluster\": 16844096,\n        \"targetProcesses\": 16844097,\n        \"nextClusterForward\": 16844098,\n        \"colorError\": 16844099,\n        \"focusedByDefault\": 16844100,\n        \"appCategory\": 16844101,\n        \"autoSizeMaxTextSize\": 16844102,\n        \"recreateOnConfigChanges\": 16844103,\n        \"certDigest\": 16844104,\n        \"splitName\": 16844105,\n        \"colorMode\": 16844106,\n        \"isolatedSplits\": 16844107,\n        \"targetSandboxVersion\": 16844108,\n        \"canRequestFingerprintGestures\": 16844109,\n        \"alphabeticModifiers\": 16844110,\n        \"numericModifiers\": 16844111,\n        \"fontProviderAuthority\": 16844112,\n        \"fontProviderQuery\": 16844113,\n        \"primaryContentAlpha\": 16844114,\n        \"secondaryContentAlpha\": 16844115,\n        \"requiredFeature\": 16844116,\n        \"requiredNotFeature\": 16844117,\n        \"autofillHints\": 16844118,\n        \"fontProviderPackage\": 16844119,\n        \"importantForAutofill\": 16844120,\n        \"recycleEnabled\": 16844121,\n        \"isStatic\": 16844122,\n        \"isFeatureSplit\": 16844123,\n        \"singleLineTitle\": 16844124,\n        \"fontProviderCerts\": 16844125,\n        \"iconTint\": 16844126,\n        \"iconTintMode\": 16844127,\n        \"maxAspectRatio\": 16844128,\n        \"iconSpaceReserved\": 16844129,\n        \"defaultFocusHighlightEnabled\": 16844130,\n        \"persistentWhenFeatureAvailable\": 16844131,\n        \"windowSplashscreenContent\": 16844132,\n        \"requiredSystemPropertyName\": 16844133,\n        \"requiredSystemPropertyValue\": 16844134,\n        \"justificationMode\": 16844135,\n        \"autofilledHighlight\": 16844136,\n        \"showWhenLocked\": 16844137,\n        \"turnScreenOn\": 16844138,\n        \"classLoader\": 16844139,\n        \"windowLightNavigationBar\": 16844140,\n        \"navigationBarDividerColor\": 16844141\n    },\n    \"id\": {\n        \"background\": 16908288,\n        \"checkbox\": 16908289,\n        \"content\": 16908290,\n        \"edit\": 16908291,\n        \"empty\": 16908292,\n        \"hint\": 16908293,\n        \"icon\": 16908294,\n        \"icon1\": 16908295,\n        \"icon2\": 16908296,\n        \"input\": 16908297,\n        \"list\": 16908298,\n        \"message\": 16908299,\n        \"primary\": 16908300,\n        \"progress\": 16908301,\n        \"selectedIcon\": 16908302,\n        \"secondaryProgress\": 16908303,\n        \"summary\": 16908304,\n        \"tabcontent\": 16908305,\n        \"tabhost\": 16908306,\n        \"tabs\": 16908307,\n        \"text1\": 16908308,\n        \"text2\": 16908309,\n        \"title\": 16908310,\n        \"toggle\": 16908311,\n        \"widget_frame\": 16908312,\n        \"button1\": 16908313,\n        \"button2\": 16908314,\n        \"button3\": 16908315,\n        \"extractArea\": 16908316,\n        \"candidatesArea\": 16908317,\n        \"inputArea\": 16908318,\n        \"selectAll\": 16908319,\n        \"cut\": 16908320,\n        \"copy\": 16908321,\n        \"paste\": 16908322,\n        \"copyUrl\": 16908323,\n        \"switchInputMethod\": 16908324,\n        \"inputExtractEditText\": 16908325,\n        \"keyboardView\": 16908326,\n        \"closeButton\": 16908327,\n        \"startSelectingText\": 16908328,\n        \"stopSelectingText\": 16908329,\n        \"addToDictionary\": 16908330,\n        \"custom\": 16908331,\n        \"home\": 16908332,\n        \"selectTextMode\": 16908333,\n        \"mask\": 16908334,\n        \"statusBarBackground\": 16908335,\n        \"navigationBarBackground\": 16908336,\n        \"pasteAsPlainText\": 16908337,\n        \"undo\": 16908338,\n        \"redo\": 16908339,\n        \"replaceText\": 16908340,\n        \"shareText\": 16908341,\n        \"accessibilityActionShowOnScreen\": 16908342,\n        \"accessibilityActionScrollToPosition\": 16908343,\n        \"accessibilityActionScrollUp\": 16908344,\n        \"accessibilityActionScrollLeft\": 16908345,\n        \"accessibilityActionScrollDown\": 16908346,\n        \"accessibilityActionScrollRight\": 16908347,\n        \"accessibilityActionContextClick\": 16908348,\n        \"accessibilityActionSetProgress\": 16908349,\n        \"icon_frame\": 16908350,\n        \"list_container\": 16908351,\n        \"switch_widget\": 16908352,\n        \"textAssist\": 16908353,\n        \"accessibilityActionMoveWindow\": 16908354,\n        \"autofill\": 16908355\n    },\n    \"style\": {\n        \"Animation\": 16973824,\n        \"Animation.Activity\": 16973825,\n        \"Animation.Dialog\": 16973826,\n        \"Animation.Translucent\": 16973827,\n        \"Animation.Toast\": 16973828,\n        \"Theme\": 16973829,\n        \"Theme.NoTitleBar\": 16973830,\n        \"Theme.NoTitleBar.Fullscreen\": 16973831,\n        \"Theme.Black\": 16973832,\n        \"Theme.Black.NoTitleBar\": 16973833,\n        \"Theme.Black.NoTitleBar.Fullscreen\": 16973834,\n        \"Theme.Dialog\": 16973835,\n        \"Theme.Light\": 16973836,\n        \"Theme.Light.NoTitleBar\": 16973837,\n        \"Theme.Light.NoTitleBar.Fullscreen\": 16973838,\n        \"Theme.Translucent\": 16973839,\n        \"Theme.Translucent.NoTitleBar\": 16973840,\n        \"Theme.Translucent.NoTitleBar.Fullscreen\": 16973841,\n        \"Widget\": 16973842,\n        \"Widget.AbsListView\": 16973843,\n        \"Widget.Button\": 16973844,\n        \"Widget.Button.Inset\": 16973845,\n        \"Widget.Button.Small\": 16973846,\n        \"Widget.Button.Toggle\": 16973847,\n        \"Widget.CompoundButton\": 16973848,\n        \"Widget.CompoundButton.CheckBox\": 16973849,\n        \"Widget.CompoundButton.RadioButton\": 16973850,\n        \"Widget.CompoundButton.Star\": 16973851,\n        \"Widget.ProgressBar\": 16973852,\n        \"Widget.ProgressBar.Large\": 16973853,\n        \"Widget.ProgressBar.Small\": 16973854,\n        \"Widget.ProgressBar.Horizontal\": 16973855,\n        \"Widget.SeekBar\": 16973856,\n        \"Widget.RatingBar\": 16973857,\n        \"Widget.TextView\": 16973858,\n        \"Widget.EditText\": 16973859,\n        \"Widget.ExpandableListView\": 16973860,\n        \"Widget.ImageWell\": 16973861,\n        \"Widget.ImageButton\": 16973862,\n        \"Widget.AutoCompleteTextView\": 16973863,\n        \"Widget.Spinner\": 16973864,\n        \"Widget.TextView.PopupMenu\": 16973865,\n        \"Widget.TextView.SpinnerItem\": 16973866,\n        \"Widget.DropDownItem\": 16973867,\n        \"Widget.DropDownItem.Spinner\": 16973868,\n        \"Widget.ScrollView\": 16973869,\n        \"Widget.ListView\": 16973870,\n        \"Widget.ListView.White\": 16973871,\n        \"Widget.ListView.DropDown\": 16973872,\n        \"Widget.ListView.Menu\": 16973873,\n        \"Widget.GridView\": 16973874,\n        \"Widget.WebView\": 16973875,\n        \"Widget.TabWidget\": 16973876,\n        \"Widget.Gallery\": 16973877,\n        \"Widget.PopupWindow\": 16973878,\n        \"MediaButton\": 16973879,\n        \"MediaButton.Previous\": 16973880,\n        \"MediaButton.Next\": 16973881,\n        \"MediaButton.Play\": 16973882,\n        \"MediaButton.Ffwd\": 16973883,\n        \"MediaButton.Rew\": 16973884,\n        \"MediaButton.Pause\": 16973885,\n        \"TextAppearance\": 16973886,\n        \"TextAppearance.Inverse\": 16973887,\n        \"TextAppearance.Theme\": 16973888,\n        \"TextAppearance.DialogWindowTitle\": 16973889,\n        \"TextAppearance.Large\": 16973890,\n        \"TextAppearance.Large.Inverse\": 16973891,\n        \"TextAppearance.Medium\": 16973892,\n        \"TextAppearance.Medium.Inverse\": 16973893,\n        \"TextAppearance.Small\": 16973894,\n        \"TextAppearance.Small.Inverse\": 16973895,\n        \"TextAppearance.Theme.Dialog\": 16973896,\n        \"TextAppearance.Widget\": 16973897,\n        \"TextAppearance.Widget.Button\": 16973898,\n        \"TextAppearance.Widget.IconMenu.Item\": 16973899,\n        \"TextAppearance.Widget.EditText\": 16973900,\n        \"TextAppearance.Widget.TabWidget\": 16973901,\n        \"TextAppearance.Widget.TextView\": 16973902,\n        \"TextAppearance.Widget.TextView.PopupMenu\": 16973903,\n        \"TextAppearance.Widget.DropDownHint\": 16973904,\n        \"TextAppearance.Widget.DropDownItem\": 16973905,\n        \"TextAppearance.Widget.TextView.SpinnerItem\": 16973906,\n        \"TextAppearance.WindowTitle\": 16973907,\n        \"Theme.InputMethod\": 16973908,\n        \"Theme.NoDisplay\": 16973909,\n        \"Animation.InputMethod\": 16973910,\n        \"Widget.KeyboardView\": 16973911,\n        \"ButtonBar\": 16973912,\n        \"Theme.Panel\": 16973913,\n        \"Theme.Light.Panel\": 16973914,\n        \"Widget.ProgressBar.Inverse\": 16973915,\n        \"Widget.ProgressBar.Large.Inverse\": 16973916,\n        \"Widget.ProgressBar.Small.Inverse\": 16973917,\n        \"Theme.Wallpaper\": 16973918,\n        \"Theme.Wallpaper.NoTitleBar\": 16973919,\n        \"Theme.Wallpaper.NoTitleBar.Fullscreen\": 16973920,\n        \"Theme.WallpaperSettings\": 16973921,\n        \"Theme.Light.WallpaperSettings\": 16973922,\n        \"TextAppearance.SearchResult.Title\": 16973923,\n        \"TextAppearance.SearchResult.Subtitle\": 16973924,\n        \"TextAppearance.StatusBar.Title\": 16973925,\n        \"TextAppearance.StatusBar.Icon\": 16973926,\n        \"TextAppearance.StatusBar.EventContent\": 16973927,\n        \"TextAppearance.StatusBar.EventContent.Title\": 16973928,\n        \"Theme.WithActionBar\": 16973929,\n        \"Theme.NoTitleBar.OverlayActionModes\": 16973930,\n        \"Theme.Holo\": 16973931,\n        \"Theme.Holo.NoActionBar\": 16973932,\n        \"Theme.Holo.NoActionBar.Fullscreen\": 16973933,\n        \"Theme.Holo.Light\": 16973934,\n        \"Theme.Holo.Dialog\": 16973935,\n        \"Theme.Holo.Dialogger.MinWidth\": 16973936,\n        \"Theme.Holo.Dialogger.NoActionBar\": 16973937,\n        \"Theme.Holo.Dialogger.NoActionBar.MinWidth\": 16973938,\n        \"Theme.Holo.Light.Dialog\": 16973939,\n        \"Theme.Holo.Light.Dialogger.MinWidth\": 16973940,\n        \"Theme.Holo.Light.Dialogger.NoActionBar\": 16973941,\n        \"Theme.Holo.Light.Dialogger.NoActionBar.MinWidth\": 16973942,\n        \"Theme.Holo.DialogWhenLarge\": 16973943,\n        \"Theme.Holo.DialogWhenLarge.NoActionBar\": 16973944,\n        \"Theme.Holo.Light.DialogWhenLarge\": 16973945,\n        \"Theme.Holo.Light.DialogWhenLarge.NoActionBar\": 16973946,\n        \"Theme.Holo.Panel\": 16973947,\n        \"Theme.Holo.Light.Panel\": 16973948,\n        \"Theme.Holo.Wallpaper\": 16973949,\n        \"Theme.Holo.Wallpaper.NoTitleBar\": 16973950,\n        \"Theme.Holo.InputMethod\": 16973951,\n        \"TextAppearance.Widget.PopupMenu.Large\": 16973952,\n        \"TextAppearance.Widget.PopupMenu.Small\": 16973953,\n        \"Widget.ActionBar\": 16973954,\n        \"Widget.Spinner.DropDown\": 16973955,\n        \"Widget.ActionButton\": 16973956,\n        \"Widget.ListPopupWindow\": 16973957,\n        \"Widget.PopupMenu\": 16973958,\n        \"Widget.ActionButton.Overflow\": 16973959,\n        \"Widget.ActionButton.CloseMode\": 16973960,\n        \"Widget.FragmentBreadCrumbs\": 16973961,\n        \"Widget.Holo\": 16973962,\n        \"Widget.Holo.Button\": 16973963,\n        \"Widget.Holo.Button.Small\": 16973964,\n        \"Widget.Holo.Button.Inset\": 16973965,\n        \"Widget.Holo.Button.Toggle\": 16973966,\n        \"Widget.Holo.TextView\": 16973967,\n        \"Widget.Holo.AutoCompleteTextView\": 16973968,\n        \"Widget.Holo.CompoundButton.CheckBox\": 16973969,\n        \"Widget.Holo.ListView.DropDown\": 16973970,\n        \"Widget.Holo.EditText\": 16973971,\n        \"Widget.Holo.ExpandableListView\": 16973972,\n        \"Widget.Holo.GridView\": 16973973,\n        \"Widget.Holo.ImageButton\": 16973974,\n        \"Widget.Holo.ListView\": 16973975,\n        \"Widget.Holo.PopupWindow\": 16973976,\n        \"Widget.Holo.ProgressBar\": 16973977,\n        \"Widget.Holo.ProgressBar.Horizontal\": 16973978,\n        \"Widget.Holo.ProgressBar.Small\": 16973979,\n        \"Widget.Holo.ProgressBar.Small.Title\": 16973980,\n        \"Widget.Holo.ProgressBar.Large\": 16973981,\n        \"Widget.Holo.SeekBar\": 16973982,\n        \"Widget.Holo.RatingBar\": 16973983,\n        \"Widget.Holo.RatingBar.Indicator\": 16973984,\n        \"Widget.Holo.RatingBar.Small\": 16973985,\n        \"Widget.Holo.CompoundButton.RadioButton\": 16973986,\n        \"Widget.Holo.ScrollView\": 16973987,\n        \"Widget.Holo.HorizontalScrollView\": 16973988,\n        \"Widget.Holo.Spinner\": 16973989,\n        \"Widget.Holo.CompoundButton.Star\": 16973990,\n        \"Widget.Holo.TabWidget\": 16973991,\n        \"Widget.Holo.WebTextView\": 16973992,\n        \"Widget.Holo.WebView\": 16973993,\n        \"Widget.Holo.DropDownItem\": 16973994,\n        \"Widget.Holo.DropDownItem.Spinner\": 16973995,\n        \"Widget.Holo.TextView.SpinnerItem\": 16973996,\n        \"Widget.Holo.ListPopupWindow\": 16973997,\n        \"Widget.Holo.PopupMenu\": 16973998,\n        \"Widget.Holo.ActionButton\": 16973999,\n        \"Widget.Holo.ActionButton.Overflow\": 16974000,\n        \"Widget.Holo.ActionButton.TextButton\": 16974001,\n        \"Widget.Holo.ActionMode\": 16974002,\n        \"Widget.Holo.ActionButton.CloseMode\": 16974003,\n        \"Widget.Holo.ActionBar\": 16974004,\n        \"Widget.Holo.Light\": 16974005,\n        \"Widget.Holo.Light.Button\": 16974006,\n        \"Widget.Holo.Light.Button.Small\": 16974007,\n        \"Widget.Holo.Light.Button.Inset\": 16974008,\n        \"Widget.Holo.Light.Button.Toggle\": 16974009,\n        \"Widget.Holo.Light.TextView\": 16974010,\n        \"Widget.Holo.Light.AutoCompleteTextView\": 16974011,\n        \"Widget.Holo.Light.CompoundButton.CheckBox\": 16974012,\n        \"Widget.Holo.Light.ListView.DropDown\": 16974013,\n        \"Widget.Holo.Light.EditText\": 16974014,\n        \"Widget.Holo.Light.ExpandableListView\": 16974015,\n        \"Widget.Holo.Light.GridView\": 16974016,\n        \"Widget.Holo.Light.ImageButton\": 16974017,\n        \"Widget.Holo.Light.ListView\": 16974018,\n        \"Widget.Holo.Light.PopupWindow\": 16974019,\n        \"Widget.Holo.Light.ProgressBar\": 16974020,\n        \"Widget.Holo.Light.ProgressBar.Horizontal\": 16974021,\n        \"Widget.Holo.Light.ProgressBar.Small\": 16974022,\n        \"Widget.Holo.Light.ProgressBar.Small.Title\": 16974023,\n        \"Widget.Holo.Light.ProgressBar.Large\": 16974024,\n        \"Widget.Holo.Light.ProgressBar.Inverse\": 16974025,\n        \"Widget.Holo.Light.ProgressBar.Small.Inverse\": 16974026,\n        \"Widget.Holo.Light.ProgressBar.Large.Inverse\": 16974027,\n        \"Widget.Holo.Light.SeekBar\": 16974028,\n        \"Widget.Holo.Light.RatingBar\": 16974029,\n        \"Widget.Holo.Light.RatingBar.Indicator\": 16974030,\n        \"Widget.Holo.Light.RatingBar.Small\": 16974031,\n        \"Widget.Holo.Light.CompoundButton.RadioButton\": 16974032,\n        \"Widget.Holo.Light.ScrollView\": 16974033,\n        \"Widget.Holo.Light.HorizontalScrollView\": 16974034,\n        \"Widget.Holo.Light.Spinner\": 16974035,\n        \"Widget.Holo.Light.CompoundButton.Star\": 16974036,\n        \"Widget.Holo.Light.TabWidget\": 16974037,\n        \"Widget.Holo.Light.WebTextView\": 16974038,\n        \"Widget.Holo.Light.WebView\": 16974039,\n        \"Widget.Holo.Light.DropDownItem\": 16974040,\n        \"Widget.Holo.Light.DropDownItem.Spinner\": 16974041,\n        \"Widget.Holo.Light.TextView.SpinnerItem\": 16974042,\n        \"Widget.Holo.Light.ListPopupWindow\": 16974043,\n        \"Widget.Holo.Light.PopupMenu\": 16974044,\n        \"Widget.Holo.Light.ActionButton\": 16974045,\n        \"Widget.Holo.Light.ActionButton.Overflow\": 16974046,\n        \"Widget.Holo.Light.ActionMode\": 16974047,\n        \"Widget.Holo.Light.ActionButton.CloseMode\": 16974048,\n        \"Widget.Holo.Light.ActionBar\": 16974049,\n        \"Widget.Holo.Button.Borderless\": 16974050,\n        \"Widget.Holo.Tab\": 16974051,\n        \"Widget.Holo.Light.Tab\": 16974052,\n        \"Holo.ButtonBar\": 16974053,\n        \"Holo.Light.ButtonBar\": 16974054,\n        \"Holo.ButtonBar.AlertDialog\": 16974055,\n        \"Holo.Light.ButtonBar.AlertDialog\": 16974056,\n        \"Holo.SegmentedButton\": 16974057,\n        \"Holo.Light.SegmentedButton\": 16974058,\n        \"Widget.CalendarView\": 16974059,\n        \"Widget.Holo.CalendarView\": 16974060,\n        \"Widget.Holo.Light.CalendarView\": 16974061,\n        \"Widget.DatePicker\": 16974062,\n        \"Widget.Holo.DatePicker\": 16974063,\n        \"Theme.Holo.Light.NoActionBar\": 16974064,\n        \"Theme.Holo.Light.NoActionBar.Fullscreen\": 16974065,\n        \"Widget.ActionBar.TabView\": 16974066,\n        \"Widget.ActionBar.TabText\": 16974067,\n        \"Widget.ActionBar.TabBar\": 16974068,\n        \"Widget.Holo.ActionBar.TabView\": 16974069,\n        \"Widget.Holo.ActionBar.TabText\": 16974070,\n        \"Widget.Holo.ActionBar.TabBar\": 16974071,\n        \"Widget.Holo.Light.ActionBar.TabView\": 16974072,\n        \"Widget.Holo.Light.ActionBar.TabText\": 16974073,\n        \"Widget.Holo.Light.ActionBar.TabBar\": 16974074,\n        \"TextAppearance.Holo\": 16974075,\n        \"TextAppearance.Holo.Inverse\": 16974076,\n        \"TextAppearance.Holo.Large\": 16974077,\n        \"TextAppearance.Holo.Large.Inverse\": 16974078,\n        \"TextAppearance.Holo.Medium\": 16974079,\n        \"TextAppearance.Holo.Medium.Inverse\": 16974080,\n        \"TextAppearance.Holo.Small\": 16974081,\n        \"TextAppearance.Holo.Small.Inverse\": 16974082,\n        \"TextAppearance.Holo.SearchResult.Title\": 16974083,\n        \"TextAppearance.Holo.SearchResult.Subtitle\": 16974084,\n        \"TextAppearance.Holo.Widget\": 16974085,\n        \"TextAppearance.Holo.Widget.Button\": 16974086,\n        \"TextAppearance.Holo.Widget.IconMenu.Item\": 16974087,\n        \"TextAppearance.Holo.Widget.TabWidget\": 16974088,\n        \"TextAppearance.Holo.Widget.TextView\": 16974089,\n        \"TextAppearance.Holo.Widget.TextView.PopupMenu\": 16974090,\n        \"TextAppearance.Holo.Widget.DropDownHint\": 16974091,\n        \"TextAppearance.Holo.Widget.DropDownItem\": 16974092,\n        \"TextAppearance.Holo.Widget.TextView.SpinnerItem\": 16974093,\n        \"TextAppearance.Holo.Widget.EditText\": 16974094,\n        \"TextAppearance.Holo.Widget.PopupMenu\": 16974095,\n        \"TextAppearance.Holo.Widget.PopupMenu.Large\": 16974096,\n        \"TextAppearance.Holo.Widget.PopupMenu.Small\": 16974097,\n        \"TextAppearance.Holo.Widget.ActionBar.Title\": 16974098,\n        \"TextAppearance.Holo.Widget.ActionBar.Subtitle\": 16974099,\n        \"TextAppearance.Holo.Widget.ActionMode.Title\": 16974100,\n        \"TextAppearance.Holo.Widget.ActionMode.Subtitle\": 16974101,\n        \"TextAppearance.Holo.WindowTitle\": 16974102,\n        \"TextAppearance.Holo.DialogWindowTitle\": 16974103,\n        \"TextAppearance.SuggestionHighlight\": 16974104,\n        \"Theme.Holo.Light.DarkActionBar\": 16974105,\n        \"Widget.Holo.Button.Borderless.Small\": 16974106,\n        \"Widget.Holo.Light.Button.Borderless.Small\": 16974107,\n        \"TextAppearance.Holo.Widget.ActionBar.Title.Inverse\": 16974108,\n        \"TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse\": 16974109,\n        \"TextAppearance.Holo.Widget.ActionMode.Title.Inverse\": 16974110,\n        \"TextAppearance.Holo.Widget.ActionMode.Subtitle.Inverse\": 16974111,\n        \"TextAppearance.Holo.Widget.ActionBar.Menu\": 16974112,\n        \"Widget.Holo.ActionBar.Solid\": 16974113,\n        \"Widget.Holo.Light.ActionBar.Solid\": 16974114,\n        \"Widget.Holo.Light.ActionBar.Solid.Inverse\": 16974115,\n        \"Widget.Holo.Light.ActionBar.TabBar.Inverse\": 16974116,\n        \"Widget.Holo.Light.ActionBar.TabView.Inverse\": 16974117,\n        \"Widget.Holo.Light.ActionBar.TabText.Inverse\": 16974118,\n        \"Widget.Holo.Light.ActionMode.Inverse\": 16974119,\n        \"Theme.DeviceDefault\": 16974120,\n        \"Theme.DeviceDefault.NoActionBar\": 16974121,\n        \"Theme.DeviceDefault.NoActionBar.Fullscreen\": 16974122,\n        \"Theme.DeviceDefault.Light\": 16974123,\n        \"Theme.DeviceDefault.Light.NoActionBar\": 16974124,\n        \"Theme.DeviceDefault.Light.NoActionBar.Fullscreen\": 16974125,\n        \"Theme.DeviceDefault.Dialog\": 16974126,\n        \"Theme.DeviceDefault.Dialogger.MinWidth\": 16974127,\n        \"Theme.DeviceDefault.Dialogger.NoActionBar\": 16974128,\n        \"Theme.DeviceDefault.Dialogger.NoActionBar.MinWidth\": 16974129,\n        \"Theme.DeviceDefault.Light.Dialog\": 16974130,\n        \"Theme.DeviceDefault.Light.Dialogger.MinWidth\": 16974131,\n        \"Theme.DeviceDefault.Light.Dialogger.NoActionBar\": 16974132,\n        \"Theme.DeviceDefault.Light.Dialogger.NoActionBar.MinWidth\": 16974133,\n        \"Theme.DeviceDefault.DialogWhenLarge\": 16974134,\n        \"Theme.DeviceDefault.DialogWhenLarge.NoActionBar\": 16974135,\n        \"Theme.DeviceDefault.Light.DialogWhenLarge\": 16974136,\n        \"Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar\": 16974137,\n        \"Theme.DeviceDefault.Panel\": 16974138,\n        \"Theme.DeviceDefault.Light.Panel\": 16974139,\n        \"Theme.DeviceDefault.Wallpaper\": 16974140,\n        \"Theme.DeviceDefault.Wallpaper.NoTitleBar\": 16974141,\n        \"Theme.DeviceDefault.InputMethod\": 16974142,\n        \"Theme.DeviceDefault.Light.DarkActionBar\": 16974143,\n        \"Widget.DeviceDefault\": 16974144,\n        \"Widget.DeviceDefault.Button\": 16974145,\n        \"Widget.DeviceDefault.Button.Small\": 16974146,\n        \"Widget.DeviceDefault.Button.Inset\": 16974147,\n        \"Widget.DeviceDefault.Button.Toggle\": 16974148,\n        \"Widget.DeviceDefault.Button.Borderless.Small\": 16974149,\n        \"Widget.DeviceDefault.TextView\": 16974150,\n        \"Widget.DeviceDefault.AutoCompleteTextView\": 16974151,\n        \"Widget.DeviceDefault.CompoundButton.CheckBox\": 16974152,\n        \"Widget.DeviceDefault.ListView.DropDown\": 16974153,\n        \"Widget.DeviceDefault.EditText\": 16974154,\n        \"Widget.DeviceDefault.ExpandableListView\": 16974155,\n        \"Widget.DeviceDefault.GridView\": 16974156,\n        \"Widget.DeviceDefault.ImageButton\": 16974157,\n        \"Widget.DeviceDefault.ListView\": 16974158,\n        \"Widget.DeviceDefault.PopupWindow\": 16974159,\n        \"Widget.DeviceDefault.ProgressBar\": 16974160,\n        \"Widget.DeviceDefault.ProgressBar.Horizontal\": 16974161,\n        \"Widget.DeviceDefault.ProgressBar.Small\": 16974162,\n        \"Widget.DeviceDefault.ProgressBar.Small.Title\": 16974163,\n        \"Widget.DeviceDefault.ProgressBar.Large\": 16974164,\n        \"Widget.DeviceDefault.SeekBar\": 16974165,\n        \"Widget.DeviceDefault.RatingBar\": 16974166,\n        \"Widget.DeviceDefault.RatingBar.Indicator\": 16974167,\n        \"Widget.DeviceDefault.RatingBar.Small\": 16974168,\n        \"Widget.DeviceDefault.CompoundButton.RadioButton\": 16974169,\n        \"Widget.DeviceDefault.ScrollView\": 16974170,\n        \"Widget.DeviceDefault.HorizontalScrollView\": 16974171,\n        \"Widget.DeviceDefault.Spinner\": 16974172,\n        \"Widget.DeviceDefault.CompoundButton.Star\": 16974173,\n        \"Widget.DeviceDefault.TabWidget\": 16974174,\n        \"Widget.DeviceDefault.WebTextView\": 16974175,\n        \"Widget.DeviceDefault.WebView\": 16974176,\n        \"Widget.DeviceDefault.DropDownItem\": 16974177,\n        \"Widget.DeviceDefault.DropDownItem.Spinner\": 16974178,\n        \"Widget.DeviceDefault.TextView.SpinnerItem\": 16974179,\n        \"Widget.DeviceDefault.ListPopupWindow\": 16974180,\n        \"Widget.DeviceDefault.PopupMenu\": 16974181,\n        \"Widget.DeviceDefault.ActionButton\": 16974182,\n        \"Widget.DeviceDefault.ActionButton.Overflow\": 16974183,\n        \"Widget.DeviceDefault.ActionButton.TextButton\": 16974184,\n        \"Widget.DeviceDefault.ActionMode\": 16974185,\n        \"Widget.DeviceDefault.ActionButton.CloseMode\": 16974186,\n        \"Widget.DeviceDefault.ActionBar\": 16974187,\n        \"Widget.DeviceDefault.Button.Borderless\": 16974188,\n        \"Widget.DeviceDefault.Tab\": 16974189,\n        \"Widget.DeviceDefault.CalendarView\": 16974190,\n        \"Widget.DeviceDefault.DatePicker\": 16974191,\n        \"Widget.DeviceDefault.ActionBar.TabView\": 16974192,\n        \"Widget.DeviceDefault.ActionBar.TabText\": 16974193,\n        \"Widget.DeviceDefault.ActionBar.TabBar\": 16974194,\n        \"Widget.DeviceDefault.ActionBar.Solid\": 16974195,\n        \"Widget.DeviceDefault.Light\": 16974196,\n        \"Widget.DeviceDefault.Light.Button\": 16974197,\n        \"Widget.DeviceDefault.Light.Button.Small\": 16974198,\n        \"Widget.DeviceDefault.Light.Button.Inset\": 16974199,\n        \"Widget.DeviceDefault.Light.Button.Toggle\": 16974200,\n        \"Widget.DeviceDefault.Light.Button.Borderless.Small\": 16974201,\n        \"Widget.DeviceDefault.Light.TextView\": 16974202,\n        \"Widget.DeviceDefault.Light.AutoCompleteTextView\": 16974203,\n        \"Widget.DeviceDefault.Light.CompoundButton.CheckBox\": 16974204,\n        \"Widget.DeviceDefault.Light.ListView.DropDown\": 16974205,\n        \"Widget.DeviceDefault.Light.EditText\": 16974206,\n        \"Widget.DeviceDefault.Light.ExpandableListView\": 16974207,\n        \"Widget.DeviceDefault.Light.GridView\": 16974208,\n        \"Widget.DeviceDefault.Light.ImageButton\": 16974209,\n        \"Widget.DeviceDefault.Light.ListView\": 16974210,\n        \"Widget.DeviceDefault.Light.PopupWindow\": 16974211,\n        \"Widget.DeviceDefault.Light.ProgressBar\": 16974212,\n        \"Widget.DeviceDefault.Light.ProgressBar.Horizontal\": 16974213,\n        \"Widget.DeviceDefault.Light.ProgressBar.Small\": 16974214,\n        \"Widget.DeviceDefault.Light.ProgressBar.Small.Title\": 16974215,\n        \"Widget.DeviceDefault.Light.ProgressBar.Large\": 16974216,\n        \"Widget.DeviceDefault.Light.ProgressBar.Inverse\": 16974217,\n        \"Widget.DeviceDefault.Light.ProgressBar.Small.Inverse\": 16974218,\n        \"Widget.DeviceDefault.Light.ProgressBar.Large.Inverse\": 16974219,\n        \"Widget.DeviceDefault.Light.SeekBar\": 16974220,\n        \"Widget.DeviceDefault.Light.RatingBar\": 16974221,\n        \"Widget.DeviceDefault.Light.RatingBar.Indicator\": 16974222,\n        \"Widget.DeviceDefault.Light.RatingBar.Small\": 16974223,\n        \"Widget.DeviceDefault.Light.CompoundButton.RadioButton\": 16974224,\n        \"Widget.DeviceDefault.Light.ScrollView\": 16974225,\n        \"Widget.DeviceDefault.Light.HorizontalScrollView\": 16974226,\n        \"Widget.DeviceDefault.Light.Spinner\": 16974227,\n        \"Widget.DeviceDefault.Light.CompoundButton.Star\": 16974228,\n        \"Widget.DeviceDefault.Light.TabWidget\": 16974229,\n        \"Widget.DeviceDefault.Light.WebTextView\": 16974230,\n        \"Widget.DeviceDefault.Light.WebView\": 16974231,\n        \"Widget.DeviceDefault.Light.DropDownItem\": 16974232,\n        \"Widget.DeviceDefault.Light.DropDownItem.Spinner\": 16974233,\n        \"Widget.DeviceDefault.Light.TextView.SpinnerItem\": 16974234,\n        \"Widget.DeviceDefault.Light.ListPopupWindow\": 16974235,\n        \"Widget.DeviceDefault.Light.PopupMenu\": 16974236,\n        \"Widget.DeviceDefault.Light.Tab\": 16974237,\n        \"Widget.DeviceDefault.Light.CalendarView\": 16974238,\n        \"Widget.DeviceDefault.Light.ActionButton\": 16974239,\n        \"Widget.DeviceDefault.Light.ActionButton.Overflow\": 16974240,\n        \"Widget.DeviceDefault.Light.ActionMode\": 16974241,\n        \"Widget.DeviceDefault.Light.ActionButton.CloseMode\": 16974242,\n        \"Widget.DeviceDefault.Light.ActionBar\": 16974243,\n        \"Widget.DeviceDefault.Light.ActionBar.TabView\": 16974244,\n        \"Widget.DeviceDefault.Light.ActionBar.TabText\": 16974245,\n        \"Widget.DeviceDefault.Light.ActionBar.TabBar\": 16974246,\n        \"Widget.DeviceDefault.Light.ActionBar.Solid\": 16974247,\n        \"Widget.DeviceDefault.Light.ActionBar.Solid.Inverse\": 16974248,\n        \"Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse\": 16974249,\n        \"Widget.DeviceDefault.Light.ActionBar.TabView.Inverse\": 16974250,\n        \"Widget.DeviceDefault.Light.ActionBar.TabText.Inverse\": 16974251,\n        \"Widget.DeviceDefault.Light.ActionMode.Inverse\": 16974252,\n        \"TextAppearance.DeviceDefault\": 16974253,\n        \"TextAppearance.DeviceDefault.Inverse\": 16974254,\n        \"TextAppearance.DeviceDefault.Large\": 16974255,\n        \"TextAppearance.DeviceDefault.Large.Inverse\": 16974256,\n        \"TextAppearance.DeviceDefault.Medium\": 16974257,\n        \"TextAppearance.DeviceDefault.Medium.Inverse\": 16974258,\n        \"TextAppearance.DeviceDefault.Small\": 16974259,\n        \"TextAppearance.DeviceDefault.Small.Inverse\": 16974260,\n        \"TextAppearance.DeviceDefault.SearchResult.Title\": 16974261,\n        \"TextAppearance.DeviceDefault.SearchResult.Subtitle\": 16974262,\n        \"TextAppearance.DeviceDefault.WindowTitle\": 16974263,\n        \"TextAppearance.DeviceDefault.DialogWindowTitle\": 16974264,\n        \"TextAppearance.DeviceDefault.Widget\": 16974265,\n        \"TextAppearance.DeviceDefault.Widget.Button\": 16974266,\n        \"TextAppearance.DeviceDefault.Widget.IconMenu.Item\": 16974267,\n        \"TextAppearance.DeviceDefault.Widget.TabWidget\": 16974268,\n        \"TextAppearance.DeviceDefault.Widget.TextView\": 16974269,\n        \"TextAppearance.DeviceDefault.Widget.TextView.PopupMenu\": 16974270,\n        \"TextAppearance.DeviceDefault.Widget.DropDownHint\": 16974271,\n        \"TextAppearance.DeviceDefault.Widget.DropDownItem\": 16974272,\n        \"TextAppearance.DeviceDefault.Widget.TextView.SpinnerItem\": 16974273,\n        \"TextAppearance.DeviceDefault.Widget.EditText\": 16974274,\n        \"TextAppearance.DeviceDefault.Widget.PopupMenu\": 16974275,\n        \"TextAppearance.DeviceDefault.Widget.PopupMenu.Large\": 16974276,\n        \"TextAppearance.DeviceDefault.Widget.PopupMenu.Small\": 16974277,\n        \"TextAppearance.DeviceDefault.Widget.ActionBar.Title\": 16974278,\n        \"TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle\": 16974279,\n        \"TextAppearance.DeviceDefault.Widget.ActionMode.Title\": 16974280,\n        \"TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle\": 16974281,\n        \"TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse\": 16974282,\n        \"TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle.Inverse\": 16974283,\n        \"TextAppearance.DeviceDefault.Widget.ActionMode.Title.Inverse\": 16974284,\n        \"TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse\": 16974285,\n        \"TextAppearance.DeviceDefault.Widget.ActionBar.Menu\": 16974286,\n        \"DeviceDefault.ButtonBar\": 16974287,\n        \"DeviceDefault.ButtonBar.AlertDialog\": 16974288,\n        \"DeviceDefault.SegmentedButton\": 16974289,\n        \"DeviceDefault.Light.ButtonBar\": 16974290,\n        \"DeviceDefault.Light.ButtonBar.AlertDialog\": 16974291,\n        \"DeviceDefault.Light.SegmentedButton\": 16974292,\n        \"Widget.Holo.MediaRouteButton\": 16974293,\n        \"Widget.Holo.Light.MediaRouteButton\": 16974294,\n        \"Widget.DeviceDefault.MediaRouteButton\": 16974295,\n        \"Widget.DeviceDefault.Light.MediaRouteButton\": 16974296,\n        \"Widget.Holo.CheckedTextView\": 16974297,\n        \"Widget.Holo.Light.CheckedTextView\": 16974298,\n        \"Widget.DeviceDefault.CheckedTextView\": 16974299,\n        \"Widget.DeviceDefault.Light.CheckedTextView\": 16974300,\n        \"Theme.Holo.NoActionBar.Overscan\": 16974301,\n        \"Theme.Holo.Light.NoActionBar.Overscan\": 16974302,\n        \"Theme.DeviceDefault.NoActionBar.Overscan\": 16974303,\n        \"Theme.DeviceDefault.Light.NoActionBar.Overscan\": 16974304,\n        \"Theme.Holo.NoActionBar.TranslucentDecor\": 16974305,\n        \"Theme.Holo.Light.NoActionBar.TranslucentDecor\": 16974306,\n        \"Theme.DeviceDefault.NoActionBar.TranslucentDecor\": 16974307,\n        \"Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor\": 16974308,\n        \"Widget.FastScroll\": 16974309,\n        \"Widget.StackView\": 16974310,\n        \"Widget.Toolbar\": 16974311,\n        \"Widget.Toolbar.Button.Navigation\": 16974312,\n        \"Widget.DeviceDefault.FastScroll\": 16974313,\n        \"Widget.DeviceDefault.StackView\": 16974314,\n        \"Widget.DeviceDefault.Light.FastScroll\": 16974315,\n        \"Widget.DeviceDefault.Light.StackView\": 16974316,\n        \"TextAppearance.Material\": 16974317,\n        \"TextAppearance.Material.Button\": 16974318,\n        \"TextAppearance.Material.Body2\": 16974319,\n        \"TextAppearance.Material.Body1\": 16974320,\n        \"TextAppearance.Material.Caption\": 16974321,\n        \"TextAppearance.Material.DialogWindowTitle\": 16974322,\n        \"TextAppearance.Material.Display4\": 16974323,\n        \"TextAppearance.Material.Display3\": 16974324,\n        \"TextAppearance.Material.Display2\": 16974325,\n        \"TextAppearance.Material.Display1\": 16974326,\n        \"TextAppearance.Material.Headline\": 16974327,\n        \"TextAppearance.Material.Inverse\": 16974328,\n        \"TextAppearance.Material.Large\": 16974329,\n        \"TextAppearance.Material.Large.Inverse\": 16974330,\n        \"TextAppearance.Material.Medium\": 16974331,\n        \"TextAppearance.Material.Medium.Inverse\": 16974332,\n        \"TextAppearance.Material.Menu\": 16974333,\n        \"TextAppearance.Material.Notification\": 16974334,\n        \"TextAppearance.Material.Notification.Emphasis\": 16974335,\n        \"TextAppearance.Material.Notification.Info\": 16974336,\n        \"TextAppearance.Material.Notification.Line2\": 16974337,\n        \"TextAppearance.Material.Notification.Time\": 16974338,\n        \"TextAppearance.Material.Notification.Title\": 16974339,\n        \"TextAppearance.Material.SearchResult.Subtitle\": 16974340,\n        \"TextAppearance.Material.SearchResult.Title\": 16974341,\n        \"TextAppearance.Material.Small\": 16974342,\n        \"TextAppearance.Material.Small.Inverse\": 16974343,\n        \"TextAppearance.Material.Subhead\": 16974344,\n        \"TextAppearance.Material.Title\": 16974345,\n        \"TextAppearance.Material.WindowTitle\": 16974346,\n        \"TextAppearance.Material.Widget\": 16974347,\n        \"TextAppearance.Material.Widget.ActionBar.Menu\": 16974348,\n        \"TextAppearance.Material.Widget.ActionBar.Subtitle\": 16974349,\n        \"TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse\": 16974350,\n        \"TextAppearance.Material.Widget.ActionBar.Title\": 16974351,\n        \"TextAppearance.Material.Widget.ActionBar.Title.Inverse\": 16974352,\n        \"TextAppearance.Material.Widget.ActionMode.Subtitle\": 16974353,\n        \"TextAppearance.Material.Widget.ActionMode.Subtitle.Inverse\": 16974354,\n        \"TextAppearance.Material.Widget.ActionMode.Title\": 16974355,\n        \"TextAppearance.Material.Widget.ActionMode.Title.Inverse\": 16974356,\n        \"TextAppearance.Material.Widget.Button\": 16974357,\n        \"TextAppearance.Material.Widget.DropDownHint\": 16974358,\n        \"TextAppearance.Material.Widget.DropDownItem\": 16974359,\n        \"TextAppearance.Material.Widget.EditText\": 16974360,\n        \"TextAppearance.Material.Widget.IconMenu.Item\": 16974361,\n        \"TextAppearance.Material.Widget.PopupMenu\": 16974362,\n        \"TextAppearance.Material.Widget.PopupMenu.Large\": 16974363,\n        \"TextAppearance.Material.Widget.PopupMenu.Small\": 16974364,\n        \"TextAppearance.Material.Widget.TabWidget\": 16974365,\n        \"TextAppearance.Material.Widget.TextView\": 16974366,\n        \"TextAppearance.Material.Widget.TextView.PopupMenu\": 16974367,\n        \"TextAppearance.Material.Widget.TextView.SpinnerItem\": 16974368,\n        \"TextAppearance.Material.Widget.Toolbar.Subtitle\": 16974369,\n        \"TextAppearance.Material.Widget.Toolbar.Title\": 16974370,\n        \"Theme.DeviceDefault.Settings\": 16974371,\n        \"Theme.Material\": 16974372,\n        \"Theme.Material.Dialog\": 16974373,\n        \"Theme.Material.Dialogger.Alert\": 16974374,\n        \"Theme.Material.Dialogger.MinWidth\": 16974375,\n        \"Theme.Material.Dialogger.NoActionBar\": 16974376,\n        \"Theme.Material.Dialogger.NoActionBar.MinWidth\": 16974377,\n        \"Theme.Material.Dialogger.Presentation\": 16974378,\n        \"Theme.Material.DialogWhenLarge\": 16974379,\n        \"Theme.Material.DialogWhenLarge.NoActionBar\": 16974380,\n        \"Theme.Material.InputMethod\": 16974381,\n        \"Theme.Material.NoActionBar\": 16974382,\n        \"Theme.Material.NoActionBar.Fullscreen\": 16974383,\n        \"Theme.Material.NoActionBar.Overscan\": 16974384,\n        \"Theme.Material.NoActionBar.TranslucentDecor\": 16974385,\n        \"Theme.Material.Panel\": 16974386,\n        \"Theme.Material.Settings\": 16974387,\n        \"Theme.Material.Voice\": 16974388,\n        \"Theme.Material.Wallpaper\": 16974389,\n        \"Theme.Material.Wallpaper.NoTitleBar\": 16974390,\n        \"Theme.Material.Light\": 16974391,\n        \"Theme.Material.Light.DarkActionBar\": 16974392,\n        \"Theme.Material.Light.Dialog\": 16974393,\n        \"Theme.Material.Light.Dialogger.Alert\": 16974394,\n        \"Theme.Material.Light.Dialogger.MinWidth\": 16974395,\n        \"Theme.Material.Light.Dialogger.NoActionBar\": 16974396,\n        \"Theme.Material.Light.Dialogger.NoActionBar.MinWidth\": 16974397,\n        \"Theme.Material.Light.Dialogger.Presentation\": 16974398,\n        \"Theme.Material.Light.DialogWhenLarge\": 16974399,\n        \"Theme.Material.Light.DialogWhenLarge.NoActionBar\": 16974400,\n        \"Theme.Material.Light.NoActionBar\": 16974401,\n        \"Theme.Material.Light.NoActionBar.Fullscreen\": 16974402,\n        \"Theme.Material.Light.NoActionBar.Overscan\": 16974403,\n        \"Theme.Material.Light.NoActionBar.TranslucentDecor\": 16974404,\n        \"Theme.Material.Light.Panel\": 16974405,\n        \"Theme.Material.Light.Voice\": 16974406,\n        \"ThemeOverlay\": 16974407,\n        \"ThemeOverlay.Material\": 16974408,\n        \"ThemeOverlay.Material.ActionBar\": 16974409,\n        \"ThemeOverlay.Material.Light\": 16974410,\n        \"ThemeOverlay.Material.Dark\": 16974411,\n        \"ThemeOverlay.Material.Dark.ActionBar\": 16974412,\n        \"Widget.Material\": 16974413,\n        \"Widget.Material.ActionBar\": 16974414,\n        \"Widget.Material.ActionBar.Solid\": 16974415,\n        \"Widget.Material.ActionBar.TabBar\": 16974416,\n        \"Widget.Material.ActionBar.TabText\": 16974417,\n        \"Widget.Material.ActionBar.TabView\": 16974418,\n        \"Widget.Material.ActionButton\": 16974419,\n        \"Widget.Material.ActionButton.CloseMode\": 16974420,\n        \"Widget.Material.ActionButton.Overflow\": 16974421,\n        \"Widget.Material.ActionMode\": 16974422,\n        \"Widget.Material.AutoCompleteTextView\": 16974423,\n        \"Widget.Material.Button\": 16974424,\n        \"Widget.Material.Button.Borderless\": 16974425,\n        \"Widget.Material.Button.Borderless.Colored\": 16974426,\n        \"Widget.Material.Button.Borderless.Small\": 16974427,\n        \"Widget.Material.Button.Inset\": 16974428,\n        \"Widget.Material.Button.Small\": 16974429,\n        \"Widget.Material.Button.Toggle\": 16974430,\n        \"Widget.Material.ButtonBar\": 16974431,\n        \"Widget.Material.ButtonBar.AlertDialog\": 16974432,\n        \"Widget.Material.CalendarView\": 16974433,\n        \"Widget.Material.CheckedTextView\": 16974434,\n        \"Widget.Material.CompoundButton.CheckBox\": 16974435,\n        \"Widget.Material.CompoundButton.RadioButton\": 16974436,\n        \"Widget.Material.CompoundButton.Star\": 16974437,\n        \"Widget.Material.DatePicker\": 16974438,\n        \"Widget.Material.DropDownItem\": 16974439,\n        \"Widget.Material.DropDownItem.Spinner\": 16974440,\n        \"Widget.Material.EditText\": 16974441,\n        \"Widget.Material.ExpandableListView\": 16974442,\n        \"Widget.Material.FastScroll\": 16974443,\n        \"Widget.Material.GridView\": 16974444,\n        \"Widget.Material.HorizontalScrollView\": 16974445,\n        \"Widget.Material.ImageButton\": 16974446,\n        \"Widget.Material.ListPopupWindow\": 16974447,\n        \"Widget.Material.ListView\": 16974448,\n        \"Widget.Material.ListView.DropDown\": 16974449,\n        \"Widget.Material.MediaRouteButton\": 16974450,\n        \"Widget.Material.PopupMenu\": 16974451,\n        \"Widget.Material.PopupMenu.Overflow\": 16974452,\n        \"Widget.Material.PopupWindow\": 16974453,\n        \"Widget.Material.ProgressBar\": 16974454,\n        \"Widget.Material.ProgressBar.Horizontal\": 16974455,\n        \"Widget.Material.ProgressBar.Large\": 16974456,\n        \"Widget.Material.ProgressBar.Small\": 16974457,\n        \"Widget.Material.ProgressBar.Small.Title\": 16974458,\n        \"Widget.Material.RatingBar\": 16974459,\n        \"Widget.Material.RatingBar.Indicator\": 16974460,\n        \"Widget.Material.RatingBar.Small\": 16974461,\n        \"Widget.Material.ScrollView\": 16974462,\n        \"Widget.Material.SearchView\": 16974463,\n        \"Widget.Material.SeekBar\": 16974464,\n        \"Widget.Material.SegmentedButton\": 16974465,\n        \"Widget.Material.StackView\": 16974466,\n        \"Widget.Material.Spinner\": 16974467,\n        \"Widget.Material.Spinner.Underlined\": 16974468,\n        \"Widget.Material.Tab\": 16974469,\n        \"Widget.Material.TabWidget\": 16974470,\n        \"Widget.Material.TextView\": 16974471,\n        \"Widget.Material.TextView.SpinnerItem\": 16974472,\n        \"Widget.Material.TimePicker\": 16974473,\n        \"Widget.Material.Toolbar\": 16974474,\n        \"Widget.Material.Toolbar.Button.Navigation\": 16974475,\n        \"Widget.Material.WebTextView\": 16974476,\n        \"Widget.Material.WebView\": 16974477,\n        \"Widget.Material.Light\": 16974478,\n        \"Widget.Material.Light.ActionBar\": 16974479,\n        \"Widget.Material.Light.ActionBar.Solid\": 16974480,\n        \"Widget.Material.Light.ActionBar.TabBar\": 16974481,\n        \"Widget.Material.Light.ActionBar.TabText\": 16974482,\n        \"Widget.Material.Light.ActionBar.TabView\": 16974483,\n        \"Widget.Material.Light.ActionButton\": 16974484,\n        \"Widget.Material.Light.ActionButton.CloseMode\": 16974485,\n        \"Widget.Material.Light.ActionButton.Overflow\": 16974486,\n        \"Widget.Material.Light.ActionMode\": 16974487,\n        \"Widget.Material.Light.AutoCompleteTextView\": 16974488,\n        \"Widget.Material.Light.Button\": 16974489,\n        \"Widget.Material.Light.Button.Borderless\": 16974490,\n        \"Widget.Material.Light.Button.Borderless.Colored\": 16974491,\n        \"Widget.Material.Light.Button.Borderless.Small\": 16974492,\n        \"Widget.Material.Light.Button.Inset\": 16974493,\n        \"Widget.Material.Light.Button.Small\": 16974494,\n        \"Widget.Material.Light.Button.Toggle\": 16974495,\n        \"Widget.Material.Light.ButtonBar\": 16974496,\n        \"Widget.Material.Light.ButtonBar.AlertDialog\": 16974497,\n        \"Widget.Material.Light.CalendarView\": 16974498,\n        \"Widget.Material.Light.CheckedTextView\": 16974499,\n        \"Widget.Material.Light.CompoundButton.CheckBox\": 16974500,\n        \"Widget.Material.Light.CompoundButton.RadioButton\": 16974501,\n        \"Widget.Material.Light.CompoundButton.Star\": 16974502,\n        \"Widget.Material.Light.DatePicker\": 16974503,\n        \"Widget.Material.Light.DropDownItem\": 16974504,\n        \"Widget.Material.Light.DropDownItem.Spinner\": 16974505,\n        \"Widget.Material.Light.EditText\": 16974506,\n        \"Widget.Material.Light.ExpandableListView\": 16974507,\n        \"Widget.Material.Light.FastScroll\": 16974508,\n        \"Widget.Material.Light.GridView\": 16974509,\n        \"Widget.Material.Light.HorizontalScrollView\": 16974510,\n        \"Widget.Material.Light.ImageButton\": 16974511,\n        \"Widget.Material.Light.ListPopupWindow\": 16974512,\n        \"Widget.Material.Light.ListView\": 16974513,\n        \"Widget.Material.Light.ListView.DropDown\": 16974514,\n        \"Widget.Material.Light.MediaRouteButton\": 16974515,\n        \"Widget.Material.Light.PopupMenu\": 16974516,\n        \"Widget.Material.Light.PopupMenu.Overflow\": 16974517,\n        \"Widget.Material.Light.PopupWindow\": 16974518,\n        \"Widget.Material.Light.ProgressBar\": 16974519,\n        \"Widget.Material.Light.ProgressBar.Horizontal\": 16974520,\n        \"Widget.Material.Light.ProgressBar.Inverse\": 16974521,\n        \"Widget.Material.Light.ProgressBar.Large\": 16974522,\n        \"Widget.Material.Light.ProgressBar.Large.Inverse\": 16974523,\n        \"Widget.Material.Light.ProgressBar.Small\": 16974524,\n        \"Widget.Material.Light.ProgressBar.Small.Inverse\": 16974525,\n        \"Widget.Material.Light.ProgressBar.Small.Title\": 16974526,\n        \"Widget.Material.Light.RatingBar\": 16974527,\n        \"Widget.Material.Light.RatingBar.Indicator\": 16974528,\n        \"Widget.Material.Light.RatingBar.Small\": 16974529,\n        \"Widget.Material.Light.ScrollView\": 16974530,\n        \"Widget.Material.Light.SearchView\": 16974531,\n        \"Widget.Material.Light.SeekBar\": 16974532,\n        \"Widget.Material.Light.SegmentedButton\": 16974533,\n        \"Widget.Material.Light.StackView\": 16974534,\n        \"Widget.Material.Light.Spinner\": 16974535,\n        \"Widget.Material.Light.Spinner.Underlined\": 16974536,\n        \"Widget.Material.Light.Tab\": 16974537,\n        \"Widget.Material.Light.TabWidget\": 16974538,\n        \"Widget.Material.Light.TextView\": 16974539,\n        \"Widget.Material.Light.TextView.SpinnerItem\": 16974540,\n        \"Widget.Material.Light.TimePicker\": 16974541,\n        \"Widget.Material.Light.WebTextView\": 16974542,\n        \"Widget.Material.Light.WebView\": 16974543,\n        \"Theme.Leanback.FormWizard\": 16974544,\n        \"Theme.DeviceDefault.Dialogger.Alert\": 16974545,\n        \"Theme.DeviceDefault.Light.Dialogger.Alert\": 16974546,\n        \"Widget.Material.Button.Colored\": 16974547,\n        \"TextAppearance.Material.Widget.Button.Inverse\": 16974548,\n        \"Theme.Material.Light.LightStatusBar\": 16974549,\n        \"ThemeOverlay.Material.Dialog\": 16974550,\n        \"ThemeOverlay.Material.Dialogger.Alert\": 16974551,\n        \"Theme.Material.Light.DialogWhenLarge.DarkActionBar\": 16974552,\n        \"Widget.Material.SeekBar.Discrete\": 16974553,\n        \"Widget.Material.CompoundButton.Switch\": 16974554,\n        \"Widget.Material.Light.CompoundButton.Switch\": 16974555,\n        \"Widget.Material.NumberPicker\": 16974556,\n        \"Widget.Material.Light.NumberPicker\": 16974557,\n        \"TextAppearance.Material.Widget.Button.Colored\": 16974558,\n        \"TextAppearance.Material.Widget.Button.Borderless.Colored\": 16974559\n    },\n    \"string\": {\n        \"cancel\": 17039360,\n        \"copy\": 17039361,\n        \"copyUrl\": 17039362,\n        \"cut\": 17039363,\n        \"defaultVoiceMailAlphaTag\": 17039364,\n        \"defaultMsisdnAlphaTag\": 17039365,\n        \"emptyPhoneNumber\": 17039366,\n        \"httpErrorBadUrl\": 17039367,\n        \"httpErrorUnsupportedScheme\": 17039368,\n        \"no\": 17039369,\n        \"ok\": 17039370,\n        \"paste\": 17039371,\n        \"search_go\": 17039372,\n        \"selectAll\": 17039373,\n        \"unknownName\": 17039374,\n        \"untitled\": 17039375,\n        \"VideoView_error_button\": 17039376,\n        \"VideoView_error_text_unknown\": 17039377,\n        \"VideoView_error_title\": 17039378,\n        \"yes\": 17039379,\n        \"dialog_alert_title\": 17039380,\n        \"VideoView_error_text_invalid_progressive_playback\": 17039381,\n        \"selectTextMode\": 17039382,\n        \"status_bar_notification_info_overflow\": 17039383,\n        \"fingerprint_icon_content_description\": 17039384,\n        \"paste_as_plain_text\": 17039385,\n        \"autofill\": 17039386\n    },\n    \"dimen\": {\n        \"app_icon_size\": 17104896,\n        \"thumbnail_height\": 17104897,\n        \"thumbnail_width\": 17104898,\n        \"dialog_min_width_major\": 17104899,\n        \"dialog_min_width_minor\": 17104900,\n        \"notification_large_icon_width\": 17104901,\n        \"notification_large_icon_height\": 17104902\n    },\n    \"color\": {\n        \"darker_gray\": 17170432,\n        \"primary_text_dark\": 17170433,\n        \"primary_text_dark_nodisable\": 17170434,\n        \"primary_text_light\": 17170435,\n        \"primary_text_light_nodisable\": 17170436,\n        \"secondary_text_dark\": 17170437,\n        \"secondary_text_dark_nodisable\": 17170438,\n        \"secondary_text_light\": 17170439,\n        \"secondary_text_light_nodisable\": 17170440,\n        \"tab_indicator_text\": 17170441,\n        \"widget_edittext_dark\": 17170442,\n        \"white\": 17170443,\n        \"black\": 17170444,\n        \"transparent\": 17170445,\n        \"background_dark\": 17170446,\n        \"background_light\": 17170447,\n        \"tertiary_text_dark\": 17170448,\n        \"tertiary_text_light\": 17170449,\n        \"holo_blue_light\": 17170450,\n        \"holo_blue_dark\": 17170451,\n        \"holo_green_light\": 17170452,\n        \"holo_green_dark\": 17170453,\n        \"holo_red_light\": 17170454,\n        \"holo_red_dark\": 17170455,\n        \"holo_orange_light\": 17170456,\n        \"holo_orange_dark\": 17170457,\n        \"holo_purple\": 17170458,\n        \"holo_blue_bright\": 17170459\n    },\n    \"array\": {\n        \"emailAddressTypes\": 17235968,\n        \"imProtocols\": 17235969,\n        \"organizationTypes\": 17235970,\n        \"phoneTypes\": 17235971,\n        \"postalAddressTypes\": 17235972,\n        \"config_keySystemUuidMapping\": 17235973\n    },\n    \"drawable\": {\n        \"alert_dark_frame\": 17301504,\n        \"alert_light_frame\": 17301505,\n        \"arrow_down_float\": 17301506,\n        \"arrow_up_float\": 17301507,\n        \"btn_default\": 17301508,\n        \"btn_default_small\": 17301509,\n        \"btn_dropdown\": 17301510,\n        \"btn_minus\": 17301511,\n        \"btn_plus\": 17301512,\n        \"btn_radio\": 17301513,\n        \"btn_star\": 17301514,\n        \"btn_star_big_off\": 17301515,\n        \"btn_star_big_on\": 17301516,\n        \"button_onoff_indicator_on\": 17301517,\n        \"button_onoff_indicator_off\": 17301518,\n        \"checkbox_off_background\": 17301519,\n        \"checkbox_on_background\": 17301520,\n        \"dialog_frame\": 17301521,\n        \"divider_horizontal_bright\": 17301522,\n        \"divider_horizontal_textfield\": 17301523,\n        \"divider_horizontal_dark\": 17301524,\n        \"divider_horizontal_dim_dark\": 17301525,\n        \"edit_text\": 17301526,\n        \"btn_dialog\": 17301527,\n        \"editbox_background\": 17301528,\n        \"editbox_background_normal\": 17301529,\n        \"editbox_dropdown_dark_frame\": 17301530,\n        \"editbox_dropdown_light_frame\": 17301531,\n        \"gallery_thumb\": 17301532,\n        \"ic_delete\": 17301533,\n        \"ic_lock_idle_charging\": 17301534,\n        \"ic_lock_idle_lock\": 17301535,\n        \"ic_lock_idle_low_battery\": 17301536,\n        \"ic_media_ff\": 17301537,\n        \"ic_media_next\": 17301538,\n        \"ic_media_pause\": 17301539,\n        \"ic_media_play\": 17301540,\n        \"ic_media_previous\": 17301541,\n        \"ic_media_rew\": 17301542,\n        \"ic_dialog_alert\": 17301543,\n        \"ic_dialog_dialer\": 17301544,\n        \"ic_dialog_email\": 17301545,\n        \"ic_dialog_map\": 17301546,\n        \"ic_input_add\": 17301547,\n        \"ic_input_delete\": 17301548,\n        \"ic_input_get\": 17301549,\n        \"ic_lock_idle_alarm\": 17301550,\n        \"ic_lock_lock\": 17301551,\n        \"ic_lock_power_off\": 17301552,\n        \"ic_lock_silent_mode\": 17301553,\n        \"ic_lock_silent_mode_off\": 17301554,\n        \"ic_menu_add\": 17301555,\n        \"ic_menu_agenda\": 17301556,\n        \"ic_menu_always_landscape_portrait\": 17301557,\n        \"ic_menu_call\": 17301558,\n        \"ic_menu_camera\": 17301559,\n        \"ic_menu_close_clear_cancel\": 17301560,\n        \"ic_menu_compass\": 17301561,\n        \"ic_menu_crop\": 17301562,\n        \"ic_menu_day\": 17301563,\n        \"ic_menu_delete\": 17301564,\n        \"ic_menu_directions\": 17301565,\n        \"ic_menu_edit\": 17301566,\n        \"ic_menu_gallery\": 17301567,\n        \"ic_menu_help\": 17301568,\n        \"ic_menu_info_details\": 17301569,\n        \"ic_menu_manage\": 17301570,\n        \"ic_menu_mapmode\": 17301571,\n        \"ic_menu_month\": 17301572,\n        \"ic_menu_more\": 17301573,\n        \"ic_menu_my_calendar\": 17301574,\n        \"ic_menu_mylocation\": 17301575,\n        \"ic_menu_myplaces\": 17301576,\n        \"ic_menu_preferences\": 17301577,\n        \"ic_menu_recent_history\": 17301578,\n        \"ic_menu_report_image\": 17301579,\n        \"ic_menu_revert\": 17301580,\n        \"ic_menu_rotate\": 17301581,\n        \"ic_menu_save\": 17301582,\n        \"ic_menu_search\": 17301583,\n        \"ic_menu_send\": 17301584,\n        \"ic_menu_set_as\": 17301585,\n        \"ic_menu_share\": 17301586,\n        \"ic_menu_slideshow\": 17301587,\n        \"ic_menu_today\": 17301588,\n        \"ic_menu_upload\": 17301589,\n        \"ic_menu_upload_you_tube\": 17301590,\n        \"ic_menu_view\": 17301591,\n        \"ic_menu_week\": 17301592,\n        \"ic_menu_zoom\": 17301593,\n        \"ic_notification_clear_all\": 17301594,\n        \"ic_notification_overlay\": 17301595,\n        \"ic_partial_secure\": 17301596,\n        \"ic_popup_disk_full\": 17301597,\n        \"ic_popup_reminder\": 17301598,\n        \"ic_popup_sync\": 17301599,\n        \"ic_search_category_default\": 17301600,\n        \"ic_secure\": 17301601,\n        \"list_selector_background\": 17301602,\n        \"menu_frame\": 17301603,\n        \"menu_full_frame\": 17301604,\n        \"menuitem_background\": 17301605,\n        \"picture_frame\": 17301606,\n        \"presence_away\": 17301607,\n        \"presence_busy\": 17301608,\n        \"presence_invisible\": 17301609,\n        \"presence_offline\": 17301610,\n        \"presence_online\": 17301611,\n        \"progress_horizontal\": 17301612,\n        \"progress_indeterminate_horizontal\": 17301613,\n        \"radiobutton_off_background\": 17301614,\n        \"radiobutton_on_background\": 17301615,\n        \"spinner_background\": 17301616,\n        \"spinner_dropdown_background\": 17301617,\n        \"star_big_on\": 17301618,\n        \"star_big_off\": 17301619,\n        \"star_on\": 17301620,\n        \"star_off\": 17301621,\n        \"stat_notify_call_mute\": 17301622,\n        \"stat_notify_chat\": 17301623,\n        \"stat_notify_error\": 17301624,\n        \"stat_notify_more\": 17301625,\n        \"stat_notify_sdcard\": 17301626,\n        \"stat_notify_sdcard_usb\": 17301627,\n        \"stat_notify_sync\": 17301628,\n        \"stat_notify_sync_noanim\": 17301629,\n        \"stat_notify_voicemail\": 17301630,\n        \"stat_notify_missed_call\": 17301631,\n        \"stat_sys_data_bluetooth\": 17301632,\n        \"stat_sys_download\": 17301633,\n        \"stat_sys_download_done\": 17301634,\n        \"stat_sys_headset\": 17301635,\n        \"stat_sys_phone_call\": 17301636,\n        \"stat_sys_phone_call_forward\": 17301637,\n        \"stat_sys_phone_call_on_hold\": 17301638,\n        \"stat_sys_speakerphone\": 17301639,\n        \"stat_sys_upload\": 17301640,\n        \"stat_sys_upload_done\": 17301641,\n        \"stat_sys_warning\": 17301642,\n        \"status_bar_item_app_background\": 17301643,\n        \"status_bar_item_background\": 17301644,\n        \"sym_action_call\": 17301645,\n        \"sym_action_chat\": 17301646,\n        \"sym_action_email\": 17301647,\n        \"sym_call_incoming\": 17301648,\n        \"sym_call_missed\": 17301649,\n        \"sym_call_outgoing\": 17301650,\n        \"sym_def_app_icon\": 17301651,\n        \"sym_contact_card\": 17301652,\n        \"title_bar\": 17301653,\n        \"toast_frame\": 17301654,\n        \"zoom_plate\": 17301655,\n        \"screen_background_dark\": 17301656,\n        \"screen_background_light\": 17301657,\n        \"bottom_bar\": 17301658,\n        \"ic_dialog_info\": 17301659,\n        \"ic_menu_sort_alphabetically\": 17301660,\n        \"ic_menu_sort_by_size\": 17301661,\n        \"ic_btn_speak_now\": 17301668,\n        \"dark_header\": 17301669,\n        \"title_bar_tall\": 17301670,\n        \"stat_sys_vp_phone_call\": 17301671,\n        \"stat_sys_vp_phone_call_on_hold\": 17301672,\n        \"screen_background_dark_transparent\": 17301673,\n        \"screen_background_light_transparent\": 17301674,\n        \"stat_notify_sdcard_prepare\": 17301675,\n        \"presence_video_away\": 17301676,\n        \"presence_video_busy\": 17301677,\n        \"presence_video_online\": 17301678,\n        \"presence_audio_away\": 17301679,\n        \"presence_audio_busy\": 17301680,\n        \"presence_audio_online\": 17301681,\n        \"dialog_holo_dark_frame\": 17301682,\n        \"dialog_holo_light_frame\": 17301683\n    },\n    \"layout\": {\n        \"activity_list_item\": 17367040,\n        \"expandable_list_content\": 17367041,\n        \"preference_category\": 17367042,\n        \"simple_list_item_1\": 17367043,\n        \"simple_list_item_2\": 17367044,\n        \"simple_list_item_checked\": 17367045,\n        \"simple_expandable_list_item_1\": 17367046,\n        \"simple_expandable_list_item_2\": 17367047,\n        \"simple_spinner_item\": 17367048,\n        \"simple_spinner_dropdown_item\": 17367049,\n        \"simple_dropdown_item_1line\": 17367050,\n        \"simple_gallery_item\": 17367051,\n        \"test_list_item\": 17367052,\n        \"two_line_list_item\": 17367053,\n        \"browser_link_context_header\": 17367054,\n        \"simple_list_item_single_choice\": 17367055,\n        \"simple_list_item_multiple_choice\": 17367056,\n        \"select_dialog_item\": 17367057,\n        \"select_dialog_singlechoice\": 17367058,\n        \"select_dialog_multichoice\": 17367059,\n        \"list_content\": 17367060,\n        \"simple_selectable_list_item\": 17367061,\n        \"simple_list_item_activated_1\": 17367062,\n        \"simple_list_item_activated_2\": 17367063\n    },\n    \"anim\": {\n        \"fade_in\": 17432576,\n        \"fade_out\": 17432577,\n        \"slide_in_left\": 17432578,\n        \"slide_out_right\": 17432579,\n        \"accelerate_decelerate_interpolator\": 17432580,\n        \"accelerate_interpolator\": 17432581,\n        \"decelerate_interpolator\": 17432582,\n        \"anticipate_interpolator\": 17432583,\n        \"overshoot_interpolator\": 17432584,\n        \"anticipate_overshoot_interpolator\": 17432585,\n        \"bounce_interpolator\": 17432586,\n        \"linear_interpolator\": 17432587,\n        \"cycle_interpolator\": 17432588\n    },\n    \"integer\": {\n        \"config_shortAnimTime\": 17694720,\n        \"config_mediumAnimTime\": 17694721,\n        \"config_longAnimTime\": 17694722,\n        \"status_bar_notification_info_maxnum\": 17694723\n    },\n    \"animator\": {\n        \"fade_in\": 17498112,\n        \"fade_out\": 17498113\n    },\n    \"interpolator\": {\n        \"accelerate_quad\": 17563648,\n        \"decelerate_quad\": 17563649,\n        \"accelerate_cubic\": 17563650,\n        \"decelerate_cubic\": 17563651,\n        \"accelerate_quint\": 17563652,\n        \"decelerate_quint\": 17563653,\n        \"accelerate_decelerate\": 17563654,\n        \"anticipate\": 17563655,\n        \"overshoot\": 17563656,\n        \"anticipate_overshoot\": 17563657,\n        \"bounce\": 17563658,\n        \"linear\": 17563659,\n        \"cycle\": 17563660,\n        \"fast_out_slow_in\": 17563661,\n        \"linear_out_slow_in\": 17563662,\n        \"fast_out_linear_in\": 17563663\n    },\n    \"mipmap\": {\n        \"sym_def_app_icon\": 17629184\n    },\n    \"transition\": {\n        \"no_transition\": 17760256,\n        \"move\": 17760257,\n        \"fade\": 17760258,\n        \"explode\": 17760259,\n        \"slide_bottom\": 17760260,\n        \"slide_top\": 17760261,\n        \"slide_right\": 17760262,\n        \"slide_left\": 17760263\n    },\n    \"raw\": {\n        \"loaderror\": 17825792,\n        \"nodomain\": 17825793\n    }\n}\n"
  },
  {
    "path": "libs/androguard/core/resources/public.py",
    "content": "import os\nfrom xml.dom import minidom\n\n_public_res = None\n# copy the newest sdk/platforms/android-?/data/res/values/public.xml here\nif _public_res is None:\n    _public_res = {}\n    root = os.path.dirname(os.path.realpath(__file__))\n    xmlfile = os.path.join(root, \"public.xml\")\n    if os.path.isfile(xmlfile):\n        with open(xmlfile, \"r\") as fp:\n            _xml = minidom.parseString(fp.read())\n            for element in _xml.getElementsByTagName(\"public\"):\n                _type = element.getAttribute('type')\n                _name = element.getAttribute('name')\n                _id = int(element.getAttribute('id'), 16)\n                if _type not in _public_res:\n                    _public_res[_type] = {}\n                _public_res[_type][_name] = _id\n    else:\n        raise Exception(\n            \"need to copy the sdk/platforms/android-?/data/res/values/public.xml here\"\n        )\n\nSYSTEM_RESOURCES = {\n    \"attributes\": {\n        \"forward\": {k: v for k, v in _public_res['attr'].items()},\n        \"inverse\": {v: k for k, v in _public_res['attr'].items()},\n    },\n    \"styles\": {\n        \"forward\": {k: v for k, v in _public_res['style'].items()},\n        \"inverse\": {v: k for k, v in _public_res['style'].items()},\n    },\n}\n\n\nif __name__ == '__main__':\n    import json\n\n    _resources = None\n    if _resources is None:\n        root = os.path.dirname(os.path.realpath(__file__))\n        resfile = os.path.join(root, \"public.json\")\n\n        if os.path.isfile(resfile):\n            with open(resfile, \"r\") as fp:\n                _resources = json.load(fp)\n        else:\n            # TODO raise error instead?\n            _resources = {}\n    for _type in set([] + list(_public_res.keys()) + list(_resources.keys())):\n        for k in set(\n            []\n            + list(_public_res.get(_type, {}).keys())\n            + list(_resources.get(_type, {}).keys())\n        ):\n            a, b = (\n                _public_res.get(_type, {}).get(k),\n                _resources.get(_type, {}).get(k),\n            )\n            if a != b:\n                print(k, a, b)\n    print(None)\n"
  },
  {
    "path": "libs/androguard/core/resources/public.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- This file defines the base public resources exported by the\n     platform, which must always exist. -->\n\n<!-- ***************************************************************\n     ***************************************************************\n     IMPORTANT NOTE FOR ANYONE MODIFYING THIS FILE\n     READ THIS BEFORE YOU MAKE ANY CHANGES\n\n     This file defines the binary compatibility for resources.  As such,\n     you must be very careful when making changes here, or you will\n     completely break backwards compatibility with old applications.\n\n     To avoid breaking compatibility, all new resources must be placed\n     at the end of the list of resources of the same type.  Placing a resource\n     in the middle of type will cause all following resources to be\n     assigned new resource numbers, breaking compatibility.\n\n     ***************************************************************\n     *************************************************************** -->\n<resources>\n\n<!-- ===============================================================\n     Resources for version 1 of the platform.\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"theme\" id=\"0x01010000\" />\n  <public type=\"attr\" name=\"label\" id=\"0x01010001\" />\n  <public type=\"attr\" name=\"icon\" id=\"0x01010002\" />\n  <public type=\"attr\" name=\"name\" id=\"0x01010003\" />\n  <public type=\"attr\" name=\"manageSpaceActivity\" id=\"0x01010004\" />\n  <public type=\"attr\" name=\"allowClearUserData\" id=\"0x01010005\" />\n  <public type=\"attr\" name=\"permission\" id=\"0x01010006\" />\n  <public type=\"attr\" name=\"readPermission\" id=\"0x01010007\" />\n  <public type=\"attr\" name=\"writePermission\" id=\"0x01010008\" />\n  <public type=\"attr\" name=\"protectionLevel\" id=\"0x01010009\" />\n  <public type=\"attr\" name=\"permissionGroup\" id=\"0x0101000a\" />\n  <public type=\"attr\" name=\"sharedUserId\" id=\"0x0101000b\" />\n  <public type=\"attr\" name=\"hasCode\" id=\"0x0101000c\" />\n  <public type=\"attr\" name=\"persistent\" id=\"0x0101000d\" />\n  <public type=\"attr\" name=\"enabled\" id=\"0x0101000e\" />\n  <public type=\"attr\" name=\"debuggable\" id=\"0x0101000f\" />\n  <public type=\"attr\" name=\"exported\" id=\"0x01010010\" />\n  <public type=\"attr\" name=\"process\" id=\"0x01010011\" />\n  <public type=\"attr\" name=\"taskAffinity\" id=\"0x01010012\" />\n  <public type=\"attr\" name=\"multiprocess\" id=\"0x01010013\" />\n  <public type=\"attr\" name=\"finishOnTaskLaunch\" id=\"0x01010014\" />\n  <public type=\"attr\" name=\"clearTaskOnLaunch\" id=\"0x01010015\" />\n  <public type=\"attr\" name=\"stateNotNeeded\" id=\"0x01010016\" />\n  <public type=\"attr\" name=\"excludeFromRecents\" id=\"0x01010017\" />\n  <public type=\"attr\" name=\"authorities\" id=\"0x01010018\" />\n  <public type=\"attr\" name=\"syncable\" id=\"0x01010019\" />\n  <public type=\"attr\" name=\"initOrder\" id=\"0x0101001a\" />\n  <public type=\"attr\" name=\"grantUriPermissions\" id=\"0x0101001b\" />\n  <public type=\"attr\" name=\"priority\" id=\"0x0101001c\" />\n  <public type=\"attr\" name=\"launchMode\" id=\"0x0101001d\" />\n  <public type=\"attr\" name=\"screenOrientation\" id=\"0x0101001e\" />\n  <public type=\"attr\" name=\"configChanges\" id=\"0x0101001f\" />\n  <public type=\"attr\" name=\"description\" id=\"0x01010020\" />\n  <public type=\"attr\" name=\"targetPackage\" id=\"0x01010021\" />\n  <public type=\"attr\" name=\"handleProfiling\" id=\"0x01010022\" />\n  <public type=\"attr\" name=\"functionalTest\" id=\"0x01010023\" />\n  <public type=\"attr\" name=\"value\" id=\"0x01010024\" />\n  <public type=\"attr\" name=\"resource\" id=\"0x01010025\" />\n  <public type=\"attr\" name=\"mimeType\" id=\"0x01010026\" />\n  <public type=\"attr\" name=\"scheme\" id=\"0x01010027\" />\n  <public type=\"attr\" name=\"host\" id=\"0x01010028\" />\n  <public type=\"attr\" name=\"port\" id=\"0x01010029\" />\n  <public type=\"attr\" name=\"path\" id=\"0x0101002a\" />\n  <public type=\"attr\" name=\"pathPrefix\" id=\"0x0101002b\" />\n  <public type=\"attr\" name=\"pathPattern\" id=\"0x0101002c\" />\n  <public type=\"attr\" name=\"action\" id=\"0x0101002d\" />\n  <public type=\"attr\" name=\"data\" id=\"0x0101002e\" />\n  <public type=\"attr\" name=\"targetClass\" id=\"0x0101002f\" />\n  <public type=\"attr\" name=\"colorForeground\" id=\"0x01010030\" />\n  <public type=\"attr\" name=\"colorBackground\" id=\"0x01010031\" />\n  <public type=\"attr\" name=\"backgroundDimAmount\" id=\"0x01010032\" />\n  <public type=\"attr\" name=\"disabledAlpha\" id=\"0x01010033\" />\n  <public type=\"attr\" name=\"textAppearance\" id=\"0x01010034\" />\n  <public type=\"attr\" name=\"textAppearanceInverse\" id=\"0x01010035\" />\n  <public type=\"attr\" name=\"textColorPrimary\" id=\"0x01010036\" />\n  <public type=\"attr\" name=\"textColorPrimaryDisableOnly\" id=\"0x01010037\" />\n  <public type=\"attr\" name=\"textColorSecondary\" id=\"0x01010038\" />\n  <public type=\"attr\" name=\"textColorPrimaryInverse\" id=\"0x01010039\" />\n  <public type=\"attr\" name=\"textColorSecondaryInverse\" id=\"0x0101003a\" />\n  <public type=\"attr\" name=\"textColorPrimaryNoDisable\" id=\"0x0101003b\" />\n  <public type=\"attr\" name=\"textColorSecondaryNoDisable\" id=\"0x0101003c\" />\n  <public type=\"attr\" name=\"textColorPrimaryInverseNoDisable\" id=\"0x0101003d\" />\n  <public type=\"attr\" name=\"textColorSecondaryInverseNoDisable\" id=\"0x0101003e\" />\n  <public type=\"attr\" name=\"textColorHintInverse\" id=\"0x0101003f\" />\n  <public type=\"attr\" name=\"textAppearanceLarge\" id=\"0x01010040\" />\n  <public type=\"attr\" name=\"textAppearanceMedium\" id=\"0x01010041\" />\n  <public type=\"attr\" name=\"textAppearanceSmall\" id=\"0x01010042\" />\n  <public type=\"attr\" name=\"textAppearanceLargeInverse\" id=\"0x01010043\" />\n  <public type=\"attr\" name=\"textAppearanceMediumInverse\" id=\"0x01010044\" />\n  <public type=\"attr\" name=\"textAppearanceSmallInverse\" id=\"0x01010045\" />\n  <public type=\"attr\" name=\"textCheckMark\" id=\"0x01010046\" />\n  <public type=\"attr\" name=\"textCheckMarkInverse\" id=\"0x01010047\" />\n  <public type=\"attr\" name=\"buttonStyle\" id=\"0x01010048\" />\n  <public type=\"attr\" name=\"buttonStyleSmall\" id=\"0x01010049\" />\n  <public type=\"attr\" name=\"buttonStyleInset\" id=\"0x0101004a\" />\n  <public type=\"attr\" name=\"buttonStyleToggle\" id=\"0x0101004b\" />\n  <public type=\"attr\" name=\"galleryItemBackground\" id=\"0x0101004c\" />\n  <public type=\"attr\" name=\"listPreferredItemHeight\" id=\"0x0101004d\" />\n  <public type=\"attr\" name=\"expandableListPreferredItemPaddingLeft\" id=\"0x0101004e\" />\n  <public type=\"attr\" name=\"expandableListPreferredChildPaddingLeft\" id=\"0x0101004f\" />\n  <public type=\"attr\" name=\"expandableListPreferredItemIndicatorLeft\" id=\"0x01010050\" />\n  <public type=\"attr\" name=\"expandableListPreferredItemIndicatorRight\" id=\"0x01010051\" />\n  <public type=\"attr\" name=\"expandableListPreferredChildIndicatorLeft\" id=\"0x01010052\" />\n  <public type=\"attr\" name=\"expandableListPreferredChildIndicatorRight\" id=\"0x01010053\" />\n  <public type=\"attr\" name=\"windowBackground\" id=\"0x01010054\" />\n  <public type=\"attr\" name=\"windowFrame\" id=\"0x01010055\" />\n  <public type=\"attr\" name=\"windowNoTitle\" id=\"0x01010056\" />\n  <public type=\"attr\" name=\"windowIsFloating\" id=\"0x01010057\" />\n  <public type=\"attr\" name=\"windowIsTranslucent\" id=\"0x01010058\" />\n  <public type=\"attr\" name=\"windowContentOverlay\" id=\"0x01010059\" />\n  <public type=\"attr\" name=\"windowTitleSize\" id=\"0x0101005a\" />\n  <public type=\"attr\" name=\"windowTitleStyle\" id=\"0x0101005b\" />\n  <public type=\"attr\" name=\"windowTitleBackgroundStyle\" id=\"0x0101005c\" />\n  <public type=\"attr\" name=\"alertDialogStyle\" id=\"0x0101005d\" />\n  <public type=\"attr\" name=\"panelBackground\" id=\"0x0101005e\" />\n  <public type=\"attr\" name=\"panelFullBackground\" id=\"0x0101005f\" />\n  <public type=\"attr\" name=\"panelColorForeground\" id=\"0x01010060\" />\n  <public type=\"attr\" name=\"panelColorBackground\" id=\"0x01010061\" />\n  <public type=\"attr\" name=\"panelTextAppearance\" id=\"0x01010062\" />\n  <public type=\"attr\" name=\"scrollbarSize\" id=\"0x01010063\" />\n  <public type=\"attr\" name=\"scrollbarThumbHorizontal\" id=\"0x01010064\" />\n  <public type=\"attr\" name=\"scrollbarThumbVertical\" id=\"0x01010065\" />\n  <public type=\"attr\" name=\"scrollbarTrackHorizontal\" id=\"0x01010066\" />\n  <public type=\"attr\" name=\"scrollbarTrackVertical\" id=\"0x01010067\" />\n  <public type=\"attr\" name=\"scrollbarAlwaysDrawHorizontalTrack\" id=\"0x01010068\" />\n  <public type=\"attr\" name=\"scrollbarAlwaysDrawVerticalTrack\" id=\"0x01010069\" />\n  <public type=\"attr\" name=\"absListViewStyle\" id=\"0x0101006a\" />\n  <public type=\"attr\" name=\"autoCompleteTextViewStyle\" id=\"0x0101006b\" />\n  <public type=\"attr\" name=\"checkboxStyle\" id=\"0x0101006c\" />\n  <public type=\"attr\" name=\"dropDownListViewStyle\" id=\"0x0101006d\" />\n  <public type=\"attr\" name=\"editTextStyle\" id=\"0x0101006e\" />\n  <public type=\"attr\" name=\"expandableListViewStyle\" id=\"0x0101006f\" />\n  <public type=\"attr\" name=\"galleryStyle\" id=\"0x01010070\" />\n  <public type=\"attr\" name=\"gridViewStyle\" id=\"0x01010071\" />\n  <public type=\"attr\" name=\"imageButtonStyle\" id=\"0x01010072\" />\n  <public type=\"attr\" name=\"imageWellStyle\" id=\"0x01010073\" />\n  <public type=\"attr\" name=\"listViewStyle\" id=\"0x01010074\" />\n  <public type=\"attr\" name=\"listViewWhiteStyle\" id=\"0x01010075\" />\n  <public type=\"attr\" name=\"popupWindowStyle\" id=\"0x01010076\" />\n  <public type=\"attr\" name=\"progressBarStyle\" id=\"0x01010077\" />\n  <public type=\"attr\" name=\"progressBarStyleHorizontal\" id=\"0x01010078\" />\n  <public type=\"attr\" name=\"progressBarStyleSmall\" id=\"0x01010079\" />\n  <public type=\"attr\" name=\"progressBarStyleLarge\" id=\"0x0101007a\" />\n  <public type=\"attr\" name=\"seekBarStyle\" id=\"0x0101007b\" />\n  <public type=\"attr\" name=\"ratingBarStyle\" id=\"0x0101007c\" />\n  <public type=\"attr\" name=\"ratingBarStyleSmall\" id=\"0x0101007d\" />\n  <public type=\"attr\" name=\"radioButtonStyle\" id=\"0x0101007e\" />\n  <public type=\"attr\" name=\"scrollbarStyle\" id=\"0x0101007f\" />\n  <public type=\"attr\" name=\"scrollViewStyle\" id=\"0x01010080\" />\n  <public type=\"attr\" name=\"spinnerStyle\" id=\"0x01010081\" />\n  <public type=\"attr\" name=\"starStyle\" id=\"0x01010082\" />\n  <public type=\"attr\" name=\"tabWidgetStyle\" id=\"0x01010083\" />\n  <public type=\"attr\" name=\"textViewStyle\" id=\"0x01010084\" />\n  <public type=\"attr\" name=\"webViewStyle\" id=\"0x01010085\" />\n  <public type=\"attr\" name=\"dropDownItemStyle\" id=\"0x01010086\" />\n  <public type=\"attr\" name=\"spinnerDropDownItemStyle\" id=\"0x01010087\" />\n  <public type=\"attr\" name=\"dropDownHintAppearance\" id=\"0x01010088\" />\n  <public type=\"attr\" name=\"spinnerItemStyle\" id=\"0x01010089\" />\n  <public type=\"attr\" name=\"mapViewStyle\" id=\"0x0101008a\" />\n  <public type=\"attr\" name=\"preferenceScreenStyle\" id=\"0x0101008b\" />\n  <public type=\"attr\" name=\"preferenceCategoryStyle\" id=\"0x0101008c\" />\n  <public type=\"attr\" name=\"preferenceInformationStyle\" id=\"0x0101008d\" />\n  <public type=\"attr\" name=\"preferenceStyle\" id=\"0x0101008e\" />\n  <public type=\"attr\" name=\"checkBoxPreferenceStyle\" id=\"0x0101008f\" />\n  <public type=\"attr\" name=\"yesNoPreferenceStyle\" id=\"0x01010090\" />\n  <public type=\"attr\" name=\"dialogPreferenceStyle\" id=\"0x01010091\" />\n  <public type=\"attr\" name=\"editTextPreferenceStyle\" id=\"0x01010092\" />\n  <public type=\"attr\" name=\"ringtonePreferenceStyle\" id=\"0x01010093\" />\n  <public type=\"attr\" name=\"preferenceLayoutChild\" id=\"0x01010094\" />\n  <public type=\"attr\" name=\"textSize\" id=\"0x01010095\" />\n  <public type=\"attr\" name=\"typeface\" id=\"0x01010096\" />\n  <public type=\"attr\" name=\"textStyle\" id=\"0x01010097\" />\n  <public type=\"attr\" name=\"textColor\" id=\"0x01010098\" />\n  <public type=\"attr\" name=\"textColorHighlight\" id=\"0x01010099\" />\n  <public type=\"attr\" name=\"textColorHint\" id=\"0x0101009a\" />\n  <public type=\"attr\" name=\"textColorLink\" id=\"0x0101009b\" />\n  <public type=\"attr\" name=\"state_focused\" id=\"0x0101009c\" />\n  <public type=\"attr\" name=\"state_window_focused\" id=\"0x0101009d\" />\n  <public type=\"attr\" name=\"state_enabled\" id=\"0x0101009e\" />\n  <public type=\"attr\" name=\"state_checkable\" id=\"0x0101009f\" />\n  <public type=\"attr\" name=\"state_checked\" id=\"0x010100a0\" />\n  <public type=\"attr\" name=\"state_selected\" id=\"0x010100a1\" />\n  <public type=\"attr\" name=\"state_active\" id=\"0x010100a2\" />\n  <public type=\"attr\" name=\"state_single\" id=\"0x010100a3\" />\n  <public type=\"attr\" name=\"state_first\" id=\"0x010100a4\" />\n  <public type=\"attr\" name=\"state_middle\" id=\"0x010100a5\" />\n  <public type=\"attr\" name=\"state_last\" id=\"0x010100a6\" />\n  <public type=\"attr\" name=\"state_pressed\" id=\"0x010100a7\" />\n  <public type=\"attr\" name=\"state_expanded\" id=\"0x010100a8\" />\n  <public type=\"attr\" name=\"state_empty\" id=\"0x010100a9\" />\n  <public type=\"attr\" name=\"state_above_anchor\" id=\"0x010100aa\" />\n  <public type=\"attr\" name=\"ellipsize\" id=\"0x010100ab\" />\n  <public type=\"attr\" name=\"x\" id=\"0x010100ac\" />\n  <public type=\"attr\" name=\"y\" id=\"0x010100ad\" />\n  <public type=\"attr\" name=\"windowAnimationStyle\" id=\"0x010100ae\" />\n  <public type=\"attr\" name=\"gravity\" id=\"0x010100af\" />\n  <public type=\"attr\" name=\"autoLink\" id=\"0x010100b0\" />\n  <public type=\"attr\" name=\"linksClickable\" id=\"0x010100b1\" />\n  <public type=\"attr\" name=\"entries\" id=\"0x010100b2\" />\n  <public type=\"attr\" name=\"layout_gravity\" id=\"0x010100b3\" />\n  <public type=\"attr\" name=\"windowEnterAnimation\" id=\"0x010100b4\" />\n  <public type=\"attr\" name=\"windowExitAnimation\" id=\"0x010100b5\" />\n  <public type=\"attr\" name=\"windowShowAnimation\" id=\"0x010100b6\" />\n  <public type=\"attr\" name=\"windowHideAnimation\" id=\"0x010100b7\" />\n  <public type=\"attr\" name=\"activityOpenEnterAnimation\" id=\"0x010100b8\" />\n  <public type=\"attr\" name=\"activityOpenExitAnimation\" id=\"0x010100b9\" />\n  <public type=\"attr\" name=\"activityCloseEnterAnimation\" id=\"0x010100ba\" />\n  <public type=\"attr\" name=\"activityCloseExitAnimation\" id=\"0x010100bb\" />\n  <public type=\"attr\" name=\"taskOpenEnterAnimation\" id=\"0x010100bc\" />\n  <public type=\"attr\" name=\"taskOpenExitAnimation\" id=\"0x010100bd\" />\n  <public type=\"attr\" name=\"taskCloseEnterAnimation\" id=\"0x010100be\" />\n  <public type=\"attr\" name=\"taskCloseExitAnimation\" id=\"0x010100bf\" />\n  <public type=\"attr\" name=\"taskToFrontEnterAnimation\" id=\"0x010100c0\" />\n  <public type=\"attr\" name=\"taskToFrontExitAnimation\" id=\"0x010100c1\" />\n  <public type=\"attr\" name=\"taskToBackEnterAnimation\" id=\"0x010100c2\" />\n  <public type=\"attr\" name=\"taskToBackExitAnimation\" id=\"0x010100c3\" />\n  <public type=\"attr\" name=\"orientation\" id=\"0x010100c4\" />\n  <public type=\"attr\" name=\"keycode\" id=\"0x010100c5\" />\n  <public type=\"attr\" name=\"fullDark\" id=\"0x010100c6\" />\n  <public type=\"attr\" name=\"topDark\" id=\"0x010100c7\" />\n  <public type=\"attr\" name=\"centerDark\" id=\"0x010100c8\" />\n  <public type=\"attr\" name=\"bottomDark\" id=\"0x010100c9\" />\n  <public type=\"attr\" name=\"fullBright\" id=\"0x010100ca\" />\n  <public type=\"attr\" name=\"topBright\" id=\"0x010100cb\" />\n  <public type=\"attr\" name=\"centerBright\" id=\"0x010100cc\" />\n  <public type=\"attr\" name=\"bottomBright\" id=\"0x010100cd\" />\n  <public type=\"attr\" name=\"bottomMedium\" id=\"0x010100ce\" />\n  <public type=\"attr\" name=\"centerMedium\" id=\"0x010100cf\" />\n  <public type=\"attr\" name=\"id\" id=\"0x010100d0\" />\n  <public type=\"attr\" name=\"tag\" id=\"0x010100d1\" />\n  <public type=\"attr\" name=\"scrollX\" id=\"0x010100d2\" />\n  <public type=\"attr\" name=\"scrollY\" id=\"0x010100d3\" />\n  <public type=\"attr\" name=\"background\" id=\"0x010100d4\" />\n  <public type=\"attr\" name=\"padding\" id=\"0x010100d5\" />\n  <public type=\"attr\" name=\"paddingLeft\" id=\"0x010100d6\" />\n  <public type=\"attr\" name=\"paddingTop\" id=\"0x010100d7\" />\n  <public type=\"attr\" name=\"paddingRight\" id=\"0x010100d8\" />\n  <public type=\"attr\" name=\"paddingBottom\" id=\"0x010100d9\" />\n  <public type=\"attr\" name=\"focusable\" id=\"0x010100da\" />\n  <public type=\"attr\" name=\"focusableInTouchMode\" id=\"0x010100db\" />\n  <public type=\"attr\" name=\"visibility\" id=\"0x010100dc\" />\n  <public type=\"attr\" name=\"fitsSystemWindows\" id=\"0x010100dd\" />\n  <public type=\"attr\" name=\"scrollbars\" id=\"0x010100de\" />\n  <public type=\"attr\" name=\"fadingEdge\" id=\"0x010100df\" />\n  <public type=\"attr\" name=\"fadingEdgeLength\" id=\"0x010100e0\" />\n  <public type=\"attr\" name=\"nextFocusLeft\" id=\"0x010100e1\" />\n  <public type=\"attr\" name=\"nextFocusRight\" id=\"0x010100e2\" />\n  <public type=\"attr\" name=\"nextFocusUp\" id=\"0x010100e3\" />\n  <public type=\"attr\" name=\"nextFocusDown\" id=\"0x010100e4\" />\n  <public type=\"attr\" name=\"clickable\" id=\"0x010100e5\" />\n  <public type=\"attr\" name=\"longClickable\" id=\"0x010100e6\" />\n  <public type=\"attr\" name=\"saveEnabled\" id=\"0x010100e7\" />\n  <public type=\"attr\" name=\"drawingCacheQuality\" id=\"0x010100e8\" />\n  <public type=\"attr\" name=\"duplicateParentState\" id=\"0x010100e9\" />\n  <public type=\"attr\" name=\"clipChildren\" id=\"0x010100ea\" />\n  <public type=\"attr\" name=\"clipToPadding\" id=\"0x010100eb\" />\n  <public type=\"attr\" name=\"layoutAnimation\" id=\"0x010100ec\" />\n  <public type=\"attr\" name=\"animationCache\" id=\"0x010100ed\" />\n  <public type=\"attr\" name=\"persistentDrawingCache\" id=\"0x010100ee\" />\n  <public type=\"attr\" name=\"alwaysDrawnWithCache\" id=\"0x010100ef\" />\n  <public type=\"attr\" name=\"addStatesFromChildren\" id=\"0x010100f0\" />\n  <public type=\"attr\" name=\"descendantFocusability\" id=\"0x010100f1\" />\n  <public type=\"attr\" name=\"layout\" id=\"0x010100f2\" />\n  <public type=\"attr\" name=\"inflatedId\" id=\"0x010100f3\" />\n  <public type=\"attr\" name=\"layout_width\" id=\"0x010100f4\" />\n  <public type=\"attr\" name=\"layout_height\" id=\"0x010100f5\" />\n  <public type=\"attr\" name=\"layout_margin\" id=\"0x010100f6\" />\n  <public type=\"attr\" name=\"layout_marginLeft\" id=\"0x010100f7\" />\n  <public type=\"attr\" name=\"layout_marginTop\" id=\"0x010100f8\" />\n  <public type=\"attr\" name=\"layout_marginRight\" id=\"0x010100f9\" />\n  <public type=\"attr\" name=\"layout_marginBottom\" id=\"0x010100fa\" />\n  <public type=\"attr\" name=\"listSelector\" id=\"0x010100fb\" />\n  <public type=\"attr\" name=\"drawSelectorOnTop\" id=\"0x010100fc\" />\n  <public type=\"attr\" name=\"stackFromBottom\" id=\"0x010100fd\" />\n  <public type=\"attr\" name=\"scrollingCache\" id=\"0x010100fe\" />\n  <public type=\"attr\" name=\"textFilterEnabled\" id=\"0x010100ff\" />\n  <public type=\"attr\" name=\"transcriptMode\" id=\"0x01010100\" />\n  <public type=\"attr\" name=\"cacheColorHint\" id=\"0x01010101\" />\n  <public type=\"attr\" name=\"dial\" id=\"0x01010102\" />\n  <public type=\"attr\" name=\"hand_hour\" id=\"0x01010103\" />\n  <public type=\"attr\" name=\"hand_minute\" id=\"0x01010104\" />\n  <public type=\"attr\" name=\"format\" id=\"0x01010105\" />\n  <public type=\"attr\" name=\"checked\" id=\"0x01010106\" />\n  <public type=\"attr\" name=\"button\" id=\"0x01010107\" />\n  <public type=\"attr\" name=\"checkMark\" id=\"0x01010108\" />\n  <public type=\"attr\" name=\"foreground\" id=\"0x01010109\" />\n  <public type=\"attr\" name=\"measureAllChildren\" id=\"0x0101010a\" />\n  <public type=\"attr\" name=\"groupIndicator\" id=\"0x0101010b\" />\n  <public type=\"attr\" name=\"childIndicator\" id=\"0x0101010c\" />\n  <public type=\"attr\" name=\"indicatorLeft\" id=\"0x0101010d\" />\n  <public type=\"attr\" name=\"indicatorRight\" id=\"0x0101010e\" />\n  <public type=\"attr\" name=\"childIndicatorLeft\" id=\"0x0101010f\" />\n  <public type=\"attr\" name=\"childIndicatorRight\" id=\"0x01010110\" />\n  <public type=\"attr\" name=\"childDivider\" id=\"0x01010111\" />\n  <public type=\"attr\" name=\"animationDuration\" id=\"0x01010112\" />\n  <public type=\"attr\" name=\"spacing\" id=\"0x01010113\" />\n  <public type=\"attr\" name=\"horizontalSpacing\" id=\"0x01010114\" />\n  <public type=\"attr\" name=\"verticalSpacing\" id=\"0x01010115\" />\n  <public type=\"attr\" name=\"stretchMode\" id=\"0x01010116\" />\n  <public type=\"attr\" name=\"columnWidth\" id=\"0x01010117\" />\n  <public type=\"attr\" name=\"numColumns\" id=\"0x01010118\" />\n  <public type=\"attr\" name=\"src\" id=\"0x01010119\" />\n  <public type=\"attr\" name=\"antialias\" id=\"0x0101011a\" />\n  <public type=\"attr\" name=\"filter\" id=\"0x0101011b\" />\n  <public type=\"attr\" name=\"dither\" id=\"0x0101011c\" />\n  <public type=\"attr\" name=\"scaleType\" id=\"0x0101011d\" />\n  <public type=\"attr\" name=\"adjustViewBounds\" id=\"0x0101011e\" />\n  <public type=\"attr\" name=\"maxWidth\" id=\"0x0101011f\" />\n  <public type=\"attr\" name=\"maxHeight\" id=\"0x01010120\" />\n  <public type=\"attr\" name=\"tint\" id=\"0x01010121\" />\n  <public type=\"attr\" name=\"baselineAlignBottom\" id=\"0x01010122\" />\n  <public type=\"attr\" name=\"cropToPadding\" id=\"0x01010123\" />\n  <public type=\"attr\" name=\"textOn\" id=\"0x01010124\" />\n  <public type=\"attr\" name=\"textOff\" id=\"0x01010125\" />\n  <public type=\"attr\" name=\"baselineAligned\" id=\"0x01010126\" />\n  <public type=\"attr\" name=\"baselineAlignedChildIndex\" id=\"0x01010127\" />\n  <public type=\"attr\" name=\"weightSum\" id=\"0x01010128\" />\n  <public type=\"attr\" name=\"divider\" id=\"0x01010129\" />\n  <public type=\"attr\" name=\"dividerHeight\" id=\"0x0101012a\" />\n  <public type=\"attr\" name=\"choiceMode\" id=\"0x0101012b\" />\n  <public type=\"attr\" name=\"itemTextAppearance\" id=\"0x0101012c\" />\n  <public type=\"attr\" name=\"horizontalDivider\" id=\"0x0101012d\" />\n  <public type=\"attr\" name=\"verticalDivider\" id=\"0x0101012e\" />\n  <public type=\"attr\" name=\"headerBackground\" id=\"0x0101012f\" />\n  <public type=\"attr\" name=\"itemBackground\" id=\"0x01010130\" />\n  <public type=\"attr\" name=\"itemIconDisabledAlpha\" id=\"0x01010131\" />\n  <public type=\"attr\" name=\"rowHeight\" id=\"0x01010132\" />\n  <public type=\"attr\" name=\"maxRows\" id=\"0x01010133\" />\n  <public type=\"attr\" name=\"maxItemsPerRow\" id=\"0x01010134\" />\n  <public type=\"attr\" name=\"moreIcon\" id=\"0x01010135\" />\n  <public type=\"attr\" name=\"max\" id=\"0x01010136\" />\n  <public type=\"attr\" name=\"progress\" id=\"0x01010137\" />\n  <public type=\"attr\" name=\"secondaryProgress\" id=\"0x01010138\" />\n  <public type=\"attr\" name=\"indeterminate\" id=\"0x01010139\" />\n  <public type=\"attr\" name=\"indeterminateOnly\" id=\"0x0101013a\" />\n  <public type=\"attr\" name=\"indeterminateDrawable\" id=\"0x0101013b\" />\n  <public type=\"attr\" name=\"progressDrawable\" id=\"0x0101013c\" />\n  <public type=\"attr\" name=\"indeterminateDuration\" id=\"0x0101013d\" />\n  <public type=\"attr\" name=\"indeterminateBehavior\" id=\"0x0101013e\" />\n  <public type=\"attr\" name=\"minWidth\" id=\"0x0101013f\" />\n  <public type=\"attr\" name=\"minHeight\" id=\"0x01010140\" />\n  <public type=\"attr\" name=\"interpolator\" id=\"0x01010141\" />\n  <public type=\"attr\" name=\"thumb\" id=\"0x01010142\" />\n  <public type=\"attr\" name=\"thumbOffset\" id=\"0x01010143\" />\n  <public type=\"attr\" name=\"numStars\" id=\"0x01010144\" />\n  <public type=\"attr\" name=\"rating\" id=\"0x01010145\" />\n  <public type=\"attr\" name=\"stepSize\" id=\"0x01010146\" />\n  <public type=\"attr\" name=\"isIndicator\" id=\"0x01010147\" />\n  <public type=\"attr\" name=\"checkedButton\" id=\"0x01010148\" />\n  <public type=\"attr\" name=\"stretchColumns\" id=\"0x01010149\" />\n  <public type=\"attr\" name=\"shrinkColumns\" id=\"0x0101014a\" />\n  <public type=\"attr\" name=\"collapseColumns\" id=\"0x0101014b\" />\n  <public type=\"attr\" name=\"layout_column\" id=\"0x0101014c\" />\n  <public type=\"attr\" name=\"layout_span\" id=\"0x0101014d\" />\n  <public type=\"attr\" name=\"bufferType\" id=\"0x0101014e\" />\n  <public type=\"attr\" name=\"text\" id=\"0x0101014f\" />\n  <public type=\"attr\" name=\"hint\" id=\"0x01010150\" />\n  <public type=\"attr\" name=\"textScaleX\" id=\"0x01010151\" />\n  <public type=\"attr\" name=\"cursorVisible\" id=\"0x01010152\" />\n  <public type=\"attr\" name=\"maxLines\" id=\"0x01010153\" />\n  <public type=\"attr\" name=\"lines\" id=\"0x01010154\" />\n  <public type=\"attr\" name=\"height\" id=\"0x01010155\" />\n  <public type=\"attr\" name=\"minLines\" id=\"0x01010156\" />\n  <public type=\"attr\" name=\"maxEms\" id=\"0x01010157\" />\n  <public type=\"attr\" name=\"ems\" id=\"0x01010158\" />\n  <public type=\"attr\" name=\"width\" id=\"0x01010159\" />\n  <public type=\"attr\" name=\"minEms\" id=\"0x0101015a\" />\n  <public type=\"attr\" name=\"scrollHorizontally\" id=\"0x0101015b\" />\n  <public type=\"attr\" name=\"password\" id=\"0x0101015c\" />\n  <public type=\"attr\" name=\"singleLine\" id=\"0x0101015d\" />\n  <public type=\"attr\" name=\"selectAllOnFocus\" id=\"0x0101015e\" />\n  <public type=\"attr\" name=\"includeFontPadding\" id=\"0x0101015f\" />\n  <public type=\"attr\" name=\"maxLength\" id=\"0x01010160\" />\n  <public type=\"attr\" name=\"shadowColor\" id=\"0x01010161\" />\n  <public type=\"attr\" name=\"shadowDx\" id=\"0x01010162\" />\n  <public type=\"attr\" name=\"shadowDy\" id=\"0x01010163\" />\n  <public type=\"attr\" name=\"shadowRadius\" id=\"0x01010164\" />\n  <public type=\"attr\" name=\"numeric\" id=\"0x01010165\" />\n  <public type=\"attr\" name=\"digits\" id=\"0x01010166\" />\n  <public type=\"attr\" name=\"phoneNumber\" id=\"0x01010167\" />\n  <public type=\"attr\" name=\"inputMethod\" id=\"0x01010168\" />\n  <public type=\"attr\" name=\"capitalize\" id=\"0x01010169\" />\n  <public type=\"attr\" name=\"autoText\" id=\"0x0101016a\" />\n  <public type=\"attr\" name=\"editable\" id=\"0x0101016b\" />\n  <public type=\"attr\" name=\"freezesText\" id=\"0x0101016c\" />\n  <public type=\"attr\" name=\"drawableTop\" id=\"0x0101016d\" />\n  <public type=\"attr\" name=\"drawableBottom\" id=\"0x0101016e\" />\n  <public type=\"attr\" name=\"drawableLeft\" id=\"0x0101016f\" />\n  <public type=\"attr\" name=\"drawableRight\" id=\"0x01010170\" />\n  <public type=\"attr\" name=\"drawablePadding\" id=\"0x01010171\" />\n  <public type=\"attr\" name=\"completionHint\" id=\"0x01010172\" />\n  <public type=\"attr\" name=\"completionHintView\" id=\"0x01010173\" />\n  <public type=\"attr\" name=\"completionThreshold\" id=\"0x01010174\" />\n  <public type=\"attr\" name=\"dropDownSelector\" id=\"0x01010175\" />\n  <public type=\"attr\" name=\"popupBackground\" id=\"0x01010176\" />\n  <public type=\"attr\" name=\"inAnimation\" id=\"0x01010177\" />\n  <public type=\"attr\" name=\"outAnimation\" id=\"0x01010178\" />\n  <public type=\"attr\" name=\"flipInterval\" id=\"0x01010179\" />\n  <public type=\"attr\" name=\"fillViewport\" id=\"0x0101017a\" />\n  <public type=\"attr\" name=\"prompt\" id=\"0x0101017b\" />\n  <!-- {@deprecated Use minDate instead.} -->\n  <public type=\"attr\" name=\"startYear\" id=\"0x0101017c\" />\n  <!-- {@deprecated Use maxDate instead.} -->\n  <public type=\"attr\" name=\"endYear\" id=\"0x0101017d\" />\n  <public type=\"attr\" name=\"mode\" id=\"0x0101017e\" />\n  <public type=\"attr\" name=\"layout_x\" id=\"0x0101017f\" />\n  <public type=\"attr\" name=\"layout_y\" id=\"0x01010180\" />\n  <public type=\"attr\" name=\"layout_weight\" id=\"0x01010181\" />\n  <public type=\"attr\" name=\"layout_toLeftOf\" id=\"0x01010182\" />\n  <public type=\"attr\" name=\"layout_toRightOf\" id=\"0x01010183\" />\n  <public type=\"attr\" name=\"layout_above\" id=\"0x01010184\" />\n  <public type=\"attr\" name=\"layout_below\" id=\"0x01010185\" />\n  <public type=\"attr\" name=\"layout_alignBaseline\" id=\"0x01010186\" />\n  <public type=\"attr\" name=\"layout_alignLeft\" id=\"0x01010187\" />\n  <public type=\"attr\" name=\"layout_alignTop\" id=\"0x01010188\" />\n  <public type=\"attr\" name=\"layout_alignRight\" id=\"0x01010189\" />\n  <public type=\"attr\" name=\"layout_alignBottom\" id=\"0x0101018a\" />\n  <public type=\"attr\" name=\"layout_alignParentLeft\" id=\"0x0101018b\" />\n  <public type=\"attr\" name=\"layout_alignParentTop\" id=\"0x0101018c\" />\n  <public type=\"attr\" name=\"layout_alignParentRight\" id=\"0x0101018d\" />\n  <public type=\"attr\" name=\"layout_alignParentBottom\" id=\"0x0101018e\" />\n  <public type=\"attr\" name=\"layout_centerInParent\" id=\"0x0101018f\" />\n  <public type=\"attr\" name=\"layout_centerHorizontal\" id=\"0x01010190\" />\n  <public type=\"attr\" name=\"layout_centerVertical\" id=\"0x01010191\" />\n  <public type=\"attr\" name=\"layout_alignWithParentIfMissing\" id=\"0x01010192\" />\n  <public type=\"attr\" name=\"layout_scale\" id=\"0x01010193\" />\n  <public type=\"attr\" name=\"visible\" id=\"0x01010194\" />\n  <public type=\"attr\" name=\"variablePadding\" id=\"0x01010195\" />\n  <public type=\"attr\" name=\"constantSize\" id=\"0x01010196\" />\n  <public type=\"attr\" name=\"oneshot\" id=\"0x01010197\" />\n  <public type=\"attr\" name=\"duration\" id=\"0x01010198\" />\n  <public type=\"attr\" name=\"drawable\" id=\"0x01010199\" />\n  <public type=\"attr\" name=\"shape\" id=\"0x0101019a\" />\n  <public type=\"attr\" name=\"innerRadiusRatio\" id=\"0x0101019b\" />\n  <public type=\"attr\" name=\"thicknessRatio\" id=\"0x0101019c\" />\n  <public type=\"attr\" name=\"startColor\" id=\"0x0101019d\" />\n  <public type=\"attr\" name=\"endColor\" id=\"0x0101019e\" />\n  <public type=\"attr\" name=\"useLevel\" id=\"0x0101019f\" />\n  <public type=\"attr\" name=\"angle\" id=\"0x010101a0\" />\n  <public type=\"attr\" name=\"type\" id=\"0x010101a1\" />\n  <public type=\"attr\" name=\"centerX\" id=\"0x010101a2\" />\n  <public type=\"attr\" name=\"centerY\" id=\"0x010101a3\" />\n  <public type=\"attr\" name=\"gradientRadius\" id=\"0x010101a4\" />\n  <public type=\"attr\" name=\"color\" id=\"0x010101a5\" />\n  <public type=\"attr\" name=\"dashWidth\" id=\"0x010101a6\" />\n  <public type=\"attr\" name=\"dashGap\" id=\"0x010101a7\" />\n  <public type=\"attr\" name=\"radius\" id=\"0x010101a8\" />\n  <public type=\"attr\" name=\"topLeftRadius\" id=\"0x010101a9\" />\n  <public type=\"attr\" name=\"topRightRadius\" id=\"0x010101aa\" />\n  <public type=\"attr\" name=\"bottomLeftRadius\" id=\"0x010101ab\" />\n  <public type=\"attr\" name=\"bottomRightRadius\" id=\"0x010101ac\" />\n  <public type=\"attr\" name=\"left\" id=\"0x010101ad\" />\n  <public type=\"attr\" name=\"top\" id=\"0x010101ae\" />\n  <public type=\"attr\" name=\"right\" id=\"0x010101af\" />\n  <public type=\"attr\" name=\"bottom\" id=\"0x010101b0\" />\n  <public type=\"attr\" name=\"minLevel\" id=\"0x010101b1\" />\n  <public type=\"attr\" name=\"maxLevel\" id=\"0x010101b2\" />\n  <public type=\"attr\" name=\"fromDegrees\" id=\"0x010101b3\" />\n  <public type=\"attr\" name=\"toDegrees\" id=\"0x010101b4\" />\n  <public type=\"attr\" name=\"pivotX\" id=\"0x010101b5\" />\n  <public type=\"attr\" name=\"pivotY\" id=\"0x010101b6\" />\n  <public type=\"attr\" name=\"insetLeft\" id=\"0x010101b7\" />\n  <public type=\"attr\" name=\"insetRight\" id=\"0x010101b8\" />\n  <public type=\"attr\" name=\"insetTop\" id=\"0x010101b9\" />\n  <public type=\"attr\" name=\"insetBottom\" id=\"0x010101ba\" />\n  <public type=\"attr\" name=\"shareInterpolator\" id=\"0x010101bb\" />\n  <public type=\"attr\" name=\"fillBefore\" id=\"0x010101bc\" />\n  <public type=\"attr\" name=\"fillAfter\" id=\"0x010101bd\" />\n  <public type=\"attr\" name=\"startOffset\" id=\"0x010101be\" />\n  <public type=\"attr\" name=\"repeatCount\" id=\"0x010101bf\" />\n  <public type=\"attr\" name=\"repeatMode\" id=\"0x010101c0\" />\n  <public type=\"attr\" name=\"zAdjustment\" id=\"0x010101c1\" />\n  <public type=\"attr\" name=\"fromXScale\" id=\"0x010101c2\" />\n  <public type=\"attr\" name=\"toXScale\" id=\"0x010101c3\" />\n  <public type=\"attr\" name=\"fromYScale\" id=\"0x010101c4\" />\n  <public type=\"attr\" name=\"toYScale\" id=\"0x010101c5\" />\n  <public type=\"attr\" name=\"fromXDelta\" id=\"0x010101c6\" />\n  <public type=\"attr\" name=\"toXDelta\" id=\"0x010101c7\" />\n  <public type=\"attr\" name=\"fromYDelta\" id=\"0x010101c8\" />\n  <public type=\"attr\" name=\"toYDelta\" id=\"0x010101c9\" />\n  <public type=\"attr\" name=\"fromAlpha\" id=\"0x010101ca\" />\n  <public type=\"attr\" name=\"toAlpha\" id=\"0x010101cb\" />\n  <public type=\"attr\" name=\"delay\" id=\"0x010101cc\" />\n  <public type=\"attr\" name=\"animation\" id=\"0x010101cd\" />\n  <public type=\"attr\" name=\"animationOrder\" id=\"0x010101ce\" />\n  <public type=\"attr\" name=\"columnDelay\" id=\"0x010101cf\" />\n  <public type=\"attr\" name=\"rowDelay\" id=\"0x010101d0\" />\n  <public type=\"attr\" name=\"direction\" id=\"0x010101d1\" />\n  <public type=\"attr\" name=\"directionPriority\" id=\"0x010101d2\" />\n  <public type=\"attr\" name=\"factor\" id=\"0x010101d3\" />\n  <public type=\"attr\" name=\"cycles\" id=\"0x010101d4\" />\n  <public type=\"attr\" name=\"searchMode\" id=\"0x010101d5\" />\n  <public type=\"attr\" name=\"searchSuggestAuthority\" id=\"0x010101d6\" />\n  <public type=\"attr\" name=\"searchSuggestPath\" id=\"0x010101d7\" />\n  <public type=\"attr\" name=\"searchSuggestSelection\" id=\"0x010101d8\" />\n  <public type=\"attr\" name=\"searchSuggestIntentAction\" id=\"0x010101d9\" />\n  <public type=\"attr\" name=\"searchSuggestIntentData\" id=\"0x010101da\" />\n  <public type=\"attr\" name=\"queryActionMsg\" id=\"0x010101db\" />\n  <public type=\"attr\" name=\"suggestActionMsg\" id=\"0x010101dc\" />\n  <public type=\"attr\" name=\"suggestActionMsgColumn\" id=\"0x010101dd\" />\n  <public type=\"attr\" name=\"menuCategory\" id=\"0x010101de\" />\n  <public type=\"attr\" name=\"orderInCategory\" id=\"0x010101df\" />\n  <public type=\"attr\" name=\"checkableBehavior\" id=\"0x010101e0\" />\n  <public type=\"attr\" name=\"title\" id=\"0x010101e1\" />\n  <public type=\"attr\" name=\"titleCondensed\" id=\"0x010101e2\" />\n  <public type=\"attr\" name=\"alphabeticShortcut\" id=\"0x010101e3\" />\n  <public type=\"attr\" name=\"numericShortcut\" id=\"0x010101e4\" />\n  <public type=\"attr\" name=\"checkable\" id=\"0x010101e5\" />\n  <public type=\"attr\" name=\"selectable\" id=\"0x010101e6\" />\n  <public type=\"attr\" name=\"orderingFromXml\" id=\"0x010101e7\" />\n  <public type=\"attr\" name=\"key\" id=\"0x010101e8\" />\n  <public type=\"attr\" name=\"summary\" id=\"0x010101e9\" />\n  <public type=\"attr\" name=\"order\" id=\"0x010101ea\" />\n  <public type=\"attr\" name=\"widgetLayout\" id=\"0x010101eb\" />\n  <public type=\"attr\" name=\"dependency\" id=\"0x010101ec\" />\n  <public type=\"attr\" name=\"defaultValue\" id=\"0x010101ed\" />\n  <public type=\"attr\" name=\"shouldDisableView\" id=\"0x010101ee\" />\n  <public type=\"attr\" name=\"summaryOn\" id=\"0x010101ef\" />\n  <public type=\"attr\" name=\"summaryOff\" id=\"0x010101f0\" />\n  <public type=\"attr\" name=\"disableDependentsState\" id=\"0x010101f1\" />\n  <public type=\"attr\" name=\"dialogTitle\" id=\"0x010101f2\" />\n  <public type=\"attr\" name=\"dialogMessage\" id=\"0x010101f3\" />\n  <public type=\"attr\" name=\"dialogIcon\" id=\"0x010101f4\" />\n  <public type=\"attr\" name=\"positiveButtonText\" id=\"0x010101f5\" />\n  <public type=\"attr\" name=\"negativeButtonText\" id=\"0x010101f6\" />\n  <public type=\"attr\" name=\"dialogLayout\" id=\"0x010101f7\" />\n  <public type=\"attr\" name=\"entryValues\" id=\"0x010101f8\" />\n  <public type=\"attr\" name=\"ringtoneType\" id=\"0x010101f9\" />\n  <public type=\"attr\" name=\"showDefault\" id=\"0x010101fa\" />\n  <public type=\"attr\" name=\"showSilent\" id=\"0x010101fb\" />\n  <public type=\"attr\" name=\"scaleWidth\" id=\"0x010101fc\" />\n  <public type=\"attr\" name=\"scaleHeight\" id=\"0x010101fd\" />\n  <public type=\"attr\" name=\"scaleGravity\" id=\"0x010101fe\" />\n  <public type=\"attr\" name=\"ignoreGravity\" id=\"0x010101ff\" />\n  <public type=\"attr\" name=\"foregroundGravity\" id=\"0x01010200\" />\n  <public type=\"attr\" name=\"tileMode\" id=\"0x01010201\" />\n  <public type=\"attr\" name=\"targetActivity\" id=\"0x01010202\" />\n  <public type=\"attr\" name=\"alwaysRetainTaskState\" id=\"0x01010203\" />\n  <public type=\"attr\" name=\"allowTaskReparenting\" id=\"0x01010204\" />\n  <public type=\"attr\" name=\"searchButtonText\" id=\"0x01010205\" />\n  <public type=\"attr\" name=\"colorForegroundInverse\" id=\"0x01010206\" />\n  <public type=\"attr\" name=\"textAppearanceButton\" id=\"0x01010207\" />\n  <public type=\"attr\" name=\"listSeparatorTextViewStyle\" id=\"0x01010208\" />\n  <public type=\"attr\" name=\"streamType\" id=\"0x01010209\" />\n  <public type=\"attr\" name=\"clipOrientation\" id=\"0x0101020a\" />\n  <public type=\"attr\" name=\"centerColor\" id=\"0x0101020b\" />\n  <public type=\"attr\" name=\"minSdkVersion\" id=\"0x0101020c\" />\n  <public type=\"attr\" name=\"windowFullscreen\" id=\"0x0101020d\" />\n  <public type=\"attr\" name=\"unselectedAlpha\" id=\"0x0101020e\" />\n  <public type=\"attr\" name=\"progressBarStyleSmallTitle\" id=\"0x0101020f\" />\n  <public type=\"attr\" name=\"ratingBarStyleIndicator\" id=\"0x01010210\" />\n  <public type=\"attr\" name=\"apiKey\" id=\"0x01010211\" />\n  <public type=\"attr\" name=\"textColorTertiary\" id=\"0x01010212\" />\n  <public type=\"attr\" name=\"textColorTertiaryInverse\" id=\"0x01010213\" />\n  <public type=\"attr\" name=\"listDivider\" id=\"0x01010214\" />\n  <public type=\"attr\" name=\"soundEffectsEnabled\" id=\"0x01010215\" />\n  <public type=\"attr\" name=\"keepScreenOn\" id=\"0x01010216\" />\n  <public type=\"attr\" name=\"lineSpacingExtra\" id=\"0x01010217\" />\n  <public type=\"attr\" name=\"lineSpacingMultiplier\" id=\"0x01010218\" />\n  <public type=\"attr\" name=\"listChoiceIndicatorSingle\" id=\"0x01010219\" />\n  <public type=\"attr\" name=\"listChoiceIndicatorMultiple\" id=\"0x0101021a\" />\n  <public type=\"attr\" name=\"versionCode\" id=\"0x0101021b\" />\n  <public type=\"attr\" name=\"versionName\" id=\"0x0101021c\" />\n\n  <public type=\"id\" name=\"background\" id=\"0x01020000\" />\n  <public type=\"id\" name=\"checkbox\" id=\"0x01020001\" />\n  <public type=\"id\" name=\"content\" id=\"0x01020002\" />\n  <public type=\"id\" name=\"edit\" id=\"0x01020003\" />\n  <public type=\"id\" name=\"empty\" id=\"0x01020004\" />\n  <public type=\"id\" name=\"hint\" id=\"0x01020005\" />\n  <public type=\"id\" name=\"icon\" id=\"0x01020006\" />\n  <public type=\"id\" name=\"icon1\" id=\"0x01020007\" />\n  <public type=\"id\" name=\"icon2\" id=\"0x01020008\" />\n  <public type=\"id\" name=\"input\" id=\"0x01020009\" />\n  <public type=\"id\" name=\"list\" id=\"0x0102000a\" />\n  <public type=\"id\" name=\"message\" id=\"0x0102000b\" />\n  <public type=\"id\" name=\"primary\" id=\"0x0102000c\" />\n  <public type=\"id\" name=\"progress\" id=\"0x0102000d\" />\n  <public type=\"id\" name=\"selectedIcon\" id=\"0x0102000e\" />\n  <public type=\"id\" name=\"secondaryProgress\" id=\"0x0102000f\" />\n  <public type=\"id\" name=\"summary\" id=\"0x01020010\" />\n  <public type=\"id\" name=\"tabcontent\" id=\"0x01020011\" />\n  <public type=\"id\" name=\"tabhost\" id=\"0x01020012\" />\n  <public type=\"id\" name=\"tabs\" id=\"0x01020013\" />\n  <public type=\"id\" name=\"text1\" id=\"0x01020014\" />\n  <public type=\"id\" name=\"text2\" id=\"0x01020015\" />\n  <public type=\"id\" name=\"title\" id=\"0x01020016\" />\n  <public type=\"id\" name=\"toggle\" id=\"0x01020017\" />\n  <public type=\"id\" name=\"widget_frame\" id=\"0x01020018\" />\n  <public type=\"id\" name=\"button1\" id=\"0x01020019\" />\n  <public type=\"id\" name=\"button2\" id=\"0x0102001a\" />\n  <public type=\"id\" name=\"button3\" id=\"0x0102001b\" />\n\n  <public type=\"style\" name=\"Animation\" id=\"0x01030000\" />\n  <public type=\"style\" name=\"Animation.Activity\" id=\"0x01030001\" />\n  <public type=\"style\" name=\"Animation.Dialog\" id=\"0x01030002\" />\n  <public type=\"style\" name=\"Animation.Translucent\" id=\"0x01030003\" />\n  <public type=\"style\" name=\"Animation.Toast\" id=\"0x01030004\" />\n  <public type=\"style\" name=\"Theme\" id=\"0x01030005\" />\n  <public type=\"style\" name=\"Theme.NoTitleBar\" id=\"0x01030006\" />\n  <public type=\"style\" name=\"Theme.NoTitleBar.Fullscreen\" id=\"0x01030007\" />\n  <public type=\"style\" name=\"Theme.Black\" id=\"0x01030008\" />\n  <public type=\"style\" name=\"Theme.Black.NoTitleBar\" id=\"0x01030009\" />\n  <public type=\"style\" name=\"Theme.Black.NoTitleBar.Fullscreen\" id=\"0x0103000a\" />\n  <public type=\"style\" name=\"Theme.Dialog\" id=\"0x0103000b\" />\n  <public type=\"style\" name=\"Theme.Light\" id=\"0x0103000c\" />\n  <public type=\"style\" name=\"Theme.Light.NoTitleBar\" id=\"0x0103000d\" />\n  <public type=\"style\" name=\"Theme.Light.NoTitleBar.Fullscreen\" id=\"0x0103000e\" />\n  <public type=\"style\" name=\"Theme.Translucent\" id=\"0x0103000f\" />\n  <public type=\"style\" name=\"Theme.Translucent.NoTitleBar\" id=\"0x01030010\" />\n  <public type=\"style\" name=\"Theme.Translucent.NoTitleBar.Fullscreen\" id=\"0x01030011\" />\n  <public type=\"style\" name=\"Widget\" id=\"0x01030012\" />\n  <public type=\"style\" name=\"Widget.AbsListView\" id=\"0x01030013\" />\n  <public type=\"style\" name=\"Widget.Button\" id=\"0x01030014\" />\n  <public type=\"style\" name=\"Widget.Button.Inset\" id=\"0x01030015\" />\n  <public type=\"style\" name=\"Widget.Button.Small\" id=\"0x01030016\" />\n  <public type=\"style\" name=\"Widget.Button.Toggle\" id=\"0x01030017\" />\n  <public type=\"style\" name=\"Widget.CompoundButton\" id=\"0x01030018\" />\n  <public type=\"style\" name=\"Widget.CompoundButton.CheckBox\" id=\"0x01030019\" />\n  <public type=\"style\" name=\"Widget.CompoundButton.RadioButton\" id=\"0x0103001a\" />\n  <public type=\"style\" name=\"Widget.CompoundButton.Star\" id=\"0x0103001b\" />\n  <public type=\"style\" name=\"Widget.ProgressBar\" id=\"0x0103001c\" />\n  <public type=\"style\" name=\"Widget.ProgressBar.Large\" id=\"0x0103001d\" />\n  <public type=\"style\" name=\"Widget.ProgressBar.Small\" id=\"0x0103001e\" />\n  <public type=\"style\" name=\"Widget.ProgressBar.Horizontal\" id=\"0x0103001f\" />\n  <public type=\"style\" name=\"Widget.SeekBar\" id=\"0x01030020\" />\n  <public type=\"style\" name=\"Widget.RatingBar\" id=\"0x01030021\" />\n  <public type=\"style\" name=\"Widget.TextView\" id=\"0x01030022\" />\n  <public type=\"style\" name=\"Widget.EditText\" id=\"0x01030023\" />\n  <public type=\"style\" name=\"Widget.ExpandableListView\" id=\"0x01030024\" />\n  <public type=\"style\" name=\"Widget.ImageWell\" id=\"0x01030025\" />\n  <public type=\"style\" name=\"Widget.ImageButton\" id=\"0x01030026\" />\n  <public type=\"style\" name=\"Widget.AutoCompleteTextView\" id=\"0x01030027\" />\n  <public type=\"style\" name=\"Widget.Spinner\" id=\"0x01030028\" />\n  <public type=\"style\" name=\"Widget.TextView.PopupMenu\" id=\"0x01030029\" />\n  <public type=\"style\" name=\"Widget.TextView.SpinnerItem\" id=\"0x0103002a\" />\n  <public type=\"style\" name=\"Widget.DropDownItem\" id=\"0x0103002b\" />\n  <public type=\"style\" name=\"Widget.DropDownItem.Spinner\" id=\"0x0103002c\" />\n  <public type=\"style\" name=\"Widget.ScrollView\" id=\"0x0103002d\" />\n  <public type=\"style\" name=\"Widget.ListView\" id=\"0x0103002e\" />\n  <public type=\"style\" name=\"Widget.ListView.White\" id=\"0x0103002f\" />\n  <public type=\"style\" name=\"Widget.ListView.DropDown\" id=\"0x01030030\" />\n  <public type=\"style\" name=\"Widget.ListView.Menu\" id=\"0x01030031\" />\n  <public type=\"style\" name=\"Widget.GridView\" id=\"0x01030032\" />\n  <public type=\"style\" name=\"Widget.WebView\" id=\"0x01030033\" />\n  <public type=\"style\" name=\"Widget.TabWidget\" id=\"0x01030034\" />\n  <public type=\"style\" name=\"Widget.Gallery\" id=\"0x01030035\" />\n  <public type=\"style\" name=\"Widget.PopupWindow\" id=\"0x01030036\" />\n  <public type=\"style\" name=\"MediaButton\" id=\"0x01030037\" />\n  <public type=\"style\" name=\"MediaButton.Previous\" id=\"0x01030038\" />\n  <public type=\"style\" name=\"MediaButton.Next\" id=\"0x01030039\" />\n  <public type=\"style\" name=\"MediaButton.Play\" id=\"0x0103003a\" />\n  <public type=\"style\" name=\"MediaButton.Ffwd\" id=\"0x0103003b\" />\n  <public type=\"style\" name=\"MediaButton.Rew\" id=\"0x0103003c\" />\n  <public type=\"style\" name=\"MediaButton.Pause\" id=\"0x0103003d\" />\n  <public type=\"style\" name=\"TextAppearance\" id=\"0x0103003e\" />\n  <public type=\"style\" name=\"TextAppearance.Inverse\" id=\"0x0103003f\" />\n  <public type=\"style\" name=\"TextAppearance.Theme\" id=\"0x01030040\" />\n  <public type=\"style\" name=\"TextAppearance.DialogWindowTitle\" id=\"0x01030041\" />\n  <public type=\"style\" name=\"TextAppearance.Large\" id=\"0x01030042\" />\n  <public type=\"style\" name=\"TextAppearance.Large.Inverse\" id=\"0x01030043\" />\n  <public type=\"style\" name=\"TextAppearance.Medium\" id=\"0x01030044\" />\n  <public type=\"style\" name=\"TextAppearance.Medium.Inverse\" id=\"0x01030045\" />\n  <public type=\"style\" name=\"TextAppearance.Small\" id=\"0x01030046\" />\n  <public type=\"style\" name=\"TextAppearance.Small.Inverse\" id=\"0x01030047\" />\n  <public type=\"style\" name=\"TextAppearance.Theme.Dialog\" id=\"0x01030048\" />\n  <public type=\"style\" name=\"TextAppearance.Widget\" id=\"0x01030049\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.Button\" id=\"0x0103004a\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.IconMenu.Item\" id=\"0x0103004b\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.EditText\" id=\"0x0103004c\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.TabWidget\" id=\"0x0103004d\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.TextView\" id=\"0x0103004e\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.TextView.PopupMenu\" id=\"0x0103004f\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.DropDownHint\" id=\"0x01030050\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.DropDownItem\" id=\"0x01030051\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.TextView.SpinnerItem\" id=\"0x01030052\" />\n  <public type=\"style\" name=\"TextAppearance.WindowTitle\" id=\"0x01030053\" />\n\n  <public type=\"string\" name=\"cancel\" id=\"0x01040000\" />\n  <public type=\"string\" name=\"copy\" id=\"0x01040001\" />\n  <public type=\"string\" name=\"copyUrl\" id=\"0x01040002\" />\n  <public type=\"string\" name=\"cut\" id=\"0x01040003\" />\n  <public type=\"string\" name=\"defaultVoiceMailAlphaTag\" id=\"0x01040004\" />\n  <public type=\"string\" name=\"defaultMsisdnAlphaTag\" id=\"0x01040005\" />\n  <public type=\"string\" name=\"emptyPhoneNumber\" id=\"0x01040006\" />\n  <public type=\"string\" name=\"httpErrorBadUrl\" id=\"0x01040007\" />\n  <public type=\"string\" name=\"httpErrorUnsupportedScheme\" id=\"0x01040008\" />\n  <public type=\"string\" name=\"no\" id=\"0x01040009\" />\n  <public type=\"string\" name=\"ok\" id=\"0x0104000a\" />\n  <public type=\"string\" name=\"paste\" id=\"0x0104000b\" />\n  <public type=\"string\" name=\"search_go\" id=\"0x0104000c\" />\n  <public type=\"string\" name=\"selectAll\" id=\"0x0104000d\" />\n  <public type=\"string\" name=\"unknownName\" id=\"0x0104000e\" />\n  <public type=\"string\" name=\"untitled\" id=\"0x0104000f\" />\n  <public type=\"string\" name=\"VideoView_error_button\" id=\"0x01040010\" />\n  <public type=\"string\" name=\"VideoView_error_text_unknown\" id=\"0x01040011\" />\n  <public type=\"string\" name=\"VideoView_error_title\" id=\"0x01040012\" />\n  <public type=\"string\" name=\"yes\" id=\"0x01040013\" />\n\n  <public type=\"dimen\" name=\"app_icon_size\" id=\"0x01050000\" />\n  <public type=\"dimen\" name=\"thumbnail_height\" id=\"0x01050001\" />\n  <public type=\"dimen\" name=\"thumbnail_width\" id=\"0x01050002\" />\n\n  <public type=\"color\" name=\"darker_gray\" id=\"0x01060000\" />\n  <public type=\"color\" name=\"primary_text_dark\" id=\"0x01060001\" />\n  <public type=\"color\" name=\"primary_text_dark_nodisable\" id=\"0x01060002\" />\n  <public type=\"color\" name=\"primary_text_light\" id=\"0x01060003\" />\n  <public type=\"color\" name=\"primary_text_light_nodisable\" id=\"0x01060004\" />\n  <public type=\"color\" name=\"secondary_text_dark\" id=\"0x01060005\" />\n  <public type=\"color\" name=\"secondary_text_dark_nodisable\" id=\"0x01060006\" />\n  <public type=\"color\" name=\"secondary_text_light\" id=\"0x01060007\" />\n  <public type=\"color\" name=\"secondary_text_light_nodisable\" id=\"0x01060008\" />\n  <public type=\"color\" name=\"tab_indicator_text\" id=\"0x01060009\" />\n  <public type=\"color\" name=\"widget_edittext_dark\" id=\"0x0106000a\" />\n  <public type=\"color\" name=\"white\" id=\"0x0106000b\" />\n  <public type=\"color\" name=\"black\" id=\"0x0106000c\" />\n  <public type=\"color\" name=\"transparent\" id=\"0x0106000d\" />\n  <public type=\"color\" name=\"background_dark\" id=\"0x0106000e\" />\n  <public type=\"color\" name=\"background_light\" id=\"0x0106000f\" />\n  <public type=\"color\" name=\"tertiary_text_dark\" id=\"0x01060010\" />\n  <public type=\"color\" name=\"tertiary_text_light\" id=\"0x01060011\" />\n\n  <public type=\"array\" name=\"emailAddressTypes\" id=\"0x01070000\" />\n  <public type=\"array\" name=\"imProtocols\" id=\"0x01070001\" />\n  <public type=\"array\" name=\"organizationTypes\" id=\"0x01070002\" />\n  <public type=\"array\" name=\"phoneTypes\" id=\"0x01070003\" />\n  <public type=\"array\" name=\"postalAddressTypes\" id=\"0x01070004\" />\n\n  <public type=\"drawable\" name=\"alert_dark_frame\" id=\"0x01080000\" />\n  <public type=\"drawable\" name=\"alert_light_frame\" id=\"0x01080001\" />\n  <public type=\"drawable\" name=\"arrow_down_float\" id=\"0x01080002\" />\n  <public type=\"drawable\" name=\"arrow_up_float\" id=\"0x01080003\" />\n  <public type=\"drawable\" name=\"btn_default\" id=\"0x01080004\" />\n  <public type=\"drawable\" name=\"btn_default_small\" id=\"0x01080005\" />\n  <public type=\"drawable\" name=\"btn_dropdown\" id=\"0x01080006\" />\n  <public type=\"drawable\" name=\"btn_minus\" id=\"0x01080007\" />\n  <public type=\"drawable\" name=\"btn_plus\" id=\"0x01080008\" />\n  <public type=\"drawable\" name=\"btn_radio\" id=\"0x01080009\" />\n  <public type=\"drawable\" name=\"btn_star\" id=\"0x0108000a\" />\n  <public type=\"drawable\" name=\"btn_star_big_off\" id=\"0x0108000b\" />\n  <public type=\"drawable\" name=\"btn_star_big_on\" id=\"0x0108000c\" />\n  <public type=\"drawable\" name=\"button_onoff_indicator_on\" id=\"0x0108000d\" />\n  <public type=\"drawable\" name=\"button_onoff_indicator_off\" id=\"0x0108000e\" />\n  <public type=\"drawable\" name=\"checkbox_off_background\" id=\"0x0108000f\" />\n  <public type=\"drawable\" name=\"checkbox_on_background\" id=\"0x01080010\" />\n  <public type=\"drawable\" name=\"dialog_frame\" id=\"0x01080011\" />\n  <public type=\"drawable\" name=\"divider_horizontal_bright\" id=\"0x01080012\" />\n  <public type=\"drawable\" name=\"divider_horizontal_textfield\" id=\"0x01080013\" />\n  <public type=\"drawable\" name=\"divider_horizontal_dark\" id=\"0x01080014\" />\n  <public type=\"drawable\" name=\"divider_horizontal_dim_dark\" id=\"0x01080015\" />\n  <public type=\"drawable\" name=\"edit_text\" id=\"0x01080016\" />\n  <public type=\"drawable\" name=\"btn_dialog\" id=\"0x01080017\" />\n  <public type=\"drawable\" name=\"editbox_background\" id=\"0x01080018\" />\n  <public type=\"drawable\" name=\"editbox_background_normal\" id=\"0x01080019\" />\n  <public type=\"drawable\" name=\"editbox_dropdown_dark_frame\" id=\"0x0108001a\" />\n  <public type=\"drawable\" name=\"editbox_dropdown_light_frame\" id=\"0x0108001b\" />\n  <public type=\"drawable\" name=\"gallery_thumb\" id=\"0x0108001c\" />\n  <public type=\"drawable\" name=\"ic_delete\" id=\"0x0108001d\" />\n  <public type=\"drawable\" name=\"ic_lock_idle_charging\" id=\"0x0108001e\" />\n  <public type=\"drawable\" name=\"ic_lock_idle_lock\" id=\"0x0108001f\" />\n  <public type=\"drawable\" name=\"ic_lock_idle_low_battery\" id=\"0x01080020\" />\n  <public type=\"drawable\" name=\"ic_media_ff\" id=\"0x01080021\" />\n  <public type=\"drawable\" name=\"ic_media_next\" id=\"0x01080022\" />\n  <public type=\"drawable\" name=\"ic_media_pause\" id=\"0x01080023\" />\n  <public type=\"drawable\" name=\"ic_media_play\" id=\"0x01080024\" />\n  <public type=\"drawable\" name=\"ic_media_previous\" id=\"0x01080025\" />\n  <public type=\"drawable\" name=\"ic_media_rew\" id=\"0x01080026\" />\n  <public type=\"drawable\" name=\"ic_dialog_alert\" id=\"0x01080027\" />\n  <public type=\"drawable\" name=\"ic_dialog_dialer\" id=\"0x01080028\" />\n  <public type=\"drawable\" name=\"ic_dialog_email\" id=\"0x01080029\" />\n  <public type=\"drawable\" name=\"ic_dialog_map\" id=\"0x0108002a\" />\n  <public type=\"drawable\" name=\"ic_input_add\" id=\"0x0108002b\" />\n  <public type=\"drawable\" name=\"ic_input_delete\" id=\"0x0108002c\" />\n  <public type=\"drawable\" name=\"ic_input_get\" id=\"0x0108002d\" />\n  <public type=\"drawable\" name=\"ic_lock_idle_alarm\" id=\"0x0108002e\" />\n  <public type=\"drawable\" name=\"ic_lock_lock\" id=\"0x0108002f\" />\n  <public type=\"drawable\" name=\"ic_lock_power_off\" id=\"0x01080030\" />\n  <public type=\"drawable\" name=\"ic_lock_silent_mode\" id=\"0x01080031\" />\n  <public type=\"drawable\" name=\"ic_lock_silent_mode_off\" id=\"0x01080032\" />\n  <public type=\"drawable\" name=\"ic_menu_add\" id=\"0x01080033\" />\n  <public type=\"drawable\" name=\"ic_menu_agenda\" id=\"0x01080034\" />\n  <public type=\"drawable\" name=\"ic_menu_always_landscape_portrait\" id=\"0x01080035\" />\n  <public type=\"drawable\" name=\"ic_menu_call\" id=\"0x01080036\" />\n  <public type=\"drawable\" name=\"ic_menu_camera\" id=\"0x01080037\" />\n  <public type=\"drawable\" name=\"ic_menu_close_clear_cancel\" id=\"0x01080038\" />\n  <public type=\"drawable\" name=\"ic_menu_compass\" id=\"0x01080039\" />\n  <public type=\"drawable\" name=\"ic_menu_crop\" id=\"0x0108003a\" />\n  <public type=\"drawable\" name=\"ic_menu_day\" id=\"0x0108003b\" />\n  <public type=\"drawable\" name=\"ic_menu_delete\" id=\"0x0108003c\" />\n  <public type=\"drawable\" name=\"ic_menu_directions\" id=\"0x0108003d\" />\n  <public type=\"drawable\" name=\"ic_menu_edit\" id=\"0x0108003e\" />\n  <public type=\"drawable\" name=\"ic_menu_gallery\" id=\"0x0108003f\" />\n  <public type=\"drawable\" name=\"ic_menu_help\" id=\"0x01080040\" />\n  <public type=\"drawable\" name=\"ic_menu_info_details\" id=\"0x01080041\" />\n  <public type=\"drawable\" name=\"ic_menu_manage\" id=\"0x01080042\" />\n  <public type=\"drawable\" name=\"ic_menu_mapmode\" id=\"0x01080043\" />\n  <public type=\"drawable\" name=\"ic_menu_month\" id=\"0x01080044\" />\n  <public type=\"drawable\" name=\"ic_menu_more\" id=\"0x01080045\" />\n  <public type=\"drawable\" name=\"ic_menu_my_calendar\" id=\"0x01080046\" />\n  <public type=\"drawable\" name=\"ic_menu_mylocation\" id=\"0x01080047\" />\n  <public type=\"drawable\" name=\"ic_menu_myplaces\" id=\"0x01080048\" />\n  <public type=\"drawable\" name=\"ic_menu_preferences\" id=\"0x01080049\" />\n  <public type=\"drawable\" name=\"ic_menu_recent_history\" id=\"0x0108004a\" />\n  <public type=\"drawable\" name=\"ic_menu_report_image\" id=\"0x0108004b\" />\n  <public type=\"drawable\" name=\"ic_menu_revert\" id=\"0x0108004c\" />\n  <public type=\"drawable\" name=\"ic_menu_rotate\" id=\"0x0108004d\" />\n  <public type=\"drawable\" name=\"ic_menu_save\" id=\"0x0108004e\" />\n  <public type=\"drawable\" name=\"ic_menu_search\" id=\"0x0108004f\" />\n  <public type=\"drawable\" name=\"ic_menu_send\" id=\"0x01080050\" />\n  <public type=\"drawable\" name=\"ic_menu_set_as\" id=\"0x01080051\" />\n  <public type=\"drawable\" name=\"ic_menu_share\" id=\"0x01080052\" />\n  <public type=\"drawable\" name=\"ic_menu_slideshow\" id=\"0x01080053\" />\n  <public type=\"drawable\" name=\"ic_menu_today\" id=\"0x01080054\" />\n  <public type=\"drawable\" name=\"ic_menu_upload\" id=\"0x01080055\" />\n  <public type=\"drawable\" name=\"ic_menu_upload_you_tube\" id=\"0x01080056\" />\n  <public type=\"drawable\" name=\"ic_menu_view\" id=\"0x01080057\" />\n  <public type=\"drawable\" name=\"ic_menu_week\" id=\"0x01080058\" />\n  <public type=\"drawable\" name=\"ic_menu_zoom\" id=\"0x01080059\" />\n  <public type=\"drawable\" name=\"ic_notification_clear_all\" id=\"0x0108005a\" />\n  <public type=\"drawable\" name=\"ic_notification_overlay\" id=\"0x0108005b\" />\n  <public type=\"drawable\" name=\"ic_partial_secure\" id=\"0x0108005c\" />\n  <public type=\"drawable\" name=\"ic_popup_disk_full\" id=\"0x0108005d\" />\n  <public type=\"drawable\" name=\"ic_popup_reminder\" id=\"0x0108005e\" />\n  <public type=\"drawable\" name=\"ic_popup_sync\" id=\"0x0108005f\" />\n  <public type=\"drawable\" name=\"ic_search_category_default\" id=\"0x01080060\" />\n  <public type=\"drawable\" name=\"ic_secure\" id=\"0x01080061\" />\n  <public type=\"drawable\" name=\"list_selector_background\" id=\"0x01080062\" />\n  <public type=\"drawable\" name=\"menu_frame\" id=\"0x01080063\" />\n  <public type=\"drawable\" name=\"menu_full_frame\" id=\"0x01080064\" />\n  <public type=\"drawable\" name=\"menuitem_background\" id=\"0x01080065\" />\n  <public type=\"drawable\" name=\"picture_frame\" id=\"0x01080066\" />\n  <public type=\"drawable\" name=\"presence_away\" id=\"0x01080067\" />\n  <public type=\"drawable\" name=\"presence_busy\" id=\"0x01080068\" />\n  <public type=\"drawable\" name=\"presence_invisible\" id=\"0x01080069\" />\n  <public type=\"drawable\" name=\"presence_offline\" id=\"0x0108006a\" />\n  <public type=\"drawable\" name=\"presence_online\" id=\"0x0108006b\" />\n  <public type=\"drawable\" name=\"progress_horizontal\" id=\"0x0108006c\" />\n  <public type=\"drawable\" name=\"progress_indeterminate_horizontal\" id=\"0x0108006d\" />\n  <public type=\"drawable\" name=\"radiobutton_off_background\" id=\"0x0108006e\" />\n  <public type=\"drawable\" name=\"radiobutton_on_background\" id=\"0x0108006f\" />\n  <public type=\"drawable\" name=\"spinner_background\" id=\"0x01080070\" />\n  <public type=\"drawable\" name=\"spinner_dropdown_background\" id=\"0x01080071\" />\n  <public type=\"drawable\" name=\"star_big_on\" id=\"0x01080072\" />\n  <public type=\"drawable\" name=\"star_big_off\" id=\"0x01080073\" />\n  <public type=\"drawable\" name=\"star_on\" id=\"0x01080074\" />\n  <public type=\"drawable\" name=\"star_off\" id=\"0x01080075\" />\n  <public type=\"drawable\" name=\"stat_notify_call_mute\" id=\"0x01080076\" />\n  <public type=\"drawable\" name=\"stat_notify_chat\" id=\"0x01080077\" />\n  <public type=\"drawable\" name=\"stat_notify_error\" id=\"0x01080078\" />\n  <public type=\"drawable\" name=\"stat_notify_more\" id=\"0x01080079\" />\n  <public type=\"drawable\" name=\"stat_notify_sdcard\" id=\"0x0108007a\" />\n  <public type=\"drawable\" name=\"stat_notify_sdcard_usb\" id=\"0x0108007b\" />\n  <public type=\"drawable\" name=\"stat_notify_sync\" id=\"0x0108007c\" />\n  <public type=\"drawable\" name=\"stat_notify_sync_noanim\" id=\"0x0108007d\" />\n  <public type=\"drawable\" name=\"stat_notify_voicemail\" id=\"0x0108007e\" />\n  <public type=\"drawable\" name=\"stat_notify_missed_call\" id=\"0x0108007f\" />\n  <public type=\"drawable\" name=\"stat_sys_data_bluetooth\" id=\"0x01080080\" />\n  <public type=\"drawable\" name=\"stat_sys_download\" id=\"0x01080081\" />\n  <public type=\"drawable\" name=\"stat_sys_download_done\" id=\"0x01080082\" />\n  <public type=\"drawable\" name=\"stat_sys_headset\" id=\"0x01080083\" />\n  <!-- @deprecated Replaced by a private asset in the phone app. -->\n  <public type=\"drawable\" name=\"stat_sys_phone_call\" id=\"0x01080084\" />\n  <!-- @deprecated Replaced by a private asset in the phone app. -->\n  <public type=\"drawable\" name=\"stat_sys_phone_call_forward\" id=\"0x01080085\" />\n  <!-- @deprecated Replaced by a private asset in the phone app. -->\n  <public type=\"drawable\" name=\"stat_sys_phone_call_on_hold\" id=\"0x01080086\" />\n  <public type=\"drawable\" name=\"stat_sys_speakerphone\" id=\"0x01080087\" />\n  <public type=\"drawable\" name=\"stat_sys_upload\" id=\"0x01080088\" />\n  <public type=\"drawable\" name=\"stat_sys_upload_done\" id=\"0x01080089\" />\n  <public type=\"drawable\" name=\"stat_sys_warning\" id=\"0x0108008a\" />\n  <public type=\"drawable\" name=\"status_bar_item_app_background\" id=\"0x0108008b\" />\n  <public type=\"drawable\" name=\"status_bar_item_background\" id=\"0x0108008c\" />\n  <public type=\"drawable\" name=\"sym_action_call\" id=\"0x0108008d\" />\n  <public type=\"drawable\" name=\"sym_action_chat\" id=\"0x0108008e\" />\n  <public type=\"drawable\" name=\"sym_action_email\" id=\"0x0108008f\" />\n  <public type=\"drawable\" name=\"sym_call_incoming\" id=\"0x01080090\" />\n  <public type=\"drawable\" name=\"sym_call_missed\" id=\"0x01080091\" />\n  <public type=\"drawable\" name=\"sym_call_outgoing\" id=\"0x01080092\" />\n  <public type=\"drawable\" name=\"sym_def_app_icon\" id=\"0x01080093\" />\n  <public type=\"drawable\" name=\"sym_contact_card\" id=\"0x01080094\" />\n  <public type=\"drawable\" name=\"title_bar\" id=\"0x01080095\" />\n  <public type=\"drawable\" name=\"toast_frame\" id=\"0x01080096\" />\n  <public type=\"drawable\" name=\"zoom_plate\" id=\"0x01080097\" />\n  <public type=\"drawable\" name=\"screen_background_dark\" id=\"0x01080098\" />\n  <public type=\"drawable\" name=\"screen_background_light\" id=\"0x01080099\" />\n  <public type=\"drawable\" name=\"bottom_bar\" id=\"0x0108009a\" />\n  <public type=\"drawable\" name=\"ic_dialog_info\" id=\"0x0108009b\" />\n  <public type=\"drawable\" name=\"ic_menu_sort_alphabetically\" id=\"0x0108009c\" />\n  <public type=\"drawable\" name=\"ic_menu_sort_by_size\" id=\"0x0108009d\" />\n\n  <public type=\"layout\" name=\"activity_list_item\" id=\"0x01090000\" />\n  <public type=\"layout\" name=\"expandable_list_content\" id=\"0x01090001\" />\n  <public type=\"layout\" name=\"preference_category\" id=\"0x01090002\" />\n  <public type=\"layout\" name=\"simple_list_item_1\" id=\"0x01090003\" />\n  <public type=\"layout\" name=\"simple_list_item_2\" id=\"0x01090004\" />\n  <public type=\"layout\" name=\"simple_list_item_checked\" id=\"0x01090005\" />\n  <public type=\"layout\" name=\"simple_expandable_list_item_1\" id=\"0x01090006\" />\n  <public type=\"layout\" name=\"simple_expandable_list_item_2\" id=\"0x01090007\" />\n  <public type=\"layout\" name=\"simple_spinner_item\" id=\"0x01090008\" />\n  <public type=\"layout\" name=\"simple_spinner_dropdown_item\" id=\"0x01090009\" />\n  <public type=\"layout\" name=\"simple_dropdown_item_1line\" id=\"0x0109000a\" />\n  <public type=\"layout\" name=\"simple_gallery_item\" id=\"0x0109000b\" />\n  <public type=\"layout\" name=\"test_list_item\" id=\"0x0109000c\" />\n  <public type=\"layout\" name=\"two_line_list_item\" id=\"0x0109000d\" />\n  <public type=\"layout\" name=\"browser_link_context_header\" id=\"0x0109000e\" />\n  <public type=\"layout\" name=\"simple_list_item_single_choice\" id=\"0x0109000f\" />\n  <public type=\"layout\" name=\"simple_list_item_multiple_choice\" id=\"0x01090010\" />\n  <public type=\"layout\" name=\"select_dialog_item\" id=\"0x01090011\" />\n  <public type=\"layout\" name=\"select_dialog_singlechoice\" id=\"0x01090012\" />\n  <public type=\"layout\" name=\"select_dialog_multichoice\" id=\"0x01090013\" />\n\n  <public type=\"anim\" name=\"fade_in\" id=\"0x010a0000\" />\n  <public type=\"anim\" name=\"fade_out\" id=\"0x010a0001\" />\n  <public type=\"anim\" name=\"slide_in_left\" id=\"0x010a0002\" />\n  <public type=\"anim\" name=\"slide_out_right\" id=\"0x010a0003\" />\n  <public type=\"anim\" name=\"accelerate_decelerate_interpolator\" id=\"0x010a0004\" />\n  <!-- Acceleration curve matching Flash's quadratic ease out function. -->\n  <public type=\"anim\" name=\"accelerate_interpolator\" id=\"0x010a0005\" />\n  <!-- Acceleration curve matching Flash's quadratic ease in function. -->\n  <public type=\"anim\" name=\"decelerate_interpolator\" id=\"0x010a0006\" />\n\n<!-- ===============================================================\n     Resources added in version 2 of the platform.\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"marqueeRepeatLimit\" id=\"0x0101021d\" />\n\n<!-- ===============================================================\n     Resources added in version 3 of the platform (Cupcake).\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"windowNoDisplay\" id=\"0x0101021e\" />\n  <public type=\"attr\" name=\"backgroundDimEnabled\" id=\"0x0101021f\" />\n  <public type=\"attr\" name=\"inputType\" id=\"0x01010220\" />\n  <public type=\"attr\" name=\"isDefault\" id=\"0x01010221\" />\n  <public type=\"attr\" name=\"windowDisablePreview\" id=\"0x01010222\" />\n  <public type=\"attr\" name=\"privateImeOptions\" id=\"0x01010223\" />\n  <public type=\"attr\" name=\"editorExtras\" id=\"0x01010224\" />\n  <public type=\"attr\" name=\"settingsActivity\" id=\"0x01010225\" />\n  <public type=\"attr\" name=\"fastScrollEnabled\" id=\"0x01010226\" />\n  <public type=\"attr\" name=\"reqTouchScreen\" id=\"0x01010227\" />\n  <public type=\"attr\" name=\"reqKeyboardType\" id=\"0x01010228\" />\n  <public type=\"attr\" name=\"reqHardKeyboard\" id=\"0x01010229\" />\n  <public type=\"attr\" name=\"reqNavigation\" id=\"0x0101022a\" />\n  <public type=\"attr\" name=\"windowSoftInputMode\" id=\"0x0101022b\" />\n  <public type=\"attr\" name=\"imeFullscreenBackground\" id=\"0x0101022c\" />\n  <public type=\"attr\" name=\"noHistory\" id=\"0x0101022d\" />\n  <public type=\"attr\" name=\"headerDividersEnabled\" id=\"0x0101022e\" />\n  <public type=\"attr\" name=\"footerDividersEnabled\" id=\"0x0101022f\" />\n  <public type=\"attr\" name=\"candidatesTextStyleSpans\" id=\"0x01010230\" />\n  <public type=\"attr\" name=\"smoothScrollbar\" id=\"0x01010231\" />\n  <public type=\"attr\" name=\"reqFiveWayNav\" id=\"0x01010232\" />\n  <public type=\"attr\" name=\"keyBackground\" id=\"0x01010233\" />\n  <public type=\"attr\" name=\"keyTextSize\" id=\"0x01010234\" />\n  <public type=\"attr\" name=\"labelTextSize\" id=\"0x01010235\" />\n  <public type=\"attr\" name=\"keyTextColor\" id=\"0x01010236\" />\n  <public type=\"attr\" name=\"keyPreviewLayout\" id=\"0x01010237\" />\n  <public type=\"attr\" name=\"keyPreviewOffset\" id=\"0x01010238\" />\n  <public type=\"attr\" name=\"keyPreviewHeight\" id=\"0x01010239\" />\n  <public type=\"attr\" name=\"verticalCorrection\" id=\"0x0101023a\" />\n  <public type=\"attr\" name=\"popupLayout\" id=\"0x0101023b\" />\n  <public type=\"attr\" name=\"state_long_pressable\" id=\"0x0101023c\" />\n  <public type=\"attr\" name=\"keyWidth\" id=\"0x0101023d\" />\n  <public type=\"attr\" name=\"keyHeight\" id=\"0x0101023e\" />\n  <public type=\"attr\" name=\"horizontalGap\" id=\"0x0101023f\" />\n  <public type=\"attr\" name=\"verticalGap\" id=\"0x01010240\" />\n  <public type=\"attr\" name=\"rowEdgeFlags\" id=\"0x01010241\" />\n  <public type=\"attr\" name=\"codes\" id=\"0x01010242\" />\n  <public type=\"attr\" name=\"popupKeyboard\" id=\"0x01010243\" />\n  <public type=\"attr\" name=\"popupCharacters\" id=\"0x01010244\" />\n  <public type=\"attr\" name=\"keyEdgeFlags\" id=\"0x01010245\" />\n  <public type=\"attr\" name=\"isModifier\" id=\"0x01010246\" />\n  <public type=\"attr\" name=\"isSticky\" id=\"0x01010247\" />\n  <public type=\"attr\" name=\"isRepeatable\" id=\"0x01010248\" />\n  <public type=\"attr\" name=\"iconPreview\" id=\"0x01010249\" />\n  <public type=\"attr\" name=\"keyOutputText\" id=\"0x0101024a\" />\n  <public type=\"attr\" name=\"keyLabel\" id=\"0x0101024b\" />\n  <public type=\"attr\" name=\"keyIcon\" id=\"0x0101024c\" />\n  <public type=\"attr\" name=\"keyboardMode\" id=\"0x0101024d\" />\n  <public type=\"attr\" name=\"isScrollContainer\" id=\"0x0101024e\" />\n  <public type=\"attr\" name=\"fillEnabled\" id=\"0x0101024f\" />\n  <public type=\"attr\" name=\"updatePeriodMillis\" id=\"0x01010250\" />\n  <public type=\"attr\" name=\"initialLayout\" id=\"0x01010251\" />\n  <public type=\"attr\" name=\"voiceSearchMode\" id=\"0x01010252\" />\n  <public type=\"attr\" name=\"voiceLanguageModel\" id=\"0x01010253\" />\n  <public type=\"attr\" name=\"voicePromptText\" id=\"0x01010254\" />\n  <public type=\"attr\" name=\"voiceLanguage\" id=\"0x01010255\" />\n  <public type=\"attr\" name=\"voiceMaxResults\" id=\"0x01010256\" />\n  <public type=\"attr\" name=\"bottomOffset\" id=\"0x01010257\" />\n  <public type=\"attr\" name=\"topOffset\" id=\"0x01010258\" />\n  <public type=\"attr\" name=\"allowSingleTap\" id=\"0x01010259\" />\n  <public type=\"attr\" name=\"handle\" id=\"0x0101025a\" />\n  <public type=\"attr\" name=\"content\" id=\"0x0101025b\" />\n  <public type=\"attr\" name=\"animateOnClick\" id=\"0x0101025c\" />\n  <public type=\"attr\" name=\"configure\" id=\"0x0101025d\" />\n  <public type=\"attr\" name=\"hapticFeedbackEnabled\" id=\"0x0101025e\" />\n  <public type=\"attr\" name=\"innerRadius\" id=\"0x0101025f\" />\n  <public type=\"attr\" name=\"thickness\" id=\"0x01010260\" />\n  <public type=\"attr\" name=\"sharedUserLabel\" id=\"0x01010261\" />\n  <public type=\"attr\" name=\"dropDownWidth\" id=\"0x01010262\" />\n  <public type=\"attr\" name=\"dropDownAnchor\" id=\"0x01010263\" />\n  <public type=\"attr\" name=\"imeOptions\" id=\"0x01010264\" />\n  <public type=\"attr\" name=\"imeActionLabel\" id=\"0x01010265\" />\n  <public type=\"attr\" name=\"imeActionId\" id=\"0x01010266\" />\n  <public type=\"attr\" name=\"imeExtractEnterAnimation\" id=\"0x01010268\" />\n  <public type=\"attr\" name=\"imeExtractExitAnimation\" id=\"0x01010269\" />\n\n  <!-- The part of the UI shown by an\n       {@link android.inputmethodservice.InputMethodService} that contains the\n       views for interacting with the user in extraction mode. -->\n  <public type=\"id\" name=\"extractArea\" id=\"0x0102001c\" />\n\n  <!-- The part of the UI shown by an\n       {@link android.inputmethodservice.InputMethodService} that contains the\n       views for displaying candidates for what the user has entered. -->\n  <public type=\"id\" name=\"candidatesArea\" id=\"0x0102001d\" />\n\n  <!-- The part of the UI shown by an\n       {@link android.inputmethodservice.InputMethodService} that contains the\n       views for entering text using the screen. -->\n  <public type=\"id\" name=\"inputArea\" id=\"0x0102001e\" />\n\n  <!-- Context menu ID for the \"Select All\" menu item to select all text\n       in a text view. -->\n  <public type=\"id\" name=\"selectAll\" id=\"0x0102001f\" />\n  <!-- Context menu ID for the \"Cut\" menu item to copy and delete the currently\n       selected (or all) text in a text view to the clipboard. -->\n  <public type=\"id\" name=\"cut\" id=\"0x01020020\" />\n  <!-- Context menu ID for the \"Copy\" menu item to copy the currently\n       selected (or all) text in a text view to the clipboard. -->\n  <public type=\"id\" name=\"copy\" id=\"0x01020021\" />\n  <!-- Context menu ID for the \"Paste\" menu item to copy the current contents\n       of the clipboard into the text view. -->\n  <public type=\"id\" name=\"paste\" id=\"0x01020022\" />\n  <!-- Context menu ID for the \"Copy URL\" menu item to copy the currently\n       selected URL from the text view to the clipboard. -->\n  <public type=\"id\" name=\"copyUrl\" id=\"0x01020023\" />\n  <!-- Context menu ID for the \"Input Method\" menu item to being up the\n       input method picker dialog, allowing the user to switch to another\n       input method. -->\n  <public type=\"id\" name=\"switchInputMethod\" id=\"0x01020024\" />\n  <!-- View ID of the text editor inside of an extracted text layout. -->\n  <public type=\"id\" name=\"inputExtractEditText\" id=\"0x01020025\" />\n\n  <!-- View ID of the {@link android.inputmethodservice.KeyboardView} within\n        an input method's input area. -->\n  <public type=\"id\" name=\"keyboardView\" id=\"0x01020026\" />\n  <!-- View ID of a {@link android.view.View} to close a popup keyboard -->\n  <public type=\"id\" name=\"closeButton\" id=\"0x01020027\" />\n\n  <!-- Menu ID to perform a \"start selecting text\" operation. -->\n  <public type=\"id\" name=\"startSelectingText\" id=\"0x01020028\" />\n  <!-- Menu ID to perform a \"stop selecting text\" operation. -->\n  <public type=\"id\" name=\"stopSelectingText\" id=\"0x01020029\" />\n  <!-- Menu ID to perform a \"add to dictionary\" operation. -->\n  <public type=\"id\" name=\"addToDictionary\" id=\"0x0102002a\" />\n\n  <public type=\"style\" name=\"Theme.InputMethod\" id=\"0x01030054\" />\n  <public type=\"style\" name=\"Theme.NoDisplay\" id=\"0x01030055\" />\n  <public type=\"style\" name=\"Animation.InputMethod\" id=\"0x01030056\" />\n  <public type=\"style\" name=\"Widget.KeyboardView\" id=\"0x01030057\" />\n  <public type=\"style\" name=\"ButtonBar\" id=\"0x01030058\" />\n  <public type=\"style\" name=\"Theme.Panel\" id=\"0x01030059\" />\n  <public type=\"style\" name=\"Theme.Light.Panel\" id=\"0x0103005a\" />\n\n  <public type=\"string\" name=\"dialog_alert_title\" id=\"0x01040014\" />\n  <public type=\"string\" name=\"VideoView_error_text_invalid_progressive_playback\" id=\"0x01040015\" />\n\n  <public type=\"drawable\" name=\"ic_btn_speak_now\" id=\"0x010800a4\" />\n\n  <!--  Drawable to use as a background for separators on a list with a dark background -->\n  <public type=\"drawable\" name=\"dark_header\" id=\"0x010800a5\" />\n\n  <!--  Drawable to use as a background for a taller version of the titlebar -->\n  <public type=\"drawable\" name=\"title_bar_tall\" id=\"0x010800a6\" />\n\n  <public type=\"integer\" name=\"config_shortAnimTime\" id=\"0x010e0000\" />\n  <public type=\"integer\" name=\"config_mediumAnimTime\" id=\"0x010e0001\" />\n  <public type=\"integer\" name=\"config_longAnimTime\" id=\"0x010e0002\" />\n\n<!-- ===============================================================\n     Resources added in version 4 of the platform (Donut).\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"tension\" id=\"0x0101026a\" />\n  <public type=\"attr\" name=\"extraTension\" id=\"0x0101026b\" />\n  <public type=\"attr\" name=\"anyDensity\" id=\"0x0101026c\" />\n  <public type=\"attr\" name=\"searchSuggestThreshold\" id=\"0x0101026d\" />\n  <public type=\"attr\" name=\"includeInGlobalSearch\" id=\"0x0101026e\" />\n  <public type=\"attr\" name=\"onClick\" id=\"0x0101026f\" />\n  <public type=\"attr\" name=\"targetSdkVersion\" id=\"0x01010270\" />\n  <public type=\"attr\" name=\"maxSdkVersion\" id=\"0x01010271\" />\n  <public type=\"attr\" name=\"testOnly\" id=\"0x01010272\" />\n  <public type=\"attr\" name=\"contentDescription\" id=\"0x01010273\" />\n  <public type=\"attr\" name=\"gestureStrokeWidth\" id=\"0x01010274\" />\n  <public type=\"attr\" name=\"gestureColor\" id=\"0x01010275\" />\n  <public type=\"attr\" name=\"uncertainGestureColor\" id=\"0x01010276\" />\n  <public type=\"attr\" name=\"fadeOffset\" id=\"0x01010277\" />\n  <public type=\"attr\" name=\"fadeDuration\" id=\"0x01010278\" />\n  <public type=\"attr\" name=\"gestureStrokeType\" id=\"0x01010279\" />\n  <public type=\"attr\" name=\"gestureStrokeLengthThreshold\" id=\"0x0101027a\" />\n  <public type=\"attr\" name=\"gestureStrokeSquarenessThreshold\" id=\"0x0101027b\" />\n  <public type=\"attr\" name=\"gestureStrokeAngleThreshold\" id=\"0x0101027c\" />\n  <public type=\"attr\" name=\"eventsInterceptionEnabled\" id=\"0x0101027d\" />\n  <public type=\"attr\" name=\"fadeEnabled\" id=\"0x0101027e\" />\n  <public type=\"attr\" name=\"backupAgent\" id=\"0x0101027f\" />\n  <public type=\"attr\" name=\"allowBackup\" id=\"0x01010280\" />\n  <public type=\"attr\" name=\"glEsVersion\" id=\"0x01010281\" />\n  <public type=\"attr\" name=\"queryAfterZeroResults\" id=\"0x01010282\" />\n  <public type=\"attr\" name=\"dropDownHeight\" id=\"0x01010283\" />\n  <public type=\"attr\" name=\"smallScreens\" id=\"0x01010284\" />\n  <public type=\"attr\" name=\"normalScreens\" id=\"0x01010285\" />\n  <public type=\"attr\" name=\"largeScreens\" id=\"0x01010286\" />\n  <public type=\"attr\" name=\"progressBarStyleInverse\" id=\"0x01010287\" />\n  <public type=\"attr\" name=\"progressBarStyleSmallInverse\" id=\"0x01010288\" />\n  <public type=\"attr\" name=\"progressBarStyleLargeInverse\" id=\"0x01010289\" />\n  <public type=\"attr\" name=\"searchSettingsDescription\" id=\"0x0101028a\" />\n  <public type=\"attr\" name=\"textColorPrimaryInverseDisableOnly\" id=\"0x0101028b\" />\n  <public type=\"attr\" name=\"autoUrlDetect\" id=\"0x0101028c\" />\n  <public type=\"attr\" name=\"resizeable\" id=\"0x0101028d\" />\n\n  <public type=\"style\" name=\"Widget.ProgressBar.Inverse\" id=\"0x0103005b\" />\n  <public type=\"style\" name=\"Widget.ProgressBar.Large.Inverse\" id=\"0x0103005c\" />\n  <public type=\"style\" name=\"Widget.ProgressBar.Small.Inverse\" id=\"0x0103005d\" />\n\n  <!-- @deprecated Replaced by a private asset in the phone app. -->\n  <public type=\"drawable\" name=\"stat_sys_vp_phone_call\" id=\"0x010800a7\" />\n  <!-- @deprecated Replaced by a private asset in the phone app. -->\n  <public type=\"drawable\" name=\"stat_sys_vp_phone_call_on_hold\" id=\"0x010800a8\" />\n\n  <public type=\"anim\" name=\"anticipate_interpolator\" id=\"0x010a0007\" />\n  <public type=\"anim\" name=\"overshoot_interpolator\" id=\"0x010a0008\" />\n  <public type=\"anim\" name=\"anticipate_overshoot_interpolator\" id=\"0x010a0009\" />\n  <public type=\"anim\" name=\"bounce_interpolator\" id=\"0x010a000a\" />\n  <public type=\"anim\" name=\"linear_interpolator\" id=\"0x010a000b\" />\n\n<!-- ===============================================================\n     Resources added in version 5 of the platform (Eclair).\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"required\" id=\"0x0101028e\" />\n  <public type=\"attr\" name=\"accountType\" id=\"0x0101028f\" />\n  <public type=\"attr\" name=\"contentAuthority\" id=\"0x01010290\" />\n  <public type=\"attr\" name=\"userVisible\" id=\"0x01010291\" />\n  <public type=\"attr\" name=\"windowShowWallpaper\" id=\"0x01010292\" />\n  <public type=\"attr\" name=\"wallpaperOpenEnterAnimation\" id=\"0x01010293\" />\n  <public type=\"attr\" name=\"wallpaperOpenExitAnimation\" id=\"0x01010294\" />\n  <public type=\"attr\" name=\"wallpaperCloseEnterAnimation\" id=\"0x01010295\" />\n  <public type=\"attr\" name=\"wallpaperCloseExitAnimation\" id=\"0x01010296\" />\n  <public type=\"attr\" name=\"wallpaperIntraOpenEnterAnimation\" id=\"0x01010297\" />\n  <public type=\"attr\" name=\"wallpaperIntraOpenExitAnimation\" id=\"0x01010298\" />\n  <public type=\"attr\" name=\"wallpaperIntraCloseEnterAnimation\" id=\"0x01010299\" />\n  <public type=\"attr\" name=\"wallpaperIntraCloseExitAnimation\" id=\"0x0101029a\" />\n  <public type=\"attr\" name=\"supportsUploading\" id=\"0x0101029b\" />\n  <public type=\"attr\" name=\"killAfterRestore\" id=\"0x0101029c\" />\n  <public type=\"attr\" name=\"restoreNeedsApplication\" id=\"0x0101029d\" />\n  <public type=\"attr\" name=\"smallIcon\" id=\"0x0101029e\" />\n  <public type=\"attr\" name=\"accountPreferences\" id=\"0x0101029f\" />\n  <public type=\"attr\" name=\"textAppearanceSearchResultSubtitle\" id=\"0x010102a0\" />\n  <public type=\"attr\" name=\"textAppearanceSearchResultTitle\" id=\"0x010102a1\" />\n  <public type=\"attr\" name=\"summaryColumn\" id=\"0x010102a2\" />\n  <public type=\"attr\" name=\"detailColumn\" id=\"0x010102a3\" />\n  <public type=\"attr\" name=\"detailSocialSummary\" id=\"0x010102a4\" />\n  <public type=\"attr\" name=\"thumbnail\" id=\"0x010102a5\" />\n  <public type=\"attr\" name=\"detachWallpaper\" id=\"0x010102a6\" />\n  <public type=\"attr\" name=\"finishOnCloseSystemDialogs\" id=\"0x010102a7\" />\n  <public type=\"attr\" name=\"scrollbarFadeDuration\" id=\"0x010102a8\" />\n  <public type=\"attr\" name=\"scrollbarDefaultDelayBeforeFade\" id=\"0x010102a9\" />\n  <public type=\"attr\" name=\"fadeScrollbars\" id=\"0x010102aa\" />\n  <public type=\"attr\" name=\"colorBackgroundCacheHint\" id=\"0x010102ab\" />\n  <public type=\"attr\" name=\"dropDownHorizontalOffset\" id=\"0x010102ac\" />\n  <public type=\"attr\" name=\"dropDownVerticalOffset\" id=\"0x010102ad\" />\n\n  <public type=\"style\" name=\"Theme.Wallpaper\" id=\"0x0103005e\" />\n  <public type=\"style\" name=\"Theme.Wallpaper.NoTitleBar\" id=\"0x0103005f\" />\n  <public type=\"style\" name=\"Theme.Wallpaper.NoTitleBar.Fullscreen\" id=\"0x01030060\" />\n  <public type=\"style\" name=\"Theme.WallpaperSettings\" id=\"0x01030061\" />\n  <public type=\"style\" name=\"Theme.Light.WallpaperSettings\" id=\"0x01030062\" />\n  <public type=\"style\" name=\"TextAppearance.SearchResult.Title\" id=\"0x01030063\" />\n  <public type=\"style\" name=\"TextAppearance.SearchResult.Subtitle\" id=\"0x01030064\" />\n\n  <!-- Semi-transparent background that can be used when placing a dark\n       themed UI on top of some arbitrary background (such as the\n       wallpaper).  This darkens the background sufficiently that the UI\n       can be seen. -->\n  <public type=\"drawable\" name=\"screen_background_dark_transparent\" id=\"0x010800a9\" />\n  <public type=\"drawable\" name=\"screen_background_light_transparent\" id=\"0x010800aa\" />\n  <public type=\"drawable\" name=\"stat_notify_sdcard_prepare\" id=\"0x010800ab\" />\n\n<!-- ===============================================================\n     Resources added in version 6 of the platform (Eclair 2.0.1).\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"quickContactBadgeStyleWindowSmall\" id=\"0x010102ae\" />\n  <public type=\"attr\" name=\"quickContactBadgeStyleWindowMedium\" id=\"0x010102af\" />\n  <public type=\"attr\" name=\"quickContactBadgeStyleWindowLarge\" id=\"0x010102b0\" />\n  <public type=\"attr\" name=\"quickContactBadgeStyleSmallWindowSmall\" id=\"0x010102b1\" />\n  <public type=\"attr\" name=\"quickContactBadgeStyleSmallWindowMedium\" id=\"0x010102b2\" />\n  <public type=\"attr\" name=\"quickContactBadgeStyleSmallWindowLarge\" id=\"0x010102b3\" />\n\n<!-- ===============================================================\n     Resources added in version 7 of the platform (Eclair MR1).\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"author\" id=\"0x010102b4\" />\n  <public type=\"attr\" name=\"autoStart\" id=\"0x010102b5\" />\n\n\n<!-- ===============================================================\n     Resources added in version 8 of the platform (Eclair MR2).\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"expandableListViewWhiteStyle\" id=\"0x010102b6\" />\n\n<!-- ===============================================================\n     Resources added in version 8 of the platform (Froyo / 2.2)\n     =============================================================== -->\n  <eat-comment />\n  <public type=\"attr\" name=\"installLocation\" id=\"0x010102b7\" />\n  <public type=\"attr\" name=\"vmSafeMode\" id=\"0x010102b8\" />\n  <public type=\"attr\" name=\"webTextViewStyle\" id=\"0x010102b9\" />\n  <public type=\"attr\" name=\"restoreAnyVersion\" id=\"0x010102ba\" />\n  <public type=\"attr\" name=\"tabStripLeft\" id=\"0x010102bb\" />\n  <public type=\"attr\" name=\"tabStripRight\" id=\"0x010102bc\" />\n  <public type=\"attr\" name=\"tabStripEnabled\" id=\"0x010102bd\" />\n\n  <public type=\"id\" name=\"custom\" id=\"0x0102002b\" />\n\n  <public type=\"anim\" name=\"cycle_interpolator\" id=\"0x010a000c\" />\n\n<!-- ===============================================================\n     Resources added in version 9 of the platform (Gingerbread / 2.3)\n     =============================================================== -->\n  <eat-comment />\n  <public type=\"attr\" name=\"logo\" id=\"0x010102be\" />\n  <public type=\"attr\" name=\"xlargeScreens\" id=\"0x010102bf\" />\n  <public type=\"attr\" name=\"immersive\" id=\"0x010102c0\" />\n  <public type=\"attr\" name=\"overScrollMode\" id=\"0x010102c1\" />\n  <public type=\"attr\" name=\"overScrollHeader\" id=\"0x010102c2\" />\n  <public type=\"attr\" name=\"overScrollFooter\" id=\"0x010102c3\" />\n  <public type=\"attr\" name=\"filterTouchesWhenObscured\" id=\"0x010102c4\" />\n  <public type=\"attr\" name=\"textSelectHandleLeft\" id=\"0x010102c5\" />\n  <public type=\"attr\" name=\"textSelectHandleRight\" id=\"0x010102c6\" />\n  <public type=\"attr\" name=\"textSelectHandle\" id=\"0x010102c7\" />\n  <public type=\"attr\" name=\"textSelectHandleWindowStyle\" id=\"0x010102c8\" />\n  <public type=\"attr\" name=\"popupAnimationStyle\" id=\"0x010102c9\" />\n  <public type=\"attr\" name=\"screenSize\" id=\"0x010102ca\" />\n  <public type=\"attr\" name=\"screenDensity\" id=\"0x010102cb\" />\n\n  <!-- presence drawables for videochat or audiochat capable contacts -->\n  <public type=\"drawable\" name=\"presence_video_away\" id=\"0x010800ac\" />\n  <public type=\"drawable\" name=\"presence_video_busy\" id=\"0x010800ad\" />\n  <public type=\"drawable\" name=\"presence_video_online\" id=\"0x010800ae\" />\n  <public type=\"drawable\" name=\"presence_audio_away\" id=\"0x010800af\" />\n  <public type=\"drawable\" name=\"presence_audio_busy\" id=\"0x010800b0\" />\n  <public type=\"drawable\" name=\"presence_audio_online\" id=\"0x010800b1\" />\n\n  <public type=\"style\" name=\"TextAppearance.StatusBar.Title\" id=\"0x01030065\" />\n  <public type=\"style\" name=\"TextAppearance.StatusBar.Icon\" id=\"0x01030066\" />\n  <public type=\"style\" name=\"TextAppearance.StatusBar.EventContent\" id=\"0x01030067\" />\n  <public type=\"style\" name=\"TextAppearance.StatusBar.EventContent.Title\" id=\"0x01030068\" />\n\n<!-- ===============================================================\n     Resources added in version 11 of the platform (Honeycomb / 3.0).\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"allContactsName\" id=\"0x010102cc\" />\n  <public type=\"attr\" name=\"windowActionBar\" id=\"0x010102cd\" />\n  <public type=\"attr\" name=\"actionBarStyle\" id=\"0x010102ce\" />\n  <public type=\"attr\" name=\"navigationMode\" id=\"0x010102cf\" />\n  <public type=\"attr\" name=\"displayOptions\" id=\"0x010102d0\" />\n  <public type=\"attr\" name=\"subtitle\" id=\"0x010102d1\" />\n  <public type=\"attr\" name=\"customNavigationLayout\" id=\"0x010102d2\" />\n  <public type=\"attr\" name=\"hardwareAccelerated\" id=\"0x010102d3\" />\n  <public type=\"attr\" name=\"measureWithLargestChild\" id=\"0x010102d4\" />\n  <public type=\"attr\" name=\"animateFirstView\" id=\"0x010102d5\" />\n  <public type=\"attr\" name=\"dropDownSpinnerStyle\" id=\"0x010102d6\" />\n  <public type=\"attr\" name=\"actionDropDownStyle\" id=\"0x010102d7\" />\n  <public type=\"attr\" name=\"actionButtonStyle\" id=\"0x010102d8\" />\n  <public type=\"attr\" name=\"showAsAction\" id=\"0x010102d9\" />\n  <public type=\"attr\" name=\"previewImage\" id=\"0x010102da\" />\n  <public type=\"attr\" name=\"actionModeBackground\" id=\"0x010102db\" />\n  <public type=\"attr\" name=\"actionModeCloseDrawable\" id=\"0x010102dc\" />\n  <public type=\"attr\" name=\"windowActionModeOverlay\" id=\"0x010102dd\" />\n  <public type=\"attr\" name=\"valueFrom\" id=\"0x010102de\" />\n  <public type=\"attr\" name=\"valueTo\" id=\"0x010102df\" />\n  <public type=\"attr\" name=\"valueType\" id=\"0x010102e0\" />\n  <public type=\"attr\" name=\"propertyName\" id=\"0x010102e1\" />\n  <public type=\"attr\" name=\"ordering\" id=\"0x010102e2\" />\n  <public type=\"attr\" name=\"fragment\" id=\"0x010102e3\" />\n  <public type=\"attr\" name=\"windowActionBarOverlay\" id=\"0x010102e4\" />\n  <public type=\"attr\" name=\"fragmentOpenEnterAnimation\" id=\"0x010102e5\" />\n  <public type=\"attr\" name=\"fragmentOpenExitAnimation\" id=\"0x010102e6\" />\n  <public type=\"attr\" name=\"fragmentCloseEnterAnimation\" id=\"0x010102e7\" />\n  <public type=\"attr\" name=\"fragmentCloseExitAnimation\" id=\"0x010102e8\" />\n  <public type=\"attr\" name=\"fragmentFadeEnterAnimation\" id=\"0x010102e9\" />\n  <public type=\"attr\" name=\"fragmentFadeExitAnimation\" id=\"0x010102ea\" />\n  <public type=\"attr\" name=\"actionBarSize\" id=\"0x010102eb\" />\n  <public type=\"attr\" name=\"imeSubtypeLocale\" id=\"0x010102ec\" />\n  <public type=\"attr\" name=\"imeSubtypeMode\" id=\"0x010102ed\" />\n  <public type=\"attr\" name=\"imeSubtypeExtraValue\" id=\"0x010102ee\" />\n  <public type=\"attr\" name=\"splitMotionEvents\" id=\"0x010102ef\" />\n  <public type=\"attr\" name=\"listChoiceBackgroundIndicator\" id=\"0x010102f0\" />\n  <public type=\"attr\" name=\"spinnerMode\" id=\"0x010102f1\" />\n  <public type=\"attr\" name=\"animateLayoutChanges\" id=\"0x010102f2\" />\n  <public type=\"attr\" name=\"actionBarTabStyle\" id=\"0x010102f3\" />\n  <public type=\"attr\" name=\"actionBarTabBarStyle\" id=\"0x010102f4\" />\n  <public type=\"attr\" name=\"actionBarTabTextStyle\" id=\"0x010102f5\" />\n  <public type=\"attr\" name=\"actionOverflowButtonStyle\" id=\"0x010102f6\" />\n  <public type=\"attr\" name=\"actionModeCloseButtonStyle\" id=\"0x010102f7\" />\n  <public type=\"attr\" name=\"titleTextStyle\" id=\"0x010102f8\" />\n  <public type=\"attr\" name=\"subtitleTextStyle\" id=\"0x010102f9\" />\n  <public type=\"attr\" name=\"iconifiedByDefault\" id=\"0x010102fa\" />\n  <public type=\"attr\" name=\"actionLayout\" id=\"0x010102fb\" />\n  <public type=\"attr\" name=\"actionViewClass\" id=\"0x010102fc\" />\n  <public type=\"attr\" name=\"activatedBackgroundIndicator\" id=\"0x010102fd\" />\n  <public type=\"attr\" name=\"state_activated\" id=\"0x010102fe\" />\n  <public type=\"attr\" name=\"listPopupWindowStyle\" id=\"0x010102ff\" />\n  <public type=\"attr\" name=\"popupMenuStyle\" id=\"0x01010300\" />\n  <public type=\"attr\" name=\"textAppearanceLargePopupMenu\" id=\"0x01010301\" />\n  <public type=\"attr\" name=\"textAppearanceSmallPopupMenu\" id=\"0x01010302\" />\n  <public type=\"attr\" name=\"breadCrumbTitle\" id=\"0x01010303\" />\n  <public type=\"attr\" name=\"breadCrumbShortTitle\" id=\"0x01010304\" />\n  <public type=\"attr\" name=\"listDividerAlertDialog\" id=\"0x01010305\" />\n  <public type=\"attr\" name=\"textColorAlertDialogListItem\" id=\"0x01010306\" />\n  <public type=\"attr\" name=\"loopViews\" id=\"0x01010307\" />\n  <public type=\"attr\" name=\"dialogTheme\" id=\"0x01010308\" />\n  <public type=\"attr\" name=\"alertDialogTheme\" id=\"0x01010309\" />\n  <public type=\"attr\" name=\"dividerVertical\" id=\"0x0101030a\" />\n  <public type=\"attr\" name=\"homeAsUpIndicator\" id=\"0x0101030b\" />\n  <public type=\"attr\" name=\"enterFadeDuration\" id=\"0x0101030c\" />\n  <public type=\"attr\" name=\"exitFadeDuration\" id=\"0x0101030d\" />\n  <public type=\"attr\" name=\"selectableItemBackground\" id=\"0x0101030e\" />\n  <public type=\"attr\" name=\"autoAdvanceViewId\" id=\"0x0101030f\" />\n  <public type=\"attr\" name=\"useIntrinsicSizeAsMinimum\" id=\"0x01010310\" />\n  <public type=\"attr\" name=\"actionModeCutDrawable\" id=\"0x01010311\" />\n  <public type=\"attr\" name=\"actionModeCopyDrawable\" id=\"0x01010312\" />\n  <public type=\"attr\" name=\"actionModePasteDrawable\" id=\"0x01010313\" />\n  <public type=\"attr\" name=\"textEditPasteWindowLayout\" id=\"0x01010314\" />\n  <public type=\"attr\" name=\"textEditNoPasteWindowLayout\" id=\"0x01010315\" />\n  <public type=\"attr\" name=\"textIsSelectable\" id=\"0x01010316\" />\n  <public type=\"attr\" name=\"windowEnableSplitTouch\" id=\"0x01010317\" />\n  <public type=\"attr\" name=\"indeterminateProgressStyle\" id=\"0x01010318\" />\n  <public type=\"attr\" name=\"progressBarPadding\" id=\"0x01010319\" />\n  <!-- @deprecated Not used by the framework. -->\n  <public type=\"attr\" name=\"animationResolution\" id=\"0x0101031a\" />\n  <public type=\"attr\" name=\"state_accelerated\" id=\"0x0101031b\" />\n  <public type=\"attr\" name=\"baseline\" id=\"0x0101031c\" />\n  <public type=\"attr\" name=\"homeLayout\" id=\"0x0101031d\" />\n  <public type=\"attr\" name=\"opacity\" id=\"0x0101031e\" />\n  <public type=\"attr\" name=\"alpha\" id=\"0x0101031f\" />\n  <public type=\"attr\" name=\"transformPivotX\" id=\"0x01010320\" />\n  <public type=\"attr\" name=\"transformPivotY\" id=\"0x01010321\" />\n  <public type=\"attr\" name=\"translationX\" id=\"0x01010322\" />\n  <public type=\"attr\" name=\"translationY\" id=\"0x01010323\" />\n  <public type=\"attr\" name=\"scaleX\" id=\"0x01010324\" />\n  <public type=\"attr\" name=\"scaleY\" id=\"0x01010325\" />\n  <public type=\"attr\" name=\"rotation\" id=\"0x01010326\" />\n  <public type=\"attr\" name=\"rotationX\" id=\"0x01010327\" />\n  <public type=\"attr\" name=\"rotationY\" id=\"0x01010328\" />\n  <public type=\"attr\" name=\"showDividers\" id=\"0x01010329\" />\n  <public type=\"attr\" name=\"dividerPadding\" id=\"0x0101032a\" />\n  <public type=\"attr\" name=\"borderlessButtonStyle\" id=\"0x0101032b\" />\n  <public type=\"attr\" name=\"dividerHorizontal\" id=\"0x0101032c\" />\n  <public type=\"attr\" name=\"itemPadding\" id=\"0x0101032d\" />\n  <public type=\"attr\" name=\"buttonBarStyle\" id=\"0x0101032e\" />\n  <public type=\"attr\" name=\"buttonBarButtonStyle\" id=\"0x0101032f\" />\n  <public type=\"attr\" name=\"segmentedButtonStyle\" id=\"0x01010330\" />\n  <public type=\"attr\" name=\"staticWallpaperPreview\" id=\"0x01010331\" />\n  <public type=\"attr\" name=\"allowParallelSyncs\" id=\"0x01010332\" />\n  <public type=\"attr\" name=\"isAlwaysSyncable\" id=\"0x01010333\" />\n  <public type=\"attr\" name=\"verticalScrollbarPosition\" id=\"0x01010334\" />\n  <public type=\"attr\" name=\"fastScrollAlwaysVisible\" id=\"0x01010335\" />\n  <public type=\"attr\" name=\"fastScrollThumbDrawable\" id=\"0x01010336\" />\n  <public type=\"attr\" name=\"fastScrollPreviewBackgroundLeft\" id=\"0x01010337\" />\n  <public type=\"attr\" name=\"fastScrollPreviewBackgroundRight\" id=\"0x01010338\" />\n  <public type=\"attr\" name=\"fastScrollTrackDrawable\" id=\"0x01010339\" />\n  <public type=\"attr\" name=\"fastScrollOverlayPosition\" id=\"0x0101033a\" />\n  <public type=\"attr\" name=\"customTokens\" id=\"0x0101033b\" />\n  <public type=\"attr\" name=\"nextFocusForward\" id=\"0x0101033c\" />\n  <public type=\"attr\" name=\"firstDayOfWeek\" id=\"0x0101033d\" />\n  <public type=\"attr\" name=\"showWeekNumber\" id=\"0x0101033e\" />\n  <public type=\"attr\" name=\"minDate\" id=\"0x0101033f\" />\n  <public type=\"attr\" name=\"maxDate\" id=\"0x01010340\" />\n  <public type=\"attr\" name=\"shownWeekCount\" id=\"0x01010341\" />\n  <public type=\"attr\" name=\"selectedWeekBackgroundColor\" id=\"0x01010342\" />\n  <public type=\"attr\" name=\"focusedMonthDateColor\" id=\"0x01010343\" />\n  <public type=\"attr\" name=\"unfocusedMonthDateColor\" id=\"0x01010344\" />\n  <public type=\"attr\" name=\"weekNumberColor\" id=\"0x01010345\" />\n  <public type=\"attr\" name=\"weekSeparatorLineColor\" id=\"0x01010346\" />\n  <public type=\"attr\" name=\"selectedDateVerticalBar\" id=\"0x01010347\" />\n  <public type=\"attr\" name=\"weekDayTextAppearance\" id=\"0x01010348\" />\n  <public type=\"attr\" name=\"dateTextAppearance\" id=\"0x01010349\" />\n  <public type=\"attr\" name=\"solidColor\" id=\"0x0101034a\" />\n  <public type=\"attr\" name=\"spinnersShown\" id=\"0x0101034b\" />\n  <public type=\"attr\" name=\"calendarViewShown\" id=\"0x0101034c\" />\n  <public type=\"attr\" name=\"state_multiline\" id=\"0x0101034d\" />\n  <public type=\"attr\" name=\"detailsElementBackground\" id=\"0x0101034e\" />\n  <public type=\"attr\" name=\"textColorHighlightInverse\" id=\"0x0101034f\" />\n  <public type=\"attr\" name=\"textColorLinkInverse\" id=\"0x01010350\" />\n  <public type=\"attr\" name=\"editTextColor\" id=\"0x01010351\" />\n  <public type=\"attr\" name=\"editTextBackground\" id=\"0x01010352\" />\n  <public type=\"attr\" name=\"horizontalScrollViewStyle\" id=\"0x01010353\" />\n  <public type=\"attr\" name=\"layerType\" id=\"0x01010354\" />\n  <public type=\"attr\" name=\"alertDialogIcon\" id=\"0x01010355\" />\n  <public type=\"attr\" name=\"windowMinWidthMajor\" id=\"0x01010356\" />\n  <public type=\"attr\" name=\"windowMinWidthMinor\" id=\"0x01010357\" />\n  <public type=\"attr\" name=\"queryHint\" id=\"0x01010358\" />\n  <public type=\"attr\" name=\"fastScrollTextColor\" id=\"0x01010359\" />\n  <public type=\"attr\" name=\"largeHeap\" id=\"0x0101035a\" />\n  <public type=\"attr\" name=\"windowCloseOnTouchOutside\" id=\"0x0101035b\" />\n  <public type=\"attr\" name=\"datePickerStyle\" id=\"0x0101035c\" />\n  <public type=\"attr\" name=\"calendarViewStyle\" id=\"0x0101035d\" />\n  <public type=\"attr\" name=\"textEditSidePasteWindowLayout\" id=\"0x0101035e\" />\n  <public type=\"attr\" name=\"textEditSideNoPasteWindowLayout\" id=\"0x0101035f\" />\n  <public type=\"attr\" name=\"actionMenuTextAppearance\" id=\"0x01010360\" />\n  <public type=\"attr\" name=\"actionMenuTextColor\" id=\"0x01010361\" />\n\n  <!-- A simple fade-in animation. -->\n  <public type=\"animator\" name=\"fade_in\" id=\"0x010b0000\" />\n  <!-- A simple fade-out animation. -->\n  <public type=\"animator\" name=\"fade_out\" id=\"0x010b0001\" />\n\n  <!-- Acceleration curve matching a quadtratic ease out function. -->\n  <public type=\"interpolator\" name=\"accelerate_quad\" id=\"0x010c0000\" />\n  <!-- Acceleration curve matching a quadtratic ease in function. -->\n  <public type=\"interpolator\" name=\"decelerate_quad\" id=\"0x010c0001\" />\n\n  <!-- Acceleration curve matching a cubic ease out function. -->\n  <public type=\"interpolator\" name=\"accelerate_cubic\" id=\"0x010c0002\" />\n  <!-- Acceleration curve matching a cubic ease in function. -->\n  <public type=\"interpolator\" name=\"decelerate_cubic\" id=\"0x010c0003\" />\n  <!-- Acceleration curve matching a quint ease out function. -->\n  <public type=\"interpolator\" name=\"accelerate_quint\" id=\"0x010c0004\" />\n  <!-- Acceleration curve matching a quint ease in function. -->\n  <public type=\"interpolator\" name=\"decelerate_quint\" id=\"0x010c0005\" />\n  <!-- Acceleration curve matching an ease in + ease out function -->\n  <public type=\"interpolator\" name=\"accelerate_decelerate\" id=\"0x010c0006\" />\n  <!-- An interpolator where the change starts backward then flings forward. -->\n  <public type=\"interpolator\" name=\"anticipate\" id=\"0x010c0007\" />\n  <!-- An interpolator where the change flings forward and overshoots the last\n       value then comes back. -->\n  <public type=\"interpolator\" name=\"overshoot\" id=\"0x010c0008\" />\n  <!-- An interpolator where the change starts backward then flings forward and\n       overshoots the target value and finally goes back to the final value. -->\n  <public type=\"interpolator\" name=\"anticipate_overshoot\" id=\"0x010c0009\" />\n  <!-- An interpolator where the change bounces at the end. -->\n  <public type=\"interpolator\" name=\"bounce\" id=\"0x010c000a\" />\n  <!-- An interpolator where the rate of change is constant. -->\n  <public type=\"interpolator\" name=\"linear\" id=\"0x010c000b\" />\n  <!-- Repeats the animation for one cycle. The rate of change follows a\n       sinusoidal pattern. -->\n  <public type=\"interpolator\" name=\"cycle\" id=\"0x010c000c\" />\n\n  <public type=\"id\" name=\"home\" id=\"0x0102002c\" />\n  <!-- Context menu ID for the \"Select text...\" menu item to switch to text\n       selection context mode in text views. -->\n  <public type=\"id\" name=\"selectTextMode\" id=\"0x0102002d\" />\n\n  <public type=\"dimen\" name=\"dialog_min_width_major\" id=\"0x01050003\" />\n  <public type=\"dimen\" name=\"dialog_min_width_minor\" id=\"0x01050004\" />\n  <public type=\"dimen\" name=\"notification_large_icon_width\" id=\"0x01050005\" />\n  <public type=\"dimen\" name=\"notification_large_icon_height\" id=\"0x01050006\" />\n\n  <!-- Standard content view for a {@link android.app.ListFragment}.\n       If you are implementing a subclass of ListFragment with your\n       own customized content, you can include this layout in that\n       content to still retain all of the standard functionality of\n       the base class. -->\n  <public type=\"layout\" name=\"list_content\" id=\"0x01090014\" />\n\n  <!-- A simple ListView item layout which can contain text and support (single or multiple) item selection. -->\n  <public type=\"layout\" name=\"simple_selectable_list_item\" id=\"0x01090015\" />\n\n  <!-- A version of {@link #simple_list_item_1} that is able to change its\n       background state to indicate when it is activated (that is checked by\n       a ListView). -->\n  <public type=\"layout\" name=\"simple_list_item_activated_1\" id=\"0x01090016\" />\n\n  <!-- A version of {@link #simple_list_item_2} that is able to change its\n       background state to indicate when it is activated (that is checked by\n       a ListView). -->\n  <public type=\"layout\" name=\"simple_list_item_activated_2\" id=\"0x01090017\" />\n\n  <public type=\"drawable\" name=\"dialog_holo_dark_frame\" id=\"0x010800b2\" />\n  <public type=\"drawable\" name=\"dialog_holo_light_frame\" id=\"0x010800b3\" />\n\n  <public type=\"style\" name=\"Theme.WithActionBar\" id=\"0x01030069\" />\n  <public type=\"style\" name=\"Theme.NoTitleBar.OverlayActionModes\" id=\"0x0103006a\" />\n  <public type=\"style\" name=\"Theme.Holo\" id=\"0x0103006b\" />\n  <public type=\"style\" name=\"Theme.Holo.NoActionBar\" id=\"0x0103006c\" />\n  <public type=\"style\" name=\"Theme.Holo.NoActionBar.Fullscreen\" id=\"0x0103006d\" />\n  <public type=\"style\" name=\"Theme.Holo.Light\" id=\"0x0103006e\" />\n  <public type=\"style\" name=\"Theme.Holo.Dialog\" id=\"0x0103006f\" />\n  <public type=\"style\" name=\"Theme.Holo.Dialogger.MinWidth\" id=\"0x01030070\" />\n  <public type=\"style\" name=\"Theme.Holo.Dialogger.NoActionBar\" id=\"0x01030071\" />\n  <public type=\"style\" name=\"Theme.Holo.Dialogger.NoActionBar.MinWidth\" id=\"0x01030072\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.Dialog\" id=\"0x01030073\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.Dialogger.MinWidth\" id=\"0x01030074\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.Dialogger.NoActionBar\" id=\"0x01030075\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.Dialogger.NoActionBar.MinWidth\" id=\"0x01030076\" />\n  <public type=\"style\" name=\"Theme.Holo.DialogWhenLarge\" id=\"0x01030077\" />\n  <public type=\"style\" name=\"Theme.Holo.DialogWhenLarge.NoActionBar\" id=\"0x01030078\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.DialogWhenLarge\" id=\"0x01030079\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.DialogWhenLarge.NoActionBar\" id=\"0x0103007a\" />\n  <public type=\"style\" name=\"Theme.Holo.Panel\" id=\"0x0103007b\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.Panel\" id=\"0x0103007c\" />\n  <public type=\"style\" name=\"Theme.Holo.Wallpaper\" id=\"0x0103007d\" />\n  <public type=\"style\" name=\"Theme.Holo.Wallpaper.NoTitleBar\" id=\"0x0103007e\" />\n  <public type=\"style\" name=\"Theme.Holo.InputMethod\" id=\"0x0103007f\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.PopupMenu.Large\" id=\"0x01030080\" />\n  <public type=\"style\" name=\"TextAppearance.Widget.PopupMenu.Small\" id=\"0x01030081\" />\n  <public type=\"style\" name=\"Widget.ActionBar\" id=\"0x01030082\" />\n  <public type=\"style\" name=\"Widget.Spinner.DropDown\" id=\"0x01030083\" />\n  <public type=\"style\" name=\"Widget.ActionButton\" id=\"0x01030084\" />\n  <public type=\"style\" name=\"Widget.ListPopupWindow\" id=\"0x01030085\" />\n  <public type=\"style\" name=\"Widget.PopupMenu\" id=\"0x01030086\" />\n  <public type=\"style\" name=\"Widget.ActionButton.Overflow\" id=\"0x01030087\" />\n  <public type=\"style\" name=\"Widget.ActionButton.CloseMode\" id=\"0x01030088\" />\n  <public type=\"style\" name=\"Widget.FragmentBreadCrumbs\" id=\"0x01030089\" />\n  <public type=\"style\" name=\"Widget.Holo\" id=\"0x0103008a\" />\n  <public type=\"style\" name=\"Widget.Holo.Button\" id=\"0x0103008b\" />\n  <public type=\"style\" name=\"Widget.Holo.Button.Small\" id=\"0x0103008c\" />\n  <public type=\"style\" name=\"Widget.Holo.Button.Inset\" id=\"0x0103008d\" />\n  <public type=\"style\" name=\"Widget.Holo.Button.Toggle\" id=\"0x0103008e\" />\n  <public type=\"style\" name=\"Widget.Holo.TextView\" id=\"0x0103008f\" />\n  <public type=\"style\" name=\"Widget.Holo.AutoCompleteTextView\" id=\"0x01030090\" />\n  <public type=\"style\" name=\"Widget.Holo.CompoundButton.CheckBox\" id=\"0x01030091\" />\n  <public type=\"style\" name=\"Widget.Holo.ListView.DropDown\" id=\"0x01030092\" />\n  <public type=\"style\" name=\"Widget.Holo.EditText\" id=\"0x01030093\" />\n  <public type=\"style\" name=\"Widget.Holo.ExpandableListView\" id=\"0x01030094\" />\n  <public type=\"style\" name=\"Widget.Holo.GridView\" id=\"0x01030095\" />\n  <public type=\"style\" name=\"Widget.Holo.ImageButton\" id=\"0x01030096\" />\n  <public type=\"style\" name=\"Widget.Holo.ListView\" id=\"0x01030097\" />\n  <public type=\"style\" name=\"Widget.Holo.PopupWindow\" id=\"0x01030098\" />\n  <public type=\"style\" name=\"Widget.Holo.ProgressBar\" id=\"0x01030099\" />\n  <public type=\"style\" name=\"Widget.Holo.ProgressBar.Horizontal\" id=\"0x0103009a\" />\n  <public type=\"style\" name=\"Widget.Holo.ProgressBar.Small\" id=\"0x0103009b\" />\n  <public type=\"style\" name=\"Widget.Holo.ProgressBar.Small.Title\" id=\"0x0103009c\" />\n  <public type=\"style\" name=\"Widget.Holo.ProgressBar.Large\" id=\"0x0103009d\" />\n  <public type=\"style\" name=\"Widget.Holo.SeekBar\" id=\"0x0103009e\" />\n  <public type=\"style\" name=\"Widget.Holo.RatingBar\" id=\"0x0103009f\" />\n  <public type=\"style\" name=\"Widget.Holo.RatingBar.Indicator\" id=\"0x010300a0\" />\n  <public type=\"style\" name=\"Widget.Holo.RatingBar.Small\" id=\"0x010300a1\" />\n  <public type=\"style\" name=\"Widget.Holo.CompoundButton.RadioButton\" id=\"0x010300a2\" />\n  <public type=\"style\" name=\"Widget.Holo.ScrollView\" id=\"0x010300a3\" />\n  <public type=\"style\" name=\"Widget.Holo.HorizontalScrollView\" id=\"0x010300a4\" />\n  <public type=\"style\" name=\"Widget.Holo.Spinner\" id=\"0x010300a5\" />\n  <public type=\"style\" name=\"Widget.Holo.CompoundButton.Star\" id=\"0x010300a6\" />\n  <public type=\"style\" name=\"Widget.Holo.TabWidget\" id=\"0x010300a7\" />\n  <public type=\"style\" name=\"Widget.Holo.WebTextView\" id=\"0x010300a8\" />\n  <public type=\"style\" name=\"Widget.Holo.WebView\" id=\"0x010300a9\" />\n  <public type=\"style\" name=\"Widget.Holo.DropDownItem\" id=\"0x010300aa\" />\n  <public type=\"style\" name=\"Widget.Holo.DropDownItem.Spinner\" id=\"0x010300ab\" />\n  <public type=\"style\" name=\"Widget.Holo.TextView.SpinnerItem\" id=\"0x010300ac\" />\n  <public type=\"style\" name=\"Widget.Holo.ListPopupWindow\" id=\"0x010300ad\" />\n  <public type=\"style\" name=\"Widget.Holo.PopupMenu\" id=\"0x010300ae\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionButton\" id=\"0x010300af\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionButton.Overflow\" id=\"0x010300b0\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionButton.TextButton\" id=\"0x010300b1\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionMode\" id=\"0x010300b2\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionButton.CloseMode\" id=\"0x010300b3\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionBar\" id=\"0x010300b4\" />\n  <public type=\"style\" name=\"Widget.Holo.Light\" id=\"0x010300b5\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.Button\" id=\"0x010300b6\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.Button.Small\" id=\"0x010300b7\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.Button.Inset\" id=\"0x010300b8\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.Button.Toggle\" id=\"0x010300b9\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.TextView\" id=\"0x010300ba\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.AutoCompleteTextView\" id=\"0x010300bb\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.CompoundButton.CheckBox\" id=\"0x010300bc\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ListView.DropDown\" id=\"0x010300bd\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.EditText\" id=\"0x010300be\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ExpandableListView\" id=\"0x010300bf\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.GridView\" id=\"0x010300c0\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ImageButton\" id=\"0x010300c1\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ListView\" id=\"0x010300c2\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.PopupWindow\" id=\"0x010300c3\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ProgressBar\" id=\"0x010300c4\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ProgressBar.Horizontal\" id=\"0x010300c5\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ProgressBar.Small\" id=\"0x010300c6\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ProgressBar.Small.Title\" id=\"0x010300c7\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ProgressBar.Large\" id=\"0x010300c8\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ProgressBar.Inverse\" id=\"0x010300c9\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ProgressBar.Small.Inverse\" id=\"0x010300ca\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ProgressBar.Large.Inverse\" id=\"0x010300cb\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.SeekBar\" id=\"0x010300cc\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.RatingBar\" id=\"0x010300cd\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.RatingBar.Indicator\" id=\"0x010300ce\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.RatingBar.Small\" id=\"0x010300cf\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.CompoundButton.RadioButton\" id=\"0x010300d0\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ScrollView\" id=\"0x010300d1\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.HorizontalScrollView\" id=\"0x010300d2\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.Spinner\" id=\"0x010300d3\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.CompoundButton.Star\" id=\"0x010300d4\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.TabWidget\" id=\"0x010300d5\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.WebTextView\" id=\"0x010300d6\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.WebView\" id=\"0x010300d7\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.DropDownItem\" id=\"0x010300d8\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.DropDownItem.Spinner\" id=\"0x010300d9\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.TextView.SpinnerItem\" id=\"0x010300da\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ListPopupWindow\" id=\"0x010300db\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.PopupMenu\" id=\"0x010300dc\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionButton\" id=\"0x010300dd\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionButton.Overflow\" id=\"0x010300de\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionMode\" id=\"0x010300df\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionButton.CloseMode\" id=\"0x010300e0\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar\" id=\"0x010300e1\" />\n  <public type=\"style\" name=\"Widget.Holo.Button.Borderless\" id=\"0x010300e2\" />\n  <public type=\"style\" name=\"Widget.Holo.Tab\" id=\"0x010300e3\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.Tab\" id=\"0x010300e4\" />\n  <public type=\"style\" name=\"Holo.ButtonBar\" id=\"0x010300e5\" />\n  <public type=\"style\" name=\"Holo.Light.ButtonBar\" id=\"0x010300e6\" />\n  <public type=\"style\" name=\"Holo.ButtonBar.AlertDialog\" id=\"0x010300e7\" />\n  <public type=\"style\" name=\"Holo.Light.ButtonBar.AlertDialog\" id=\"0x010300e8\" />\n  <public type=\"style\" name=\"Holo.SegmentedButton\" id=\"0x010300e9\" />\n  <public type=\"style\" name=\"Holo.Light.SegmentedButton\" id=\"0x010300ea\" />\n  <public type=\"style\" name=\"Widget.CalendarView\" id=\"0x010300eb\" />\n  <public type=\"style\" name=\"Widget.Holo.CalendarView\" id=\"0x010300ec\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.CalendarView\" id=\"0x010300ed\" />\n  <public type=\"style\" name=\"Widget.DatePicker\" id=\"0x010300ee\" />\n  <public type=\"style\" name=\"Widget.Holo.DatePicker\" id=\"0x010300ef\" />\n\n  <public type=\"string\" name=\"selectTextMode\" id=\"0x01040016\" />\n\n  <!-- Default icon for applications that don't specify an icon. -->\n  <public type=\"mipmap\" name=\"sym_def_app_icon\" id=\"0x010d0000\" />\n\n<!-- ===============================================================\n     Resources added in version 12 of the platform (Honeycomb MR 1 / 3.1)\n     =============================================================== -->\n  <eat-comment />\n  <public type=\"attr\" name=\"textCursorDrawable\" id=\"0x01010362\" />\n  <public type=\"attr\" name=\"resizeMode\" id=\"0x01010363\" />\n\n<!-- ===============================================================\n     Resources added in version 13 of the platform (Honeycomb MR 2 / 3.2)\n     =============================================================== -->\n  <eat-comment />\n  <public type=\"attr\" name=\"requiresSmallestWidthDp\" id=\"0x01010364\" />\n  <public type=\"attr\" name=\"compatibleWidthLimitDp\" id=\"0x01010365\" />\n  <public type=\"attr\" name=\"largestWidthLimitDp\" id=\"0x01010366\" />\n\n  <public type=\"style\" name=\"Theme.Holo.Light.NoActionBar\" id=\"0x010300f0\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.NoActionBar.Fullscreen\" id=\"0x010300f1\" />\n\n  <public type=\"style\" name=\"Widget.ActionBar.TabView\" id=\"0x010300f2\" />\n  <public type=\"style\" name=\"Widget.ActionBar.TabText\" id=\"0x010300f3\" />\n  <public type=\"style\" name=\"Widget.ActionBar.TabBar\" id=\"0x010300f4\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionBar.TabView\" id=\"0x010300f5\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionBar.TabText\" id=\"0x010300f6\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionBar.TabBar\" id=\"0x010300f7\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar.TabView\" id=\"0x010300f8\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar.TabText\" id=\"0x010300f9\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar.TabBar\" id=\"0x010300fa\" />\n  <public type=\"style\" name=\"TextAppearance.Holo\" id=\"0x010300fb\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Inverse\" id=\"0x010300fc\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Large\" id=\"0x010300fd\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Large.Inverse\" id=\"0x010300fe\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Medium\" id=\"0x010300ff\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Medium.Inverse\" id=\"0x01030100\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Small\" id=\"0x01030101\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Small.Inverse\" id=\"0x01030102\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.SearchResult.Title\" id=\"0x01030103\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.SearchResult.Subtitle\" id=\"0x01030104\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget\" id=\"0x01030105\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.Button\" id=\"0x01030106\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.IconMenu.Item\" id=\"0x01030107\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.TabWidget\" id=\"0x01030108\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.TextView\" id=\"0x01030109\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.TextView.PopupMenu\" id=\"0x0103010a\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.DropDownHint\" id=\"0x0103010b\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.DropDownItem\" id=\"0x0103010c\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.TextView.SpinnerItem\" id=\"0x0103010d\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.EditText\" id=\"0x0103010e\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.PopupMenu\" id=\"0x0103010f\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.PopupMenu.Large\" id=\"0x01030110\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.PopupMenu.Small\" id=\"0x01030111\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionBar.Title\" id=\"0x01030112\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionBar.Subtitle\" id=\"0x01030113\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionMode.Title\" id=\"0x01030114\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionMode.Subtitle\" id=\"0x01030115\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.WindowTitle\" id=\"0x01030116\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.DialogWindowTitle\" id=\"0x01030117\" />\n\n<!-- ===============================================================\n     Resources added in version 14 of the platform (Ice Cream Sandwich / 4.0)\n     =============================================================== -->\n  <eat-comment />\n  <public type=\"attr\" name=\"state_hovered\" id=\"0x01010367\" />\n  <public type=\"attr\" name=\"state_drag_can_accept\" id=\"0x01010368\" />\n  <public type=\"attr\" name=\"state_drag_hovered\" id=\"0x01010369\" />\n  <public type=\"attr\" name=\"stopWithTask\" id=\"0x0101036a\" />\n  <public type=\"attr\" name=\"switchTextOn\" id=\"0x0101036b\" />\n  <public type=\"attr\" name=\"switchTextOff\" id=\"0x0101036c\" />\n  <public type=\"attr\" name=\"switchPreferenceStyle\" id=\"0x0101036d\" />\n  <public type=\"attr\" name=\"switchTextAppearance\" id=\"0x0101036e\" />\n  <public type=\"attr\" name=\"track\" id=\"0x0101036f\" />\n  <public type=\"attr\" name=\"switchMinWidth\" id=\"0x01010370\" />\n  <public type=\"attr\" name=\"switchPadding\" id=\"0x01010371\" />\n  <public type=\"attr\" name=\"thumbTextPadding\" id=\"0x01010372\" />\n  <public type=\"attr\" name=\"textSuggestionsWindowStyle\" id=\"0x01010373\" />\n  <public type=\"attr\" name=\"textEditSuggestionItemLayout\" id=\"0x01010374\" />\n  <public type=\"attr\" name=\"rowCount\" id=\"0x01010375\" />\n  <public type=\"attr\" name=\"rowOrderPreserved\" id=\"0x01010376\" />\n  <public type=\"attr\" name=\"columnCount\" id=\"0x01010377\" />\n  <public type=\"attr\" name=\"columnOrderPreserved\" id=\"0x01010378\" />\n  <public type=\"attr\" name=\"useDefaultMargins\" id=\"0x01010379\" />\n  <public type=\"attr\" name=\"alignmentMode\" id=\"0x0101037a\" />\n  <public type=\"attr\" name=\"layout_row\" id=\"0x0101037b\" />\n  <public type=\"attr\" name=\"layout_rowSpan\" id=\"0x0101037c\" />\n  <public type=\"attr\" name=\"layout_columnSpan\" id=\"0x0101037d\" />\n  <public type=\"attr\" name=\"actionModeSelectAllDrawable\" id=\"0x0101037e\" />\n  <public type=\"attr\" name=\"isAuxiliary\" id=\"0x0101037f\" />\n  <public type=\"attr\" name=\"accessibilityEventTypes\" id=\"0x01010380\" />\n  <public type=\"attr\" name=\"packageNames\" id=\"0x01010381\" />\n  <public type=\"attr\" name=\"accessibilityFeedbackType\" id=\"0x01010382\" />\n  <public type=\"attr\" name=\"notificationTimeout\" id=\"0x01010383\" />\n  <public type=\"attr\" name=\"accessibilityFlags\" id=\"0x01010384\" />\n  <public type=\"attr\" name=\"canRetrieveWindowContent\" id=\"0x01010385\" />\n  <public type=\"attr\" name=\"listPreferredItemHeightLarge\" id=\"0x01010386\" />\n  <public type=\"attr\" name=\"listPreferredItemHeightSmall\" id=\"0x01010387\" />\n  <public type=\"attr\" name=\"actionBarSplitStyle\" id=\"0x01010388\" />\n  <public type=\"attr\" name=\"actionProviderClass\" id=\"0x01010389\" />\n  <public type=\"attr\" name=\"backgroundStacked\" id=\"0x0101038a\" />\n  <public type=\"attr\" name=\"backgroundSplit\" id=\"0x0101038b\" />\n  <public type=\"attr\" name=\"textAllCaps\" id=\"0x0101038c\" />\n  <public type=\"attr\" name=\"colorPressedHighlight\" id=\"0x0101038d\" />\n  <public type=\"attr\" name=\"colorLongPressedHighlight\" id=\"0x0101038e\" />\n  <public type=\"attr\" name=\"colorFocusedHighlight\" id=\"0x0101038f\" />\n  <public type=\"attr\" name=\"colorActivatedHighlight\" id=\"0x01010390\" />\n  <public type=\"attr\" name=\"colorMultiSelectHighlight\" id=\"0x01010391\" />\n  <public type=\"attr\" name=\"drawableStart\" id=\"0x01010392\" />\n  <public type=\"attr\" name=\"drawableEnd\" id=\"0x01010393\" />\n  <public type=\"attr\" name=\"actionModeStyle\" id=\"0x01010394\" />\n  <public type=\"attr\" name=\"minResizeWidth\" id=\"0x01010395\" />\n  <public type=\"attr\" name=\"minResizeHeight\" id=\"0x01010396\" />\n  <public type=\"attr\" name=\"actionBarWidgetTheme\" id=\"0x01010397\" />\n  <public type=\"attr\" name=\"uiOptions\" id=\"0x01010398\" />\n  <public type=\"attr\" name=\"subtypeLocale\" id=\"0x01010399\" />\n  <public type=\"attr\" name=\"subtypeExtraValue\" id=\"0x0101039a\" />\n  <public type=\"attr\" name=\"actionBarDivider\" id=\"0x0101039b\" />\n  <public type=\"attr\" name=\"actionBarItemBackground\" id=\"0x0101039c\" />\n  <public type=\"attr\" name=\"actionModeSplitBackground\" id=\"0x0101039d\" />\n  <public type=\"attr\" name=\"textAppearanceListItem\" id=\"0x0101039e\" />\n  <public type=\"attr\" name=\"textAppearanceListItemSmall\" id=\"0x0101039f\" />\n  <!-- @deprecated Removed. -->\n  <public type=\"attr\" name=\"targetDescriptions\" id=\"0x010103a0\" />\n  <!-- @deprecated Removed. -->\n  <public type=\"attr\" name=\"directionDescriptions\" id=\"0x010103a1\" />\n  <public type=\"attr\" name=\"overridesImplicitlyEnabledSubtype\" id=\"0x010103a2\" />\n  <public type=\"attr\" name=\"listPreferredItemPaddingLeft\" id=\"0x010103a3\" />\n  <public type=\"attr\" name=\"listPreferredItemPaddingRight\" id=\"0x010103a4\" />\n  <public type=\"attr\" name=\"requiresFadingEdge\" id=\"0x010103a5\" />\n  <public type=\"attr\" name=\"publicKey\" id=\"0x010103a6\" />\n\n  <public type=\"style\" name=\"TextAppearance.SuggestionHighlight\" id=\"0x01030118\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.DarkActionBar\" id=\"0x01030119\" />\n  <public type=\"style\" name=\"Widget.Holo.Button.Borderless.Small\" id=\"0x0103011a\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.Button.Borderless.Small\" id=\"0x0103011b\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionBar.Title.Inverse\" id=\"0x0103011c\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse\" id=\"0x0103011d\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionMode.Title.Inverse\" id=\"0x0103011e\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionMode.Subtitle.Inverse\" id=\"0x0103011f\" />\n  <public type=\"style\" name=\"TextAppearance.Holo.Widget.ActionBar.Menu\" id=\"0x01030120\" />\n  <public type=\"style\" name=\"Widget.Holo.ActionBar.Solid\" id=\"0x01030121\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar.Solid\" id=\"0x01030122\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar.Solid.Inverse\" id=\"0x01030123\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar.TabBar.Inverse\" id=\"0x01030124\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar.TabView.Inverse\" id=\"0x01030125\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionBar.TabText.Inverse\" id=\"0x01030126\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.ActionMode.Inverse\" id=\"0x01030127\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault\" id=\"0x01030128\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.NoActionBar\" id=\"0x01030129\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.NoActionBar.Fullscreen\" id=\"0x0103012a\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light\" id=\"0x0103012b\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.NoActionBar\" id=\"0x0103012c\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.NoActionBar.Fullscreen\" id=\"0x0103012d\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Dialog\" id=\"0x0103012e\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Dialogger.MinWidth\" id=\"0x0103012f\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Dialogger.NoActionBar\" id=\"0x01030130\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Dialogger.NoActionBar.MinWidth\" id=\"0x01030131\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.Dialog\" id=\"0x01030132\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.Dialogger.MinWidth\" id=\"0x01030133\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.Dialogger.NoActionBar\" id=\"0x01030134\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.Dialogger.NoActionBar.MinWidth\" id=\"0x01030135\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.DialogWhenLarge\" id=\"0x01030136\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.DialogWhenLarge.NoActionBar\" id=\"0x01030137\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.DialogWhenLarge\" id=\"0x01030138\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar\" id=\"0x01030139\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Panel\" id=\"0x0103013a\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.Panel\" id=\"0x0103013b\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Wallpaper\" id=\"0x0103013c\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Wallpaper.NoTitleBar\" id=\"0x0103013d\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.InputMethod\" id=\"0x0103013e\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.DarkActionBar\" id=\"0x0103013f\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault\" id=\"0x01030140\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Button\" id=\"0x01030141\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Button.Small\" id=\"0x01030142\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Button.Inset\" id=\"0x01030143\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Button.Toggle\" id=\"0x01030144\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Button.Borderless.Small\" id=\"0x01030145\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.TextView\" id=\"0x01030146\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.AutoCompleteTextView\" id=\"0x01030147\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.CompoundButton.CheckBox\" id=\"0x01030148\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ListView.DropDown\" id=\"0x01030149\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.EditText\" id=\"0x0103014a\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ExpandableListView\" id=\"0x0103014b\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.GridView\" id=\"0x0103014c\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ImageButton\" id=\"0x0103014d\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ListView\" id=\"0x0103014e\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.PopupWindow\" id=\"0x0103014f\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ProgressBar\" id=\"0x01030150\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ProgressBar.Horizontal\" id=\"0x01030151\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ProgressBar.Small\" id=\"0x01030152\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ProgressBar.Small.Title\" id=\"0x01030153\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ProgressBar.Large\" id=\"0x01030154\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.SeekBar\" id=\"0x01030155\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.RatingBar\" id=\"0x01030156\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.RatingBar.Indicator\" id=\"0x01030157\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.RatingBar.Small\" id=\"0x01030158\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.CompoundButton.RadioButton\" id=\"0x01030159\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ScrollView\" id=\"0x0103015a\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.HorizontalScrollView\" id=\"0x0103015b\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Spinner\" id=\"0x0103015c\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.CompoundButton.Star\" id=\"0x0103015d\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.TabWidget\" id=\"0x0103015e\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.WebTextView\" id=\"0x0103015f\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.WebView\" id=\"0x01030160\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.DropDownItem\" id=\"0x01030161\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.DropDownItem.Spinner\" id=\"0x01030162\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.TextView.SpinnerItem\" id=\"0x01030163\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ListPopupWindow\" id=\"0x01030164\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.PopupMenu\" id=\"0x01030165\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionButton\" id=\"0x01030166\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionButton.Overflow\" id=\"0x01030167\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionButton.TextButton\" id=\"0x01030168\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionMode\" id=\"0x01030169\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionButton.CloseMode\" id=\"0x0103016a\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionBar\" id=\"0x0103016b\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Button.Borderless\" id=\"0x0103016c\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Tab\" id=\"0x0103016d\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.CalendarView\" id=\"0x0103016e\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.DatePicker\" id=\"0x0103016f\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionBar.TabView\" id=\"0x01030170\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionBar.TabText\" id=\"0x01030171\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionBar.TabBar\" id=\"0x01030172\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.ActionBar.Solid\" id=\"0x01030173\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light\" id=\"0x01030174\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.Button\" id=\"0x01030175\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.Button.Small\" id=\"0x01030176\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.Button.Inset\" id=\"0x01030177\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.Button.Toggle\" id=\"0x01030178\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.Button.Borderless.Small\" id=\"0x01030179\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.TextView\" id=\"0x0103017a\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.AutoCompleteTextView\" id=\"0x0103017b\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.CompoundButton.CheckBox\" id=\"0x0103017c\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ListView.DropDown\" id=\"0x0103017d\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.EditText\" id=\"0x0103017e\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ExpandableListView\" id=\"0x0103017f\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.GridView\" id=\"0x01030180\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ImageButton\" id=\"0x01030181\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ListView\" id=\"0x01030182\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.PopupWindow\" id=\"0x01030183\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ProgressBar\" id=\"0x01030184\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ProgressBar.Horizontal\" id=\"0x01030185\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ProgressBar.Small\" id=\"0x01030186\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ProgressBar.Small.Title\" id=\"0x01030187\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ProgressBar.Large\" id=\"0x01030188\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ProgressBar.Inverse\" id=\"0x01030189\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ProgressBar.Small.Inverse\" id=\"0x0103018a\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ProgressBar.Large.Inverse\" id=\"0x0103018b\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.SeekBar\" id=\"0x0103018c\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.RatingBar\" id=\"0x0103018d\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.RatingBar.Indicator\" id=\"0x0103018e\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.RatingBar.Small\" id=\"0x0103018f\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.CompoundButton.RadioButton\" id=\"0x01030190\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ScrollView\" id=\"0x01030191\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.HorizontalScrollView\" id=\"0x01030192\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.Spinner\" id=\"0x01030193\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.CompoundButton.Star\" id=\"0x01030194\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.TabWidget\" id=\"0x01030195\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.WebTextView\" id=\"0x01030196\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.WebView\" id=\"0x01030197\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.DropDownItem\" id=\"0x01030198\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.DropDownItem.Spinner\" id=\"0x01030199\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.TextView.SpinnerItem\" id=\"0x0103019a\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ListPopupWindow\" id=\"0x0103019b\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.PopupMenu\" id=\"0x0103019c\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.Tab\" id=\"0x0103019d\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.CalendarView\" id=\"0x0103019e\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionButton\" id=\"0x0103019f\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionButton.Overflow\" id=\"0x010301a0\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionMode\" id=\"0x010301a1\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionButton.CloseMode\" id=\"0x010301a2\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar\" id=\"0x010301a3\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar.TabView\" id=\"0x010301a4\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar.TabText\" id=\"0x010301a5\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar.TabBar\" id=\"0x010301a6\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar.Solid\" id=\"0x010301a7\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar.Solid.Inverse\" id=\"0x010301a8\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse\" id=\"0x010301a9\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar.TabView.Inverse\" id=\"0x010301aa\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionBar.TabText.Inverse\" id=\"0x010301ab\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.ActionMode.Inverse\" id=\"0x010301ac\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault\" id=\"0x010301ad\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Inverse\" id=\"0x010301ae\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Large\" id=\"0x010301af\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Large.Inverse\" id=\"0x010301b0\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Medium\" id=\"0x010301b1\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Medium.Inverse\" id=\"0x010301b2\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Small\" id=\"0x010301b3\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Small.Inverse\" id=\"0x010301b4\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.SearchResult.Title\" id=\"0x010301b5\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.SearchResult.Subtitle\" id=\"0x010301b6\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.WindowTitle\" id=\"0x010301b7\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.DialogWindowTitle\" id=\"0x010301b8\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget\" id=\"0x010301b9\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.Button\" id=\"0x010301ba\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.IconMenu.Item\" id=\"0x010301bb\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.TabWidget\" id=\"0x010301bc\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.TextView\" id=\"0x010301bd\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.TextView.PopupMenu\" id=\"0x010301be\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.DropDownHint\" id=\"0x010301bf\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.DropDownItem\" id=\"0x010301c0\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.TextView.SpinnerItem\" id=\"0x010301c1\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.EditText\" id=\"0x010301c2\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.PopupMenu\" id=\"0x010301c3\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.PopupMenu.Large\" id=\"0x010301c4\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.PopupMenu.Small\" id=\"0x010301c5\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionBar.Title\" id=\"0x010301c6\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle\" id=\"0x010301c7\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionMode.Title\" id=\"0x010301c8\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle\" id=\"0x010301c9\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse\" id=\"0x010301ca\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle.Inverse\" id=\"0x010301cb\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionMode.Title.Inverse\" id=\"0x010301cc\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse\" id=\"0x010301cd\" />\n  <public type=\"style\" name=\"TextAppearance.DeviceDefault.Widget.ActionBar.Menu\" id=\"0x010301ce\" />\n  <public type=\"style\" name=\"DeviceDefault.ButtonBar\" id=\"0x010301cf\" />\n  <public type=\"style\" name=\"DeviceDefault.ButtonBar.AlertDialog\" id=\"0x010301d0\" />\n  <public type=\"style\" name=\"DeviceDefault.SegmentedButton\" id=\"0x010301d1\" />\n  <public type=\"style\" name=\"DeviceDefault.Light.ButtonBar\" id=\"0x010301d2\" />\n  <public type=\"style\" name=\"DeviceDefault.Light.ButtonBar.AlertDialog\" id=\"0x010301d3\" />\n  <public type=\"style\" name=\"DeviceDefault.Light.SegmentedButton\" id=\"0x010301d4\" />\n\n  <public type=\"integer\" name=\"status_bar_notification_info_maxnum\" id=\"0x010e0003\" />\n\n  <public type=\"string\" name=\"status_bar_notification_info_overflow\" id=\"0x01040017\" />\n\n  <public type=\"color\" name=\"holo_blue_light\" id=\"0x01060012\" />\n  <public type=\"color\" name=\"holo_blue_dark\" id=\"0x01060013\" />\n  <public type=\"color\" name=\"holo_green_light\" id=\"0x01060014\" />\n  <public type=\"color\" name=\"holo_green_dark\" id=\"0x01060015\" />\n  <public type=\"color\" name=\"holo_red_light\" id=\"0x01060016\" />\n  <public type=\"color\" name=\"holo_red_dark\" id=\"0x01060017\" />\n  <public type=\"color\" name=\"holo_orange_light\" id=\"0x01060018\" />\n  <public type=\"color\" name=\"holo_orange_dark\" id=\"0x01060019\" />\n  <public type=\"color\" name=\"holo_purple\" id=\"0x0106001a\" />\n  <public type=\"color\" name=\"holo_blue_bright\" id=\"0x0106001b\" />\n\n<!-- ===============================================================\n     Resources added in version 16 of the platform (Jelly Bean)\n     =============================================================== -->\n  <eat-comment />\n  <public type=\"attr\" name=\"parentActivityName\" id=\"0x010103a7\" />\n  <public type=\"attr\" name=\"isolatedProcess\" id=\"0x010103a9\" />\n  <public type=\"attr\" name=\"importantForAccessibility\" id=\"0x010103aa\" />\n  <public type=\"attr\" name=\"keyboardLayout\" id=\"0x010103ab\" />\n  <public type=\"attr\" name=\"fontFamily\" id=\"0x010103ac\" />\n  <public type=\"attr\" name=\"mediaRouteButtonStyle\" id=\"0x010103ad\" />\n  <public type=\"attr\" name=\"mediaRouteTypes\" id=\"0x010103ae\" />\n\n  <public type=\"style\" name=\"Widget.Holo.MediaRouteButton\" id=\"0x010301d5\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.MediaRouteButton\" id=\"0x010301d6\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.MediaRouteButton\" id=\"0x010301d7\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.MediaRouteButton\" id=\"0x010301d8\" />\n\n<!-- ===============================================================\n     Resources added in version 17 of the platform (Jelly Bean MR1)\n     =============================================================== -->\n  <eat-comment />\n  <public type=\"attr\" name=\"supportsRtl\" id=\"0x010103af\" />\n  <public type=\"attr\" name=\"textDirection\" id=\"0x010103b0\" />\n  <public type=\"attr\" name=\"textAlignment\" id=\"0x010103b1\" />\n  <public type=\"attr\" name=\"layoutDirection\" id=\"0x010103b2\" />\n  <public type=\"attr\" name=\"paddingStart\" id=\"0x010103b3\" />\n  <public type=\"attr\" name=\"paddingEnd\" id=\"0x010103b4\" />\n  <public type=\"attr\" name=\"layout_marginStart\" id=\"0x010103b5\" />\n  <public type=\"attr\" name=\"layout_marginEnd\" id=\"0x010103b6\" />\n  <public type=\"attr\" name=\"layout_toStartOf\" id=\"0x010103b7\" />\n  <public type=\"attr\" name=\"layout_toEndOf\" id=\"0x010103b8\" />\n  <public type=\"attr\" name=\"layout_alignStart\" id=\"0x010103b9\" />\n  <public type=\"attr\" name=\"layout_alignEnd\" id=\"0x010103ba\" />\n  <public type=\"attr\" name=\"layout_alignParentStart\" id=\"0x010103bb\" />\n  <public type=\"attr\" name=\"layout_alignParentEnd\" id=\"0x010103bc\" />\n  <public type=\"attr\" name=\"listPreferredItemPaddingStart\" id=\"0x010103bd\" />\n  <public type=\"attr\" name=\"listPreferredItemPaddingEnd\" id=\"0x010103be\" />\n  <public type=\"attr\" name=\"singleUser\" id=\"0x010103bf\" />\n  <public type=\"attr\" name=\"presentationTheme\" id=\"0x010103c0\" />\n  <public type=\"attr\" name=\"subtypeId\" id=\"0x010103c1\" />\n  <public type=\"attr\" name=\"initialKeyguardLayout\" id=\"0x010103c2\" />\n  <public type=\"attr\" name=\"widgetCategory\" id=\"0x010103c4\" />\n  <public type=\"attr\" name=\"permissionGroupFlags\" id=\"0x010103c5\" />\n  <public type=\"attr\" name=\"labelFor\" id=\"0x010103c6\" />\n  <public type=\"attr\" name=\"permissionFlags\" id=\"0x010103c7\" />\n  <public type=\"attr\" name=\"checkedTextViewStyle\" id=\"0x010103c8\" />\n  <public type=\"attr\" name=\"showOnLockScreen\" id=\"0x010103c9\" />\n  <public type=\"attr\" name=\"format12Hour\" id=\"0x010103ca\" />\n  <public type=\"attr\" name=\"format24Hour\" id=\"0x010103cb\" />\n  <public type=\"attr\" name=\"timeZone\" id=\"0x010103cc\" />\n\n  <public type=\"style\" name=\"Widget.Holo.CheckedTextView\" id=\"0x010301d9\" />\n  <public type=\"style\" name=\"Widget.Holo.Light.CheckedTextView\" id=\"0x010301da\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.CheckedTextView\" id=\"0x010301db\" />\n  <public type=\"style\" name=\"Widget.DeviceDefault.Light.CheckedTextView\" id=\"0x010301dc\" />\n\n<!-- ===============================================================\n     Resources added in version 18 of the platform (Jelly Bean MR2)\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"mipMap\" id=\"0x010103cd\" />\n  <public type=\"attr\" name=\"mirrorForRtl\" id=\"0x010103ce\" />\n  <public type=\"attr\" name=\"windowOverscan\" id=\"0x010103cf\" />\n  <public type=\"attr\" name=\"requiredForAllUsers\" id=\"0x010103d0\" />\n  <public type=\"attr\" name=\"indicatorStart\" id=\"0x010103d1\" />\n  <public type=\"attr\" name=\"indicatorEnd\" id=\"0x010103d2\" />\n  <public type=\"attr\" name=\"childIndicatorStart\" id=\"0x010103d3\" />\n  <public type=\"attr\" name=\"childIndicatorEnd\" id=\"0x010103d4\" />\n  <public type=\"attr\" name=\"restrictedAccountType\" id=\"0x010103d5\" />\n  <public type=\"attr\" name=\"requiredAccountType\" id=\"0x010103d6\" />\n  <public type=\"attr\" name=\"canRequestTouchExplorationMode\" id=\"0x010103d7\" />\n  <public type=\"attr\" name=\"canRequestEnhancedWebAccessibility\" id=\"0x010103d8\" />\n  <public type=\"attr\" name=\"canRequestFilterKeyEvents\" id=\"0x010103d9\" />\n  <public type=\"attr\" name=\"layoutMode\" id=\"0x010103da\" />\n\n  <public type=\"style\" name=\"Theme.Holo.NoActionBar.Overscan\" id=\"0x010301dd\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.NoActionBar.Overscan\" id=\"0x010301de\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.NoActionBar.Overscan\" id=\"0x010301df\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.NoActionBar.Overscan\" id=\"0x010301e0\" />\n\n<!-- ===============================================================\n    Resources added in version 19 of the platform (KitKat)\n    =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"keySet\" id=\"0x010103db\" />\n  <public type=\"attr\" name=\"targetId\" id=\"0x010103dc\" />\n  <public type=\"attr\" name=\"fromScene\" id=\"0x010103dd\" />\n  <public type=\"attr\" name=\"toScene\" id=\"0x010103de\" />\n  <public type=\"attr\" name=\"transition\" id=\"0x010103df\" />\n  <public type=\"attr\" name=\"transitionOrdering\" id=\"0x010103e0\" />\n  <public type=\"attr\" name=\"fadingMode\" id=\"0x010103e1\" />\n  <public type=\"attr\" name=\"startDelay\" id=\"0x010103e2\" />\n  <public type=\"attr\" name=\"ssp\" id=\"0x010103e3\" />\n  <public type=\"attr\" name=\"sspPrefix\" id=\"0x010103e4\" />\n  <public type=\"attr\" name=\"sspPattern\" id=\"0x010103e5\" />\n  <public type=\"attr\" name=\"addPrintersActivity\" id=\"0x010103e6\" />\n  <public type=\"attr\" name=\"vendor\" id=\"0x010103e7\" />\n  <public type=\"attr\" name=\"category\" id=\"0x010103e8\" />\n  <public type=\"attr\" name=\"isAsciiCapable\" id=\"0x010103e9\" />\n  <public type=\"attr\" name=\"autoMirrored\" id=\"0x010103ea\" />\n  <public type=\"attr\" name=\"supportsSwitchingToNextInputMethod\" id=\"0x010103eb\" />\n  <public type=\"attr\" name=\"requireDeviceUnlock\" id=\"0x010103ec\" />\n  <public type=\"attr\" name=\"apduServiceBanner\" id=\"0x010103ed\" />\n  <public type=\"attr\" name=\"accessibilityLiveRegion\" id=\"0x010103ee\" />\n  <public type=\"attr\" name=\"windowTranslucentStatus\" id=\"0x010103ef\" />\n  <public type=\"attr\" name=\"windowTranslucentNavigation\" id=\"0x010103f0\" />\n  <public type=\"attr\" name=\"advancedPrintOptionsActivity\" id=\"0x10103f1\"/>\n\n  <public type=\"style\" name=\"Theme.Holo.NoActionBar.TranslucentDecor\" id=\"0x010301e1\" />\n  <public type=\"style\" name=\"Theme.Holo.Light.NoActionBar.TranslucentDecor\" id=\"0x010301e2\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.NoActionBar.TranslucentDecor\" id=\"0x010301e3\" />\n  <public type=\"style\" name=\"Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor\" id=\"0x010301e4\" />\n\n<!-- ===============================================================\n     Resources added in version 20 of the platform\n     =============================================================== -->\n  <eat-comment />\n\n  <public type=\"attr\" name=\"banner\" id=\"0x10103f2\" />\n  <public type=\"attr\" name=\"windowSwipeToDismiss\" id=\"0x10103f3\" />\n  <public type=\"attr\" name=\"isGame\" id=\"0x10103f4\" />\n  <public type=\"attr\" name=\"allowEmbedded\" id=\"0x10103f5\" />\n  <public type=\"attr\" name=\"setupActivity\" id=\"0x10103f6\"/>\n\n<!-- ===============================================================\n     Resources added in version 21 of the platform\n     =============================================================== -->\n    <eat-comment />\n\n    <public type=\"attr\" name=\"fastScrollStyle\" id=\"0x010103f7\" />\n    <public type=\"attr\" name=\"windowContentTransitions\" id=\"0x010103f8\" />\n    <public type=\"attr\" name=\"windowContentTransitionManager\" id=\"0x010103f9\" />\n    <public type=\"attr\" name=\"translationZ\" id=\"0x010103fa\" />\n    <public type=\"attr\" name=\"tintMode\" id=\"0x010103fb\" />\n    <public type=\"attr\" name=\"controlX1\" id=\"0x010103fc\" />\n    <public type=\"attr\" name=\"controlY1\" id=\"0x010103fd\" />\n    <public type=\"attr\" name=\"controlX2\" id=\"0x010103fe\" />\n    <public type=\"attr\" name=\"controlY2\" id=\"0x010103ff\" />\n    <public type=\"attr\" name=\"transitionName\" id=\"0x01010400\" />\n    <public type=\"attr\" name=\"transitionGroup\" id=\"0x01010401\" />\n    <public type=\"attr\" name=\"viewportWidth\" id=\"0x01010402\" />\n    <public type=\"attr\" name=\"viewportHeight\" id=\"0x01010403\" />\n    <public type=\"attr\" name=\"fillColor\" id=\"0x01010404\" />\n    <public type=\"attr\" name=\"pathData\" id=\"0x01010405\" />\n    <public type=\"attr\" name=\"strokeColor\" id=\"0x01010406\" />\n    <public type=\"attr\" name=\"strokeWidth\" id=\"0x01010407\" />\n    <public type=\"attr\" name=\"trimPathStart\" id=\"0x01010408\" />\n    <public type=\"attr\" name=\"trimPathEnd\" id=\"0x01010409\" />\n    <public type=\"attr\" name=\"trimPathOffset\" id=\"0x0101040a\" />\n    <public type=\"attr\" name=\"strokeLineCap\" id=\"0x0101040b\" />\n    <public type=\"attr\" name=\"strokeLineJoin\" id=\"0x0101040c\" />\n    <public type=\"attr\" name=\"strokeMiterLimit\" id=\"0x0101040d\" />\n    <public type=\"attr\" name=\"colorControlNormal\" id=\"0x01010429\" />\n    <public type=\"attr\" name=\"colorControlActivated\" id=\"0x0101042a\" />\n    <public type=\"attr\" name=\"colorButtonNormal\" id=\"0x0101042b\" />\n    <public type=\"attr\" name=\"colorControlHighlight\" id=\"0x0101042c\" />\n    <public type=\"attr\" name=\"persistableMode\" id=\"0x0101042d\" />\n    <public type=\"attr\" name=\"titleTextAppearance\" id=\"0x0101042e\" />\n    <public type=\"attr\" name=\"subtitleTextAppearance\" id=\"0x0101042f\" />\n    <public type=\"attr\" name=\"slideEdge\" id=\"0x01010430\" />\n    <public type=\"attr\" name=\"actionBarTheme\" id=\"0x01010431\" />\n    <public type=\"attr\" name=\"textAppearanceListItemSecondary\" id=\"0x01010432\" />\n    <public type=\"attr\" name=\"colorPrimary\" id=\"0x01010433\" />\n    <public type=\"attr\" name=\"colorPrimaryDark\" id=\"0x01010434\" />\n    <public type=\"attr\" name=\"colorAccent\" id=\"0x01010435\" />\n    <public type=\"attr\" name=\"nestedScrollingEnabled\" id=\"0x01010436\" />\n    <public type=\"attr\" name=\"windowEnterTransition\" id=\"0x01010437\" />\n    <public type=\"attr\" name=\"windowExitTransition\" id=\"0x01010438\" />\n    <public type=\"attr\" name=\"windowSharedElementEnterTransition\" id=\"0x01010439\" />\n    <public type=\"attr\" name=\"windowSharedElementExitTransition\" id=\"0x0101043a\" />\n    <public type=\"attr\" name=\"windowAllowReturnTransitionOverlap\" id=\"0x0101043b\" />\n    <public type=\"attr\" name=\"windowAllowEnterTransitionOverlap\" id=\"0x0101043c\" />\n    <public type=\"attr\" name=\"sessionService\" id=\"0x0101043d\" />\n    <public type=\"attr\" name=\"stackViewStyle\" id=\"0x0101043e\" />\n    <public type=\"attr\" name=\"switchStyle\" id=\"0x0101043f\" />\n    <public type=\"attr\" name=\"elevation\" id=\"0x01010440\" />\n    <public type=\"attr\" name=\"excludeId\" id=\"0x01010441\" />\n    <public type=\"attr\" name=\"excludeClass\" id=\"0x01010442\" />\n    <public type=\"attr\" name=\"hideOnContentScroll\" id=\"0x01010443\" />\n    <public type=\"attr\" name=\"actionOverflowMenuStyle\" id=\"0x01010444\" />\n    <public type=\"attr\" name=\"documentLaunchMode\" id=\"0x01010445\" />\n    <public type=\"attr\" name=\"maxRecents\" id=\"0x01010446\" />\n    <public type=\"attr\" name=\"autoRemoveFromRecents\" id=\"0x01010447\" />\n    <public type=\"attr\" name=\"stateListAnimator\" id=\"0x01010448\" />\n    <public type=\"attr\" name=\"toId\" id=\"0x01010449\" />\n    <public type=\"attr\" name=\"fromId\" id=\"0x0101044a\" />\n    <public type=\"attr\" name=\"reversible\" id=\"0x0101044b\" />\n    <public type=\"attr\" name=\"splitTrack\" id=\"0x0101044c\" />\n    <public type=\"attr\" name=\"targetName\" id=\"0x0101044d\" />\n    <public type=\"attr\" name=\"excludeName\" id=\"0x0101044e\" />\n    <public type=\"attr\" name=\"matchOrder\" id=\"0x0101044f\" />\n    <public type=\"attr\" name=\"windowDrawsSystemBarBackgrounds\" id=\"0x01010450\" />\n    <public type=\"attr\" name=\"statusBarColor\" id=\"0x01010451\" />\n    <public type=\"attr\" name=\"navigationBarColor\" id=\"0x01010452\" />\n    <public type=\"attr\" name=\"contentInsetStart\" id=\"0x01010453\" />\n    <public type=\"attr\" name=\"contentInsetEnd\" id=\"0x01010454\" />\n    <public type=\"attr\" name=\"contentInsetLeft\" id=\"0x01010455\" />\n    <public type=\"attr\" name=\"contentInsetRight\" id=\"0x01010456\" />\n    <public type=\"attr\" name=\"paddingMode\" id=\"0x01010457\" />\n    <public type=\"attr\" name=\"layout_rowWeight\" id=\"0x01010458\" />\n    <public type=\"attr\" name=\"layout_columnWeight\" id=\"0x01010459\" />\n    <public type=\"attr\" name=\"translateX\" id=\"0x0101045a\" />\n    <public type=\"attr\" name=\"translateY\" id=\"0x0101045b\" />\n    <public type=\"attr\" name=\"selectableItemBackgroundBorderless\" id=\"0x0101045c\" />\n    <public type=\"attr\" name=\"elegantTextHeight\" id=\"0x0101045d\" />\n    <public type=\"attr\" name=\"searchKeyphraseId\" id=\"0x0101045e\" />\n    <public type=\"attr\" name=\"searchKeyphrase\" id=\"0x0101045f\" />\n    <public type=\"attr\" name=\"searchKeyphraseSupportedLocales\" id=\"0x01010460\" />\n    <public type=\"attr\" name=\"windowTransitionBackgroundFadeDuration\" id=\"0x01010461\" />\n    <public type=\"attr\" name=\"overlapAnchor\" id=\"0x01010462\" />\n    <public type=\"attr\" name=\"progressTint\" id=\"0x01010463\" />\n    <public type=\"attr\" name=\"progressTintMode\" id=\"0x01010464\" />\n    <public type=\"attr\" name=\"progressBackgroundTint\" id=\"0x01010465\" />\n    <public type=\"attr\" name=\"progressBackgroundTintMode\" id=\"0x01010466\" />\n    <public type=\"attr\" name=\"secondaryProgressTint\" id=\"0x01010467\" />\n    <public type=\"attr\" name=\"secondaryProgressTintMode\" id=\"0x01010468\" />\n    <public type=\"attr\" name=\"indeterminateTint\" id=\"0x01010469\" />\n    <public type=\"attr\" name=\"indeterminateTintMode\" id=\"0x0101046a\" />\n    <public type=\"attr\" name=\"backgroundTint\" id=\"0x0101046b\" />\n    <public type=\"attr\" name=\"backgroundTintMode\" id=\"0x0101046c\" />\n    <public type=\"attr\" name=\"foregroundTint\" id=\"0x0101046d\" />\n    <public type=\"attr\" name=\"foregroundTintMode\" id=\"0x0101046e\" />\n    <public type=\"attr\" name=\"buttonTint\" id=\"0x0101046f\" />\n    <public type=\"attr\" name=\"buttonTintMode\" id=\"0x01010470\" />\n    <public type=\"attr\" name=\"thumbTint\" id=\"0x01010471\" />\n    <public type=\"attr\" name=\"thumbTintMode\" id=\"0x01010472\" />\n    <public type=\"attr\" name=\"fullBackupOnly\" id=\"0x01010473\" />\n    <public type=\"attr\" name=\"propertyXName\" id=\"0x01010474\" />\n    <public type=\"attr\" name=\"propertyYName\" id=\"0x01010475\" />\n    <public type=\"attr\" name=\"relinquishTaskIdentity\" id=\"0x01010476\" />\n    <public type=\"attr\" name=\"tileModeX\" id=\"0x01010477\" />\n    <public type=\"attr\" name=\"tileModeY\" id=\"0x01010478\" />\n    <public type=\"attr\" name=\"actionModeShareDrawable\" id=\"0x01010479\" />\n    <public type=\"attr\" name=\"actionModeFindDrawable\" id=\"0x0101047a\" />\n    <public type=\"attr\" name=\"actionModeWebSearchDrawable\" id=\"0x0101047b\" />\n    <public type=\"attr\" name=\"transitionVisibilityMode\" id=\"0x0101047c\" />\n    <public type=\"attr\" name=\"minimumHorizontalAngle\" id=\"0x0101047d\" />\n    <public type=\"attr\" name=\"minimumVerticalAngle\" id=\"0x0101047e\" />\n    <public type=\"attr\" name=\"maximumAngle\" id=\"0x0101047f\" />\n    <public type=\"attr\" name=\"searchViewStyle\" id=\"0x01010480\" />\n    <public type=\"attr\" name=\"closeIcon\" id=\"0x01010481\" />\n    <public type=\"attr\" name=\"goIcon\" id=\"0x01010482\" />\n    <public type=\"attr\" name=\"searchIcon\" id=\"0x01010483\" />\n    <public type=\"attr\" name=\"voiceIcon\" id=\"0x01010484\" />\n    <public type=\"attr\" name=\"commitIcon\" id=\"0x01010485\" />\n    <public type=\"attr\" name=\"suggestionRowLayout\" id=\"0x01010486\" />\n    <public type=\"attr\" name=\"queryBackground\" id=\"0x01010487\" />\n    <public type=\"attr\" name=\"submitBackground\" id=\"0x01010488\" />\n    <public type=\"attr\" name=\"buttonBarPositiveButtonStyle\" id=\"0x01010489\" />\n    <public type=\"attr\" name=\"buttonBarNeutralButtonStyle\" id=\"0x0101048a\" />\n    <public type=\"attr\" name=\"buttonBarNegativeButtonStyle\" id=\"0x0101048b\" />\n    <public type=\"attr\" name=\"popupElevation\" id=\"0x0101048c\" />\n    <public type=\"attr\" name=\"actionBarPopupTheme\" id=\"0x0101048d\" />\n    <public type=\"attr\" name=\"multiArch\" id=\"0x0101048e\" />\n    <public type=\"attr\" name=\"touchscreenBlocksFocus\" id=\"0x0101048f\" />\n    <public type=\"attr\" name=\"windowElevation\" id=\"0x01010490\" />\n    <public type=\"attr\" name=\"launchTaskBehindTargetAnimation\" id=\"0x01010491\" />\n    <public type=\"attr\" name=\"launchTaskBehindSourceAnimation\" id=\"0x01010492\" />\n    <public type=\"attr\" name=\"restrictionType\" id=\"0x01010493\" />\n    <public type=\"attr\" name=\"dayOfWeekBackground\" id=\"0x01010494\" />\n    <public type=\"attr\" name=\"dayOfWeekTextAppearance\" id=\"0x01010495\" />\n    <public type=\"attr\" name=\"headerMonthTextAppearance\" id=\"0x01010496\" />\n    <public type=\"attr\" name=\"headerDayOfMonthTextAppearance\" id=\"0x01010497\" />\n    <public type=\"attr\" name=\"headerYearTextAppearance\" id=\"0x01010498\" />\n    <public type=\"attr\" name=\"yearListItemTextAppearance\" id=\"0x01010499\" />\n    <public type=\"attr\" name=\"yearListSelectorColor\" id=\"0x0101049a\" />\n    <public type=\"attr\" name=\"calendarTextColor\" id=\"0x0101049b\" />\n    <public type=\"attr\" name=\"recognitionService\" id=\"0x0101049c\" />\n    <public type=\"attr\" name=\"timePickerStyle\" id=\"0x0101049d\" />\n    <public type=\"attr\" name=\"timePickerDialogTheme\" id=\"0x0101049e\" />\n    <public type=\"attr\" name=\"headerTimeTextAppearance\" id=\"0x0101049f\" />\n    <public type=\"attr\" name=\"headerAmPmTextAppearance\" id=\"0x010104a0\" />\n    <public type=\"attr\" name=\"numbersTextColor\" id=\"0x010104a1\" />\n    <public type=\"attr\" name=\"numbersBackgroundColor\" id=\"0x010104a2\" />\n    <public type=\"attr\" name=\"numbersSelectorColor\" id=\"0x010104a3\" />\n    <public type=\"attr\" name=\"amPmTextColor\" id=\"0x010104a4\" />\n    <public type=\"attr\" name=\"amPmBackgroundColor\" id=\"0x010104a5\" />\n    <public type=\"attr\" name=\"searchKeyphraseRecognitionFlags\" id=\"0x010104a6\" />\n    <public type=\"attr\" name=\"checkMarkTint\" id=\"0x010104a7\" />\n    <public type=\"attr\" name=\"checkMarkTintMode\" id=\"0x010104a8\" />\n    <public type=\"attr\" name=\"popupTheme\" id=\"0x010104a9\" />\n    <public type=\"attr\" name=\"toolbarStyle\" id=\"0x010104aa\" />\n    <public type=\"attr\" name=\"windowClipToOutline\" id=\"0x010104ab\" />\n    <public type=\"attr\" name=\"datePickerDialogTheme\" id=\"0x010104ac\" />\n    <public type=\"attr\" name=\"showText\" id=\"0x010104ad\" />\n    <public type=\"attr\" name=\"windowReturnTransition\" id=\"0x010104ae\" />\n    <public type=\"attr\" name=\"windowReenterTransition\" id=\"0x010104af\" />\n    <public type=\"attr\" name=\"windowSharedElementReturnTransition\" id=\"0x010104b0\" />\n    <public type=\"attr\" name=\"windowSharedElementReenterTransition\" id=\"0x010104b1\" />\n    <public type=\"attr\" name=\"resumeWhilePausing\" id=\"0x010104b2\" />\n    <public type=\"attr\" name=\"datePickerMode\" id=\"0x010104b3\" />\n    <public type=\"attr\" name=\"timePickerMode\" id=\"0x010104b4\" />\n    <public type=\"attr\" name=\"inset\" id=\"0x010104b5\" />\n    <public type=\"attr\" name=\"letterSpacing\" id=\"0x010104b6\" />\n    <public type=\"attr\" name=\"fontFeatureSettings\" id=\"0x010104b7\" />\n    <public type=\"attr\" name=\"outlineProvider\" id=\"0x010104b8\" />\n    <public type=\"attr\" name=\"contentAgeHint\" id=\"0x010104b9\" />\n    <public type=\"attr\" name=\"country\" id=\"0x010104ba\" />\n    <public type=\"attr\" name=\"windowSharedElementsUseOverlay\" id=\"0x010104bb\" />\n    <public type=\"attr\" name=\"reparent\" id=\"0x010104bc\" />\n    <public type=\"attr\" name=\"reparentWithOverlay\" id=\"0x010104bd\" />\n    <public type=\"attr\" name=\"ambientShadowAlpha\" id=\"0x010104be\" />\n    <public type=\"attr\" name=\"spotShadowAlpha\" id=\"0x010104bf\" />\n    <public type=\"attr\" name=\"navigationIcon\" id=\"0x010104c0\" />\n    <public type=\"attr\" name=\"navigationContentDescription\" id=\"0x010104c1\" />\n    <public type=\"attr\" name=\"fragmentExitTransition\" id=\"0x010104c2\" />\n    <public type=\"attr\" name=\"fragmentEnterTransition\" id=\"0x010104c3\" />\n    <public type=\"attr\" name=\"fragmentSharedElementEnterTransition\" id=\"0x010104c4\" />\n    <public type=\"attr\" name=\"fragmentReturnTransition\" id=\"0x010104c5\" />\n    <public type=\"attr\" name=\"fragmentSharedElementReturnTransition\" id=\"0x010104c6\" />\n    <public type=\"attr\" name=\"fragmentReenterTransition\" id=\"0x010104c7\" />\n    <public type=\"attr\" name=\"fragmentAllowEnterTransitionOverlap\" id=\"0x010104c8\" />\n    <public type=\"attr\" name=\"fragmentAllowReturnTransitionOverlap\" id=\"0x010104c9\" />\n    <public type=\"attr\" name=\"patternPathData\" id=\"0x010104ca\" />\n    <public type=\"attr\" name=\"strokeAlpha\" id=\"0x010104cb\" />\n    <public type=\"attr\" name=\"fillAlpha\" id=\"0x010104cc\" />\n    <public type=\"attr\" name=\"windowActivityTransitions\" id=\"0x010104cd\" />\n    <public type=\"attr\" name=\"colorEdgeEffect\" id=\"0x010104ce\" />\n\n    <public type=\"id\" name=\"mask\" id=\"0x0102002e\" />\n    <public type=\"id\" name=\"statusBarBackground\" id=\"0x0102002f\" />\n    <public type=\"id\" name=\"navigationBarBackground\" id=\"0x01020030\" />\n\n    <public type=\"style\" name=\"Widget.FastScroll\" id=\"0x010301e5\" />\n    <public type=\"style\" name=\"Widget.StackView\" id=\"0x010301e6\" />\n    <public type=\"style\" name=\"Widget.Toolbar\" id=\"0x010301e7\" />\n    <public type=\"style\" name=\"Widget.Toolbar.Button.Navigation\" id=\"0x010301e8\" />\n\n    <public type=\"style\" name=\"Widget.DeviceDefault.FastScroll\" id=\"0x010301e9\" />\n    <public type=\"style\" name=\"Widget.DeviceDefault.StackView\" id=\"0x010301ea\" />\n    <public type=\"style\" name=\"Widget.DeviceDefault.Light.FastScroll\" id=\"0x010301eb\" />\n    <public type=\"style\" name=\"Widget.DeviceDefault.Light.StackView\" id=\"0x010301ec\" />\n\n    <public type=\"style\" name=\"TextAppearance.Material\" id=\"0x010301ed\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Button\" id=\"0x010301ee\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Body2\" id=\"0x010301ef\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Body1\" id=\"0x010301f0\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Caption\" id=\"0x010301f1\" />\n    <public type=\"style\" name=\"TextAppearance.Material.DialogWindowTitle\" id=\"0x010301f2\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Display4\" id=\"0x010301f3\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Display3\" id=\"0x010301f4\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Display2\" id=\"0x010301f5\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Display1\" id=\"0x010301f6\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Headline\" id=\"0x010301f7\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Inverse\" id=\"0x010301f8\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Large\" id=\"0x010301f9\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Large.Inverse\" id=\"0x010301fa\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Medium\" id=\"0x010301fb\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Medium.Inverse\" id=\"0x010301fc\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Menu\" id=\"0x010301fd\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Notification\" id=\"0x010301fe\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Notification.Emphasis\" id=\"0x010301ff\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Notification.Info\" id=\"0x01030200\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Notification.Line2\" id=\"0x01030201\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Notification.Time\" id=\"0x01030202\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Notification.Title\" id=\"0x01030203\" />\n    <public type=\"style\" name=\"TextAppearance.Material.SearchResult.Subtitle\" id=\"0x01030204\" />\n    <public type=\"style\" name=\"TextAppearance.Material.SearchResult.Title\" id=\"0x01030205\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Small\" id=\"0x01030206\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Small.Inverse\" id=\"0x01030207\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Subhead\" id=\"0x01030208\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Title\" id=\"0x01030209\" />\n    <public type=\"style\" name=\"TextAppearance.Material.WindowTitle\" id=\"0x0103020a\" />\n\n    <public type=\"style\" name=\"TextAppearance.Material.Widget\" id=\"0x0103020b\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionBar.Menu\" id=\"0x0103020c\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionBar.Subtitle\" id=\"0x0103020d\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionBar.Subtitle.Inverse\" id=\"0x0103020e\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionBar.Title\" id=\"0x0103020f\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionBar.Title.Inverse\" id=\"0x01030210\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionMode.Subtitle\" id=\"0x01030211\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionMode.Subtitle.Inverse\" id=\"0x01030212\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionMode.Title\" id=\"0x01030213\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.ActionMode.Title.Inverse\" id=\"0x01030214\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.Button\" id=\"0x01030215\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.DropDownHint\" id=\"0x01030216\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.DropDownItem\" id=\"0x01030217\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.EditText\" id=\"0x01030218\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.IconMenu.Item\" id=\"0x01030219\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.PopupMenu\" id=\"0x0103021a\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.PopupMenu.Large\" id=\"0x0103021b\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.PopupMenu.Small\" id=\"0x0103021c\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.TabWidget\" id=\"0x0103021d\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.TextView\" id=\"0x0103021e\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.TextView.PopupMenu\" id=\"0x0103021f\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.TextView.SpinnerItem\" id=\"0x01030220\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.Toolbar.Subtitle\" id=\"0x01030221\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.Toolbar.Title\" id=\"0x01030222\" />\n\n    <public type=\"style\" name=\"Theme.DeviceDefault.Settings\" id=\"0x01030223\" />\n\n    <public type=\"style\" name=\"Theme.Material\" id=\"0x01030224\" />\n    <public type=\"style\" name=\"Theme.Material.Dialog\" id=\"0x01030225\" />\n    <public type=\"style\" name=\"Theme.Material.Dialogger.Alert\" id=\"0x01030226\" />\n    <public type=\"style\" name=\"Theme.Material.Dialogger.MinWidth\" id=\"0x01030227\" />\n    <public type=\"style\" name=\"Theme.Material.Dialogger.NoActionBar\" id=\"0x01030228\" />\n    <public type=\"style\" name=\"Theme.Material.Dialogger.NoActionBar.MinWidth\" id=\"0x01030229\" />\n    <public type=\"style\" name=\"Theme.Material.Dialogger.Presentation\" id=\"0x0103022a\" />\n    <public type=\"style\" name=\"Theme.Material.DialogWhenLarge\" id=\"0x0103022b\" />\n    <public type=\"style\" name=\"Theme.Material.DialogWhenLarge.NoActionBar\" id=\"0x0103022c\" />\n    <public type=\"style\" name=\"Theme.Material.InputMethod\" id=\"0x0103022d\" />\n    <public type=\"style\" name=\"Theme.Material.NoActionBar\" id=\"0x0103022e\" />\n    <public type=\"style\" name=\"Theme.Material.NoActionBar.Fullscreen\" id=\"0x0103022f\" />\n    <public type=\"style\" name=\"Theme.Material.NoActionBar.Overscan\" id=\"0x01030230\" />\n    <public type=\"style\" name=\"Theme.Material.NoActionBar.TranslucentDecor\" id=\"0x01030231\" />\n    <public type=\"style\" name=\"Theme.Material.Panel\" id=\"0x01030232\" />\n    <public type=\"style\" name=\"Theme.Material.Settings\" id=\"0x01030233\" />\n    <public type=\"style\" name=\"Theme.Material.Voice\" id=\"0x01030234\" />\n    <public type=\"style\" name=\"Theme.Material.Wallpaper\" id=\"0x01030235\" />\n    <public type=\"style\" name=\"Theme.Material.Wallpaper.NoTitleBar\" id=\"0x01030236\" />\n\n    <public type=\"style\" name=\"Theme.Material.Light\" id=\"0x01030237\" />\n    <public type=\"style\" name=\"Theme.Material.Light.DarkActionBar\" id=\"0x01030238\" />\n    <public type=\"style\" name=\"Theme.Material.Light.Dialog\" id=\"0x01030239\" />\n    <public type=\"style\" name=\"Theme.Material.Light.Dialogger.Alert\" id=\"0x0103023a\" />\n    <public type=\"style\" name=\"Theme.Material.Light.Dialogger.MinWidth\" id=\"0x0103023b\" />\n    <public type=\"style\" name=\"Theme.Material.Light.Dialogger.NoActionBar\" id=\"0x0103023c\" />\n    <public type=\"style\" name=\"Theme.Material.Light.Dialogger.NoActionBar.MinWidth\" id=\"0x0103023d\" />\n    <public type=\"style\" name=\"Theme.Material.Light.Dialogger.Presentation\" id=\"0x0103023e\" />\n    <public type=\"style\" name=\"Theme.Material.Light.DialogWhenLarge\" id=\"0x0103023f\" />\n    <public type=\"style\" name=\"Theme.Material.Light.DialogWhenLarge.NoActionBar\" id=\"0x01030240\" />\n    <public type=\"style\" name=\"Theme.Material.Light.NoActionBar\" id=\"0x01030241\" />\n    <public type=\"style\" name=\"Theme.Material.Light.NoActionBar.Fullscreen\" id=\"0x01030242\" />\n    <public type=\"style\" name=\"Theme.Material.Light.NoActionBar.Overscan\" id=\"0x01030243\" />\n    <public type=\"style\" name=\"Theme.Material.Light.NoActionBar.TranslucentDecor\" id=\"0x01030244\" />\n    <public type=\"style\" name=\"Theme.Material.Light.Panel\" id=\"0x01030245\" />\n    <public type=\"style\" name=\"Theme.Material.Light.Voice\" id=\"0x01030246\" />\n\n    <public type=\"style\" name=\"ThemeOverlay\" id=\"0x01030247\" />\n    <public type=\"style\" name=\"ThemeOverlay.Material\" id=\"0x01030248\" />\n    <public type=\"style\" name=\"ThemeOverlay.Material.ActionBar\" id=\"0x01030249\" />\n    <public type=\"style\" name=\"ThemeOverlay.Material.Light\" id=\"0x0103024a\" />\n    <public type=\"style\" name=\"ThemeOverlay.Material.Dark\" id=\"0x0103024b\" />\n    <public type=\"style\" name=\"ThemeOverlay.Material.Dark.ActionBar\" id=\"0x0103024c\" />\n\n    <public type=\"style\" name=\"Widget.Material\" id=\"0x0103024d\" />\n    <public type=\"style\" name=\"Widget.Material.ActionBar\" id=\"0x0103024e\" />\n    <public type=\"style\" name=\"Widget.Material.ActionBar.Solid\" id=\"0x0103024f\" />\n    <public type=\"style\" name=\"Widget.Material.ActionBar.TabBar\" id=\"0x01030250\" />\n    <public type=\"style\" name=\"Widget.Material.ActionBar.TabText\" id=\"0x01030251\" />\n    <public type=\"style\" name=\"Widget.Material.ActionBar.TabView\" id=\"0x01030252\" />\n    <public type=\"style\" name=\"Widget.Material.ActionButton\" id=\"0x01030253\" />\n    <public type=\"style\" name=\"Widget.Material.ActionButton.CloseMode\" id=\"0x01030254\" />\n    <public type=\"style\" name=\"Widget.Material.ActionButton.Overflow\" id=\"0x01030255\" />\n    <public type=\"style\" name=\"Widget.Material.ActionMode\" id=\"0x01030256\" />\n    <public type=\"style\" name=\"Widget.Material.AutoCompleteTextView\" id=\"0x01030257\" />\n    <public type=\"style\" name=\"Widget.Material.Button\" id=\"0x01030258\" />\n    <public type=\"style\" name=\"Widget.Material.Button.Borderless\" id=\"0x01030259\" />\n    <public type=\"style\" name=\"Widget.Material.Button.Borderless.Colored\" id=\"0x0103025a\" />\n    <public type=\"style\" name=\"Widget.Material.Button.Borderless.Small\" id=\"0x0103025b\" />\n    <public type=\"style\" name=\"Widget.Material.Button.Inset\" id=\"0x0103025c\" />\n    <public type=\"style\" name=\"Widget.Material.Button.Small\" id=\"0x0103025d\" />\n    <public type=\"style\" name=\"Widget.Material.Button.Toggle\" id=\"0x0103025e\" />\n    <public type=\"style\" name=\"Widget.Material.ButtonBar\" id=\"0x0103025f\" />\n    <public type=\"style\" name=\"Widget.Material.ButtonBar.AlertDialog\" id=\"0x01030260\" />\n    <public type=\"style\" name=\"Widget.Material.CalendarView\" id=\"0x01030261\" />\n    <public type=\"style\" name=\"Widget.Material.CheckedTextView\" id=\"0x01030262\" />\n    <public type=\"style\" name=\"Widget.Material.CompoundButton.CheckBox\" id=\"0x01030263\" />\n    <public type=\"style\" name=\"Widget.Material.CompoundButton.RadioButton\" id=\"0x01030264\" />\n    <public type=\"style\" name=\"Widget.Material.CompoundButton.Star\" id=\"0x01030265\" />\n    <public type=\"style\" name=\"Widget.Material.DatePicker\" id=\"0x01030266\" />\n    <public type=\"style\" name=\"Widget.Material.DropDownItem\" id=\"0x01030267\" />\n    <public type=\"style\" name=\"Widget.Material.DropDownItem.Spinner\" id=\"0x01030268\" />\n    <public type=\"style\" name=\"Widget.Material.EditText\" id=\"0x01030269\" />\n    <public type=\"style\" name=\"Widget.Material.ExpandableListView\" id=\"0x0103026a\" />\n    <public type=\"style\" name=\"Widget.Material.FastScroll\" id=\"0x0103026b\" />\n    <public type=\"style\" name=\"Widget.Material.GridView\" id=\"0x0103026c\" />\n    <public type=\"style\" name=\"Widget.Material.HorizontalScrollView\" id=\"0x0103026d\" />\n    <public type=\"style\" name=\"Widget.Material.ImageButton\" id=\"0x0103026e\" />\n    <public type=\"style\" name=\"Widget.Material.ListPopupWindow\" id=\"0x0103026f\" />\n    <public type=\"style\" name=\"Widget.Material.ListView\" id=\"0x01030270\" />\n    <public type=\"style\" name=\"Widget.Material.ListView.DropDown\" id=\"0x01030271\" />\n    <public type=\"style\" name=\"Widget.Material.MediaRouteButton\" id=\"0x01030272\" />\n    <public type=\"style\" name=\"Widget.Material.PopupMenu\" id=\"0x01030273\" />\n    <public type=\"style\" name=\"Widget.Material.PopupMenu.Overflow\" id=\"0x01030274\" />\n    <public type=\"style\" name=\"Widget.Material.PopupWindow\" id=\"0x01030275\" />\n    <public type=\"style\" name=\"Widget.Material.ProgressBar\" id=\"0x01030276\" />\n    <public type=\"style\" name=\"Widget.Material.ProgressBar.Horizontal\" id=\"0x01030277\" />\n    <public type=\"style\" name=\"Widget.Material.ProgressBar.Large\" id=\"0x01030278\" />\n    <public type=\"style\" name=\"Widget.Material.ProgressBar.Small\" id=\"0x01030279\" />\n    <public type=\"style\" name=\"Widget.Material.ProgressBar.Small.Title\" id=\"0x0103027a\" />\n    <public type=\"style\" name=\"Widget.Material.RatingBar\" id=\"0x0103027b\" />\n    <public type=\"style\" name=\"Widget.Material.RatingBar.Indicator\" id=\"0x0103027c\" />\n    <public type=\"style\" name=\"Widget.Material.RatingBar.Small\" id=\"0x0103027d\" />\n    <public type=\"style\" name=\"Widget.Material.ScrollView\" id=\"0x0103027e\" />\n    <public type=\"style\" name=\"Widget.Material.SearchView\" id=\"0x0103027f\" />\n    <public type=\"style\" name=\"Widget.Material.SeekBar\" id=\"0x01030280\" />\n    <public type=\"style\" name=\"Widget.Material.SegmentedButton\" id=\"0x01030281\" />\n    <public type=\"style\" name=\"Widget.Material.StackView\" id=\"0x01030282\" />\n    <public type=\"style\" name=\"Widget.Material.Spinner\" id=\"0x01030283\" />\n    <public type=\"style\" name=\"Widget.Material.Spinner.Underlined\" id=\"0x01030284\" />\n    <public type=\"style\" name=\"Widget.Material.Tab\" id=\"0x01030285\" />\n    <public type=\"style\" name=\"Widget.Material.TabWidget\" id=\"0x01030286\" />\n    <public type=\"style\" name=\"Widget.Material.TextView\" id=\"0x01030287\" />\n    <public type=\"style\" name=\"Widget.Material.TextView.SpinnerItem\" id=\"0x01030288\" />\n    <public type=\"style\" name=\"Widget.Material.TimePicker\" id=\"0x01030289\" />\n    <public type=\"style\" name=\"Widget.Material.Toolbar\" id=\"0x0103028a\" />\n    <public type=\"style\" name=\"Widget.Material.Toolbar.Button.Navigation\" id=\"0x0103028b\" />\n    <public type=\"style\" name=\"Widget.Material.WebTextView\" id=\"0x0103028c\" />\n    <public type=\"style\" name=\"Widget.Material.WebView\" id=\"0x0103028d\" />\n\n    <public type=\"style\" name=\"Widget.Material.Light\" id=\"0x0103028e\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionBar\" id=\"0x0103028f\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionBar.Solid\" id=\"0x01030290\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionBar.TabBar\" id=\"0x01030291\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionBar.TabText\" id=\"0x01030292\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionBar.TabView\" id=\"0x01030293\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionButton\" id=\"0x01030294\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionButton.CloseMode\" id=\"0x01030295\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionButton.Overflow\" id=\"0x01030296\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ActionMode\" id=\"0x01030297\" />\n    <public type=\"style\" name=\"Widget.Material.Light.AutoCompleteTextView\" id=\"0x01030298\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Button\" id=\"0x01030299\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Button.Borderless\" id=\"0x0103029a\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Button.Borderless.Colored\" id=\"0x0103029b\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Button.Borderless.Small\" id=\"0x0103029c\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Button.Inset\" id=\"0x0103029d\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Button.Small\" id=\"0x0103029e\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Button.Toggle\" id=\"0x0103029f\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ButtonBar\" id=\"0x010302a0\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ButtonBar.AlertDialog\" id=\"0x010302a1\" />\n    <public type=\"style\" name=\"Widget.Material.Light.CalendarView\" id=\"0x010302a2\" />\n    <public type=\"style\" name=\"Widget.Material.Light.CheckedTextView\" id=\"0x010302a3\" />\n    <public type=\"style\" name=\"Widget.Material.Light.CompoundButton.CheckBox\" id=\"0x010302a4\" />\n    <public type=\"style\" name=\"Widget.Material.Light.CompoundButton.RadioButton\" id=\"0x010302a5\" />\n    <public type=\"style\" name=\"Widget.Material.Light.CompoundButton.Star\" id=\"0x010302a6\" />\n    <public type=\"style\" name=\"Widget.Material.Light.DatePicker\" id=\"0x010302a7\" />\n    <public type=\"style\" name=\"Widget.Material.Light.DropDownItem\" id=\"0x010302a8\" />\n    <public type=\"style\" name=\"Widget.Material.Light.DropDownItem.Spinner\" id=\"0x010302a9\" />\n    <public type=\"style\" name=\"Widget.Material.Light.EditText\" id=\"0x010302aa\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ExpandableListView\" id=\"0x010302ab\" />\n    <public type=\"style\" name=\"Widget.Material.Light.FastScroll\" id=\"0x010302ac\" />\n    <public type=\"style\" name=\"Widget.Material.Light.GridView\" id=\"0x010302ad\" />\n    <public type=\"style\" name=\"Widget.Material.Light.HorizontalScrollView\" id=\"0x010302ae\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ImageButton\" id=\"0x010302af\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ListPopupWindow\" id=\"0x010302b0\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ListView\" id=\"0x010302b1\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ListView.DropDown\" id=\"0x010302b2\" />\n    <public type=\"style\" name=\"Widget.Material.Light.MediaRouteButton\" id=\"0x010302b3\" />\n    <public type=\"style\" name=\"Widget.Material.Light.PopupMenu\" id=\"0x010302b4\" />\n    <public type=\"style\" name=\"Widget.Material.Light.PopupMenu.Overflow\" id=\"0x010302b5\" />\n    <public type=\"style\" name=\"Widget.Material.Light.PopupWindow\" id=\"0x010302b6\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ProgressBar\" id=\"0x010302b7\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ProgressBar.Horizontal\" id=\"0x010302b8\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ProgressBar.Inverse\" id=\"0x010302b9\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ProgressBar.Large\" id=\"0x010302ba\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ProgressBar.Large.Inverse\" id=\"0x010302bb\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ProgressBar.Small\" id=\"0x010302bc\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ProgressBar.Small.Inverse\" id=\"0x010302bd\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ProgressBar.Small.Title\" id=\"0x010302be\" />\n    <public type=\"style\" name=\"Widget.Material.Light.RatingBar\" id=\"0x010302bf\" />\n    <public type=\"style\" name=\"Widget.Material.Light.RatingBar.Indicator\" id=\"0x010302c0\" />\n    <public type=\"style\" name=\"Widget.Material.Light.RatingBar.Small\" id=\"0x010302c1\" />\n    <public type=\"style\" name=\"Widget.Material.Light.ScrollView\" id=\"0x010302c2\" />\n    <public type=\"style\" name=\"Widget.Material.Light.SearchView\" id=\"0x010302c3\" />\n    <public type=\"style\" name=\"Widget.Material.Light.SeekBar\" id=\"0x010302c4\" />\n    <public type=\"style\" name=\"Widget.Material.Light.SegmentedButton\" id=\"0x010302c5\" />\n    <public type=\"style\" name=\"Widget.Material.Light.StackView\" id=\"0x010302c6\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Spinner\" id=\"0x010302c7\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Spinner.Underlined\" id=\"0x010302c8\" />\n    <public type=\"style\" name=\"Widget.Material.Light.Tab\" id=\"0x010302c9\" />\n    <public type=\"style\" name=\"Widget.Material.Light.TabWidget\" id=\"0x010302ca\" />\n    <public type=\"style\" name=\"Widget.Material.Light.TextView\" id=\"0x010302cb\" />\n    <public type=\"style\" name=\"Widget.Material.Light.TextView.SpinnerItem\" id=\"0x010302cc\" />\n    <public type=\"style\" name=\"Widget.Material.Light.TimePicker\" id=\"0x010302cd\" />\n    <public type=\"style\" name=\"Widget.Material.Light.WebTextView\" id=\"0x010302ce\" />\n    <public type=\"style\" name=\"Widget.Material.Light.WebView\" id=\"0x010302cf\" />\n\n    <!-- @hide This really shouldn't be public; clients using it should use @* to ref it.  -->\n    <public type=\"style\" name=\"Theme.Leanback.FormWizard\" id=\"0x010302d0\" />\n\n    <!-- @hide @SystemApi This shouldn't be public. -->\n    <public type=\"array\" name=\"config_keySystemUuidMapping\" id=\"0x01070005\" />\n\n    <!-- An interpolator which accelerates fast but decelerates slowly. -->\n    <public type=\"interpolator\" name=\"fast_out_slow_in\" id=\"0x010c000d\" />\n    <!-- An interpolator which starts with a peak non-zero velocity and decelerates slowly. -->\n    <public type=\"interpolator\" name=\"linear_out_slow_in\" id=\"0x010c000e\" />\n    <!-- An interpolator which accelerates fast and keeps accelerating until the end. -->\n    <public type=\"interpolator\" name=\"fast_out_linear_in\" id=\"0x010c000f\" />\n\n    <!-- Used for Activity Transitions, this transition indicates that no Transition\n         should be used. -->\n    <public type=\"transition\" name=\"no_transition\" id=\"0x010f0000\" />\n    <!-- A transition that moves and resizes a view -->\n    <public type=\"transition\" name=\"move\" id=\"0x010f0001\" />\n    <!-- A transition that fades views in and out. -->\n    <public type=\"transition\" name=\"fade\" id=\"0x010f0002\" />\n    <!-- A transition that moves views in or out of the scene to or from the edges when\n         a view visibility changes. -->\n    <public type=\"transition\" name=\"explode\" id=\"0x010f0003\" />\n    <!-- A transition that moves views in or out of the scene to or from the bottom edge when\n         a view visibility changes. -->\n    <public type=\"transition\" name=\"slide_bottom\" id=\"0x010f0004\" />\n    <!-- A transition that moves views in or out of the scene to or from the top edge when\n         a view visibility changes. -->\n    <public type=\"transition\" name=\"slide_top\" id=\"0x010f0005\" />\n    <!-- A transition that moves views in or out of the scene to or from the right edge when\n         a view visibility changes. -->\n    <public type=\"transition\" name=\"slide_right\" id=\"0x010f0006\" />\n    <!-- A transition that moves views in or out of the scene to or from the left edge when\n         a view visibility changes. -->\n    <public type=\"transition\" name=\"slide_left\" id=\"0x010f0007\" />\n\n    <!-- WebView error page for when the load fails. @hide @SystemApi -->\n    <public type=\"raw\" name=\"loaderror\" id=\"0x01100000\" />\n    <!-- WebView error page for when domain lookup fails. @hide @SystemApi -->\n    <public type=\"raw\" name=\"nodomain\" id=\"0x01100001\" />\n\n    <!-- ===============================================================\n         Resources added in version 22 of the platform\n         =============================================================== -->\n    <eat-comment />\n\n    <public type=\"attr\" name=\"resizeClip\" id=\"0x010104cf\" />\n    <public type=\"attr\" name=\"collapseContentDescription\" id=\"0x010104d0\" />\n    <public type=\"attr\" name=\"accessibilityTraversalBefore\" id=\"0x010104d1\" />\n    <public type=\"attr\" name=\"accessibilityTraversalAfter\" id=\"0x010104d2\" />\n    <public type=\"attr\" name=\"dialogPreferredPadding\" id=\"0x010104d3\" />\n    <public type=\"attr\" name=\"searchHintIcon\" id=\"0x010104d4\" />\n    <public type=\"attr\" name=\"revisionCode\" id=\"0x010104d5\" />\n    <public type=\"attr\" name=\"drawableTint\" id=\"0x010104d6\" />\n    <public type=\"attr\" name=\"drawableTintMode\" id=\"0x010104d7\" />\n    <public type=\"attr\" name=\"fraction\" id=\"0x010104d8\" />\n\n    <public type=\"style\" name=\"Theme.DeviceDefault.Dialogger.Alert\" id=\"0x010302d1\" />\n    <public type=\"style\" name=\"Theme.DeviceDefault.Light.Dialogger.Alert\" id=\"0x010302d2\" />\n\n  <!-- ===============================================================\n       Resources added in version M of the platform\n       =============================================================== -->\n    <eat-comment />\n\n    <public type=\"attr\" name=\"trackTint\" id=\"0x010104d9\" />\n    <public type=\"attr\" name=\"trackTintMode\" id=\"0x010104da\" />\n    <public type=\"attr\" name=\"start\" id=\"0x010104db\" />\n    <public type=\"attr\" name=\"end\" id=\"0x010104dc\" />\n    <public type=\"attr\" name=\"breakStrategy\" id=\"0x010104dd\" />\n    <public type=\"attr\" name=\"hyphenationFrequency\" id=\"0x010104de\" />\n    <public type=\"attr\" name=\"allowUndo\" id=\"0x010104df\" />\n    <public type=\"attr\" name=\"windowLightStatusBar\" id=\"0x010104e0\" />\n    <public type=\"attr\" name=\"numbersInnerTextColor\" id=\"0x010104e1\" />\n    <public type=\"attr\" name=\"colorBackgroundFloating\" id=\"0x010104e2\" />\n    <public type=\"attr\" name=\"titleTextColor\" id=\"0x010104e3\" />\n    <public type=\"attr\" name=\"subtitleTextColor\" id=\"0x010104e4\" />\n    <public type=\"attr\" name=\"thumbPosition\" id=\"0x010104e5\" />\n    <public type=\"attr\" name=\"scrollIndicators\" id=\"0x010104e6\" />\n    <public type=\"attr\" name=\"contextClickable\" id=\"0x010104e7\" />\n    <public type=\"attr\" name=\"fingerprintAuthDrawable\" id=\"0x010104e8\" />\n    <public type=\"attr\" name=\"logoDescription\" id=\"0x010104e9\" />\n    <public type=\"attr\" name=\"extractNativeLibs\" id=\"0x010104ea\" />\n    <public type=\"attr\" name=\"fullBackupContent\" id=\"0x010104eb\" />\n    <public type=\"attr\" name=\"usesCleartextTraffic\" id=\"0x010104ec\" />\n    <public type=\"attr\" name=\"lockTaskMode\" id=\"0x010104ed\" />\n    <public type=\"attr\" name=\"autoVerify\" id=\"0x010104ee\" />\n    <public type=\"attr\" name=\"showForAllUsers\" id=\"0x010104ef\" />\n    <public type=\"attr\" name=\"supportsAssist\" id=\"0x010104f0\" />\n    <public type=\"attr\" name=\"supportsLaunchVoiceAssistFromKeyguard\" id=\"0x010104f1\" />\n\n    <public type=\"style\" name=\"Widget.Material.Button.Colored\" id=\"0x010302d3\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.Button.Inverse\" id=\"0x010302d4\" />\n    <public type=\"style\" name=\"Theme.Material.Light.LightStatusBar\" id=\"0x010302d5\" />\n    <public type=\"style\" name=\"ThemeOverlay.Material.Dialog\" id=\"0x010302d6\" />\n    <public type=\"style\" name=\"ThemeOverlay.Material.Dialogger.Alert\" id=\"0x010302d7\" />\n\n    <public type=\"id\" name=\"pasteAsPlainText\" id=\"0x01020031\" />\n    <public type=\"id\" name=\"undo\" id=\"0x01020032\" />\n    <public type=\"id\" name=\"redo\" id=\"0x01020033\" />\n    <public type=\"id\" name=\"replaceText\" id=\"0x01020034\" />\n    <public type=\"id\" name=\"shareText\" id=\"0x01020035\" />\n    <public type=\"id\" name=\"accessibilityActionShowOnScreen\" id=\"0x01020036\" />\n    <public type=\"id\" name=\"accessibilityActionScrollToPosition\" id=\"0x01020037\" />\n    <public type=\"id\" name=\"accessibilityActionScrollUp\" id=\"0x01020038\" />\n    <public type=\"id\" name=\"accessibilityActionScrollLeft\" id=\"0x01020039\" />\n    <public type=\"id\" name=\"accessibilityActionScrollDown\" id=\"0x0102003a\" />\n    <public type=\"id\" name=\"accessibilityActionScrollRight\" id=\"0x0102003b\" />\n    <public type=\"id\" name=\"accessibilityActionContextClick\" id=\"0x0102003c\" />\n\n    <public type=\"string\" name=\"fingerprint_icon_content_description\" id=\"0x01040018\" />\n\n  <!-- ===============================================================\n       Resources added in version N of the platform\n       =============================================================== -->\n    <eat-comment />\n\n    <public type=\"attr\" name=\"listMenuViewStyle\" id=\"0x010104f2\" />\n    <public type=\"attr\" name=\"subMenuArrow\" id=\"0x010104f3\" />\n    <public type=\"attr\" name=\"defaultWidth\" id=\"0x010104f4\" />\n    <public type=\"attr\" name=\"defaultHeight\" id=\"0x010104f5\" />\n    <public type=\"attr\" name=\"resizeableActivity\" id=\"0x010104f6\" />\n    <public type=\"attr\" name=\"supportsPictureInPicture\" id=\"0x010104f7\" />\n    <public type=\"attr\" name=\"titleMargin\" id=\"0x010104f8\" />\n    <public type=\"attr\" name=\"titleMarginStart\" id=\"0x010104f9\" />\n    <public type=\"attr\" name=\"titleMarginEnd\" id=\"0x010104fa\" />\n    <public type=\"attr\" name=\"titleMarginTop\" id=\"0x010104fb\" />\n    <public type=\"attr\" name=\"titleMarginBottom\" id=\"0x010104fc\" />\n    <public type=\"attr\" name=\"maxButtonHeight\" id=\"0x010104fd\" />\n    <public type=\"attr\" name=\"buttonGravity\" id=\"0x010104fe\" />\n    <public type=\"attr\" name=\"collapseIcon\" id=\"0x010104ff\" />\n    <public type=\"attr\" name=\"level\" id=\"0x01010500\" />\n    <public type=\"attr\" name=\"contextPopupMenuStyle\" id=\"0x01010501\" />\n    <public type=\"attr\" name=\"textAppearancePopupMenuHeader\" id=\"0x01010502\" />\n    <public type=\"attr\" name=\"windowBackgroundFallback\" id=\"0x01010503\" />\n    <public type=\"attr\" name=\"defaultToDeviceProtectedStorage\" id=\"0x01010504\" />\n    <public type=\"attr\" name=\"directBootAware\" id=\"0x01010505\" />\n    <public type=\"attr\" name=\"preferenceFragmentStyle\" id=\"0x01010506\" />\n    <public type=\"attr\" name=\"canControlMagnification\" id=\"0x01010507\" />\n    <public type=\"attr\" name=\"languageTag\" id=\"0x01010508\" />\n    <public type=\"attr\" name=\"pointerIcon\" id=\"0x01010509\" />\n    <public type=\"attr\" name=\"tickMark\" id=\"0x0101050a\" />\n    <public type=\"attr\" name=\"tickMarkTint\" id=\"0x0101050b\" />\n    <public type=\"attr\" name=\"tickMarkTintMode\" id=\"0x0101050c\" />\n    <public type=\"attr\" name=\"canPerformGestures\" id=\"0x0101050d\" />\n    <public type=\"attr\" name=\"externalService\" id=\"0x0101050e\" />\n    <public type=\"attr\" name=\"supportsLocalInteraction\" id=\"0x0101050f\" />\n    <public type=\"attr\" name=\"startX\" id=\"0x01010510\" />\n    <public type=\"attr\" name=\"startY\" id=\"0x01010511\" />\n    <public type=\"attr\" name=\"endX\" id=\"0x01010512\" />\n    <public type=\"attr\" name=\"endY\" id=\"0x01010513\" />\n    <public type=\"attr\" name=\"offset\" id=\"0x01010514\" />\n    <public type=\"attr\" name=\"use32bitAbi\" id=\"0x01010515\" />\n    <public type=\"attr\" name=\"bitmap\" id=\"0x01010516\" />\n    <public type=\"attr\" name=\"hotSpotX\" id=\"0x01010517\" />\n    <public type=\"attr\" name=\"hotSpotY\" id=\"0x01010518\" />\n    <public type=\"attr\" name=\"version\" id=\"0x01010519\" />\n    <public type=\"attr\" name=\"backupInForeground\" id=\"0x0101051a\" />\n    <public type=\"attr\" name=\"countDown\" id=\"0x0101051b\" />\n    <public type=\"attr\" name=\"canRecord\" id=\"0x0101051c\" />\n    <public type=\"attr\" name=\"tunerCount\" id=\"0x0101051d\" />\n    <public type=\"attr\" name=\"fillType\" id=\"0x0101051e\" />\n    <public type=\"attr\" name=\"popupEnterTransition\" id=\"0x0101051f\" />\n    <public type=\"attr\" name=\"popupExitTransition\" id=\"0x01010520\" />\n    <public type=\"attr\" name=\"forceHasOverlappingRendering\" id=\"0x01010521\" />\n    <public type=\"attr\" name=\"contentInsetStartWithNavigation\" id=\"0x01010522\" />\n    <public type=\"attr\" name=\"contentInsetEndWithActions\" id=\"0x01010523\" />\n    <public type=\"attr\" name=\"numberPickerStyle\" id=\"0x01010524\" />\n    <public type=\"attr\" name=\"enableVrMode\" id=\"0x01010525\" />\n    <public type=\"attr\" name=\"hash\" id=\"0x01010526\" />\n    <public type=\"attr\" name=\"networkSecurityConfig\" id=\"0x01010527\" />\n\n    <public type=\"style\" name=\"Theme.Material.Light.DialogWhenLarge.DarkActionBar\" id=\"0x010302d8\" />\n    <public type=\"style\" name=\"Widget.Material.SeekBar.Discrete\" id=\"0x010302d9\" />\n    <public type=\"style\" name=\"Widget.Material.CompoundButton.Switch\" id=\"0x010302da\" />\n    <public type=\"style\" name=\"Widget.Material.Light.CompoundButton.Switch\" id=\"0x010302db\" />\n    <public type=\"style\" name=\"Widget.Material.NumberPicker\" id=\"0x010302dc\" />\n    <public type=\"style\" name=\"Widget.Material.Light.NumberPicker\" id=\"0x010302dd\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.Button.Colored\" id=\"0x010302de\" />\n    <public type=\"style\" name=\"TextAppearance.Material.Widget.Button.Borderless.Colored\" id=\"0x010302df\" />\n\n    <public type=\"id\" name=\"accessibilityActionSetProgress\" id=\"0x0102003d\" />\n    <public type=\"id\" name=\"icon_frame\" id=\"0x0102003e\" />\n    <public type=\"id\" name=\"list_container\" id=\"0x0102003f\" />\n    <public type=\"id\" name=\"switch_widget\" id=\"0x01020040\" />\n  <!-- ===============================================================\n       Resources added in version N MR1 of the platform\n       =============================================================== -->\n    <eat-comment />\n    <public type=\"attr\" name=\"shortcutId\" id=\"0x01010528\" />\n    <public type=\"attr\" name=\"shortcutShortLabel\" id=\"0x01010529\" />\n    <public type=\"attr\" name=\"shortcutLongLabel\" id=\"0x0101052a\" />\n    <public type=\"attr\" name=\"shortcutDisabledMessage\" id=\"0x0101052b\" />\n    <public type=\"attr\" name=\"roundIcon\" id=\"0x0101052c\" />\n    <public type=\"attr\" name=\"contextUri\" id=\"0x0101052d\" />\n    <public type=\"attr\" name=\"contextDescription\" id=\"0x0101052e\" />\n    <public type=\"attr\" name=\"showMetadataInPreview\" id=\"0x0101052f\" />\n    <public type=\"attr\" name=\"colorSecondary\" id=\"0x01010530\" />\n\n  <!-- ===============================================================\n       Resources added in version O of the platform\n\n       NOTE: add <public> elements within a <public-group> like so:\n\n       <public-group type=\"attr\" first-id=\"0x01010531\">\n           <public name=\"exampleAttr1\" />\n           <public name=\"exampleAttr2\" />\n       </public-group>\n\n       To add a new public-group block, choose an id value that is 1 greater\n       than the last of that item above. For example, the last \"attr\" id\n       value above is 0x01010530, so the public-group of attrs below has\n       the id value of 0x01010531.\n       =============================================================== -->\n    <eat-comment />\n\n    <public type=\"attr\" name=\"visibleToInstantApps\" id=\"0x01010531\" />\n    <public type=\"attr\" name=\"font\" id=\"0x01010532\" />\n    <public type=\"attr\" name=\"fontWeight\" id=\"0x01010533\" />\n    <public type=\"attr\" name=\"tooltipText\" id=\"0x01010534\" />\n    <public type=\"attr\" name=\"autoSizeTextType\" id=\"0x01010535\" />\n    <public type=\"attr\" name=\"autoSizeStepGranularity\" id=\"0x01010536\" />\n    <public type=\"attr\" name=\"autoSizePresetSizes\" id=\"0x01010537\" />\n    <public type=\"attr\" name=\"autoSizeMinTextSize\" id=\"0x01010538\" />\n    <public type=\"attr\" name=\"min\" id=\"0x01010539\" />\n    <public type=\"attr\" name=\"rotationAnimation\" id=\"0x0101053a\" />\n    <public type=\"attr\" name=\"layout_marginHorizontal\" id=\"0x0101053b\" />\n    <public type=\"attr\" name=\"layout_marginVertical\" id=\"0x0101053c\" />\n    <public type=\"attr\" name=\"paddingHorizontal\" id=\"0x0101053d\" />\n    <public type=\"attr\" name=\"paddingVertical\" id=\"0x0101053e\" />\n    <public type=\"attr\" name=\"fontStyle\" id=\"0x0101053f\" />\n    <public type=\"attr\" name=\"keyboardNavigationCluster\" id=\"0x01010540\" />\n    <public type=\"attr\" name=\"targetProcesses\" id=\"0x01010541\" />\n    <public type=\"attr\" name=\"nextClusterForward\" id=\"0x01010542\" />\n    <public type=\"attr\" name=\"colorError\" id=\"0x01010543\" />\n    <public type=\"attr\" name=\"focusedByDefault\" id=\"0x01010544\" />\n    <public type=\"attr\" name=\"appCategory\" id=\"0x01010545\" />\n    <public type=\"attr\" name=\"autoSizeMaxTextSize\" id=\"0x01010546\" />\n    <public type=\"attr\" name=\"recreateOnConfigChanges\" id=\"0x01010547\" />\n    <public type=\"attr\" name=\"certDigest\" id=\"0x01010548\" />\n    <public type=\"attr\" name=\"splitName\" id=\"0x01010549\" />\n    <public type=\"attr\" name=\"colorMode\" id=\"0x0101054a\" />\n    <public type=\"attr\" name=\"isolatedSplits\" id=\"0x0101054b\" />\n    <public type=\"attr\" name=\"targetSandboxVersion\" id=\"0x0101054c\" />\n    <public type=\"attr\" name=\"canRequestFingerprintGestures\" id=\"0x0101054d\" />\n    <public type=\"attr\" name=\"alphabeticModifiers\" id=\"0x0101054e\" />\n    <public type=\"attr\" name=\"numericModifiers\" id=\"0x0101054f\" />\n    <public type=\"attr\" name=\"fontProviderAuthority\" id=\"0x01010550\" />\n    <public type=\"attr\" name=\"fontProviderQuery\" id=\"0x01010551\" />\n    <public type=\"attr\" name=\"primaryContentAlpha\" id=\"0x01010552\" />\n    <public type=\"attr\" name=\"secondaryContentAlpha\" id=\"0x01010553\" />\n    <public type=\"attr\" name=\"requiredFeature\" id=\"0x01010554\" />\n    <public type=\"attr\" name=\"requiredNotFeature\" id=\"0x01010555\" />\n    <public type=\"attr\" name=\"autofillHints\" id=\"0x01010556\" />\n    <public type=\"attr\" name=\"fontProviderPackage\" id=\"0x01010557\" />\n    <public type=\"attr\" name=\"importantForAutofill\" id=\"0x01010558\" />\n    <public type=\"attr\" name=\"recycleEnabled\" id=\"0x01010559\"/>\n    <public type=\"attr\" name=\"isStatic\" id=\"0x0101055a\" />\n    <public type=\"attr\" name=\"isFeatureSplit\" id=\"0x0101055b\" />\n    <public type=\"attr\" name=\"singleLineTitle\" id=\"0x0101055c\" />\n    <public type=\"attr\" name=\"fontProviderCerts\" id=\"0x0101055d\" />\n    <public type=\"attr\" name=\"iconTint\" id=\"0x0101055e\" />\n    <public type=\"attr\" name=\"iconTintMode\" id=\"0x0101055f\" />\n    <public type=\"attr\" name=\"maxAspectRatio\" id=\"0x01010560\"/>\n    <public type=\"attr\" name=\"iconSpaceReserved\" id=\"0x01010561\"/>\n    <public type=\"attr\" name=\"defaultFocusHighlightEnabled\" id=\"0x01010562\" />\n    <public type=\"attr\" name=\"persistentWhenFeatureAvailable\" id=\"0x01010563\"/>\n    <public type=\"attr\" name=\"windowSplashscreenContent\" id=\"0x01010564\" />\n    <!-- @hide @SystemApi -->\n    <public type=\"attr\" name=\"requiredSystemPropertyName\" id=\"0x01010565\" />\n    <!-- @hide @SystemApi -->\n    <public type=\"attr\" name=\"requiredSystemPropertyValue\" id=\"0x01010566\" />\n    <public type=\"attr\" name=\"justificationMode\" id=\"0x01010567\" />\n    <public type=\"attr\" name=\"autofilledHighlight\" id=\"0x01010568\" />\n\n    <public type=\"id\" name=\"textAssist\" id=\"0x01020041\" />\n    <public type=\"id\" name=\"accessibilityActionMoveWindow\" id=\"0x01020042\" />\n    <public type=\"id\" name=\"autofill\" id=\"0x01020043\" />\n\n    <public type=\"string\" name=\"paste_as_plain_text\" id=\"0x01040019\" />\n\n  <!-- ===============================================================\n       Resources added in version O MR1 of the platform\n\n       NOTE: add <public> elements within a <public-group> like so:\n\n       <public-group type=\"attr\" first-id=\"0x01010531\">\n           <public name=\"exampleAttr1\" />\n           <public name=\"exampleAttr2\" />\n       </public-group>\n\n       To add a new public-group block, choose an id value that is 1 greater\n       than the last of that item above. For example, the last \"attr\" id\n       value above is 0x01010530, so the public-group of attrs below has\n       the id value of 0x01010531.\n       =============================================================== -->\n    <eat-comment />\n\n    <public type=\"attr\" name=\"showWhenLocked\" id=\"0x01010569\" />\n    <public type=\"attr\" name=\"turnScreenOn\" id=\"0x0101056a\" />\n    <public type=\"attr\" name=\"classLoader\" id=\"0x0101056b\" />\n    <public type=\"attr\" name=\"windowLightNavigationBar\" id=\"0x0101056c\" />\n    <public type=\"attr\" name=\"navigationBarDividerColor\" id=\"0x0101056d\" />\n\n    <public type=\"string\" name=\"autofill\" id=\"0x0104001a\"/>\n\n  <!-- ===============================================================\n       DO NOT ADD UN-GROUPED ITEMS HERE\n\n       Any new items (attrs, styles, ids, etc.) *must* be added in a\n       public-group block, as the preceding comment explains.\n       Items added outside of a group may have their value recalculated\n       every time something new is added to this file.\n       =============================================================== -->\n</resources>\n"
  },
  {
    "path": "libs/androguard/decompiler/__init__.py",
    "content": "import sys\n\nsys.setrecursionlimit(5000)\n"
  },
  {
    "path": "libs/androguard/decompiler/basic_blocks.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (c) 2012 Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom collections import defaultdict\n\nfrom loguru import logger\n\nfrom androguard.decompiler.instruction import MoveExceptionExpression\nfrom androguard.decompiler.node import Node\nfrom androguard.decompiler.opcode_ins import INSTRUCTION_SET\nfrom androguard.decompiler.util import get_type\n\n\nclass BasicBlock(Node):\n    def __init__(self, name: str, block_ins: list) -> None:\n        super().__init__(name)\n        self.ins = block_ins\n        self.ins_range = None\n        self.loc_ins = None\n        self.var_to_declare = set()\n        self.catch_type = None\n\n    def get_ins(self) -> list:\n        return self.ins\n\n    def get_loc_with_ins(self) -> list:\n        if self.loc_ins is None:\n            self.loc_ins = list(zip(range(*self.ins_range), self.ins))\n        return self.loc_ins\n\n    def remove_ins(self, loc, ins) -> None:\n        self.ins.remove(ins)\n        self.loc_ins.remove((loc, ins))\n\n    def add_ins(self, new_ins_list: list) -> None:\n        for new_ins in new_ins_list:\n            self.ins.append(new_ins)\n\n    def add_variable_declaration(self, variable):\n        self.var_to_declare.add(variable)\n\n    def number_ins(self, num: int) -> int:\n        last_ins_num = num + len(self.ins)\n        self.ins_range = [num, last_ins_num]\n        self.loc_ins = None\n        return last_ins_num\n\n    def set_catch_type(self, _type):\n        self.catch_type = _type\n\n\nclass StatementBlock(BasicBlock):\n    def __init__(self, name, block_ins):\n        super().__init__(name, block_ins)\n        self.type.is_stmt = True\n\n    def visit(self, visitor):\n        return visitor.visit_statement_node(self)\n\n    def __str__(self):\n        return '%d-Statement(%s)' % (self.num, self.name)\n\n\nclass ReturnBlock(BasicBlock):\n    def __init__(self, name, block_ins):\n        super().__init__(name, block_ins)\n        self.type.is_return = True\n\n    def visit(self, visitor):\n        return visitor.visit_return_node(self)\n\n    def __str__(self):\n        return '%d-Return(%s)' % (self.num, self.name)\n\n\nclass ThrowBlock(BasicBlock):\n    def __init__(self, name, block_ins):\n        super().__init__(name, block_ins)\n        self.type.is_throw = True\n\n    def visit(self, visitor):\n        return visitor.visit_throw_node(self)\n\n    def __str__(self):\n        return '%d-Throw(%s)' % (self.num, self.name)\n\n\nclass SwitchBlock(BasicBlock):\n    def __init__(self, name, switch, block_ins):\n        super().__init__(name, block_ins)\n        self.switch = switch\n        self.cases = []\n        self.default = None\n        self.node_to_case = defaultdict(list)\n        self.type.is_switch = True\n\n    def add_case(self, case):\n        self.cases.append(case)\n\n    def visit(self, visitor):\n        return visitor.visit_switch_node(self)\n\n    def copy_from(self, node):\n        super().copy_from(node)\n        self.cases = node.cases[:]\n        self.switch = node.switch[:]\n\n    def update_attribute_with(self, n_map):\n        super().update_attribute_with(n_map)\n        self.cases = [n_map.get(n, n) for n in self.cases]\n        for node1, node2 in n_map.items():\n            if node1 in self.node_to_case:\n                self.node_to_case[node2] = self.node_to_case.pop(node1)\n\n    def order_cases(self):\n        values = self.switch.get_values()\n        if len(values) < len(self.cases):\n            self.default = self.cases.pop(0)\n        for case, node in zip(values, self.cases):\n            self.node_to_case[node].append(case)\n\n    def __str__(self):\n        return '%d-Switch(%s)' % (self.num, self.name)\n\n\nclass CondBlock(BasicBlock):\n    def __init__(self, name, block_ins):\n        super().__init__(name, block_ins)\n        self.true = None\n        self.false = None\n        self.type.is_cond = True\n\n    def update_attribute_with(self, n_map):\n        super().update_attribute_with(n_map)\n        self.true = n_map.get(self.true, self.true)\n        self.false = n_map.get(self.false, self.false)\n\n    def neg(self):\n        if len(self.ins) != 1:\n            raise RuntimeWarning('Condition should have only 1 instruction !')\n        self.ins[-1].neg()\n\n    def visit(self, visitor):\n        return visitor.visit_cond_node(self)\n\n    def visit_cond(self, visitor):\n        if len(self.ins) != 1:\n            raise RuntimeWarning('Condition should have only 1 instruction !')\n        return visitor.visit_ins(self.ins[-1])\n\n    def __str__(self):\n        return '%d-If(%s)' % (self.num, self.name)\n\n\nclass Condition:\n    def __init__(self, cond1, cond2, isand, isnot):\n        self.cond1 = cond1\n        self.cond2 = cond2\n        self.isand = isand\n        self.isnot = isnot\n\n    def neg(self):\n        self.isand = not self.isand\n        self.cond1.neg()\n        self.cond2.neg()\n\n    def get_ins(self):\n        lins = []\n        lins.extend(self.cond1.get_ins())\n        lins.extend(self.cond2.get_ins())\n        return lins\n\n    def get_loc_with_ins(self):\n        loc_ins = []\n        loc_ins.extend(self.cond1.get_loc_with_ins())\n        loc_ins.extend(self.cond2.get_loc_with_ins())\n        return loc_ins\n\n    def visit(self, visitor):\n        return visitor.visit_short_circuit_condition(\n            self.isnot, self.isand, self.cond1, self.cond2\n        )\n\n    def __str__(self):\n        if self.isnot:\n            ret = '!%s %s %s'\n        else:\n            ret = '%s %s %s'\n        return ret % (self.cond1, ['||', '&&'][self.isand], self.cond2)\n\n\nclass ShortCircuitBlock(CondBlock):\n    def __init__(self, name, cond):\n        super().__init__(name, None)\n        self.cond = cond\n\n    def get_ins(self):\n        return self.cond.get_ins()\n\n    def get_loc_with_ins(self):\n        return self.cond.get_loc_with_ins()\n\n    def neg(self):\n        self.cond.neg()\n\n    def visit_cond(self, visitor):\n        return self.cond.visit(visitor)\n\n    def __str__(self):\n        return '%d-SC(%s)' % (self.num, self.cond)\n\n\nclass LoopBlock(CondBlock):\n    def __init__(self, name, cond):\n        super().__init__(name, None)\n        self.cond = cond\n\n    def get_ins(self):\n        return self.cond.get_ins()\n\n    def neg(self):\n        self.cond.neg()\n\n    def get_loc_with_ins(self):\n        return self.cond.get_loc_with_ins()\n\n    def visit(self, visitor):\n        return visitor.visit_loop_node(self)\n\n    def visit_cond(self, visitor):\n        return self.cond.visit_cond(visitor)\n\n    def update_attribute_with(self, n_map):\n        super().update_attribute_with(n_map)\n        self.cond.update_attribute_with(n_map)\n\n    def __str__(self):\n        if self.looptype.is_pretest:\n            if self.false in self.loop_nodes:\n                return '%d-While(!%s)[%s]' % (self.num, self.name, self.cond)\n            return '%d-While(%s)[%s]' % (self.num, self.name, self.cond)\n        elif self.looptype.is_posttest:\n            return '%d-DoWhile(%s)[%s]' % (self.num, self.name, self.cond)\n        elif self.looptype.is_endless:\n            return '%d-WhileTrue(%s)[%s]' % (self.num, self.name, self.cond)\n        return '%d-WhileNoType(%s)' % (self.num, self.name)\n\n\nclass TryBlock(BasicBlock):\n    def __init__(self, node):\n        super().__init__('Try-%s' % node.name, None)\n        self.try_start = node\n        self.catch = []\n\n    # FIXME:\n    @property\n    def num(self):\n        return self.try_start.num\n\n    @num.setter\n    def num(self, value):\n        pass\n\n    def add_catch_node(self, node):\n        self.catch.append(node)\n\n    def visit(self, visitor):\n        visitor.visit_try_node(self)\n\n    def __str__(self):\n        return 'Try({})[{}]'.format(self.name, self.catch)\n\n\nclass CatchBlock(BasicBlock):\n    def __init__(self, node):\n        first_ins = node.ins[0]\n        self.exception_ins = None\n        if isinstance(first_ins, MoveExceptionExpression):\n            self.exception_ins = first_ins\n            node.ins.pop(0)\n        super().__init__('Catch-%s' % node.name, node.ins)\n        self.catch_start = node\n        self.catch_type = node.catch_type\n\n    def visit(self, visitor):\n        visitor.visit_catch_node(self)\n\n    def visit_exception(self, visitor):\n        if self.exception_ins:\n            visitor.visit_ins(self.exception_ins)\n        else:\n            visitor.write(get_type(self.catch_type))\n\n    def __str__(self):\n        return 'Catch(%s)' % self.name\n\n\ndef build_node_from_block(block, vmap, gen_ret, exception_type=None):\n    ins, lins = None, []\n    idx = block.get_start()\n    for ins in block.get_instructions():\n        opcode = ins.get_op_value()\n        if opcode == -1:  # FIXME? or opcode in (0x0300, 0x0200, 0x0100):\n            idx += ins.get_length()\n            continue\n        try:\n            _ins = INSTRUCTION_SET[opcode]\n        except IndexError:\n            logger.error('Unknown instruction : %s.', ins.get_name().lower())\n            _ins = INSTRUCTION_SET[0]\n        # fill-array-data\n        if opcode == 0x26:\n            fillarray = block.get_special_ins(idx)\n            lins.append(_ins(ins, vmap, fillarray))\n        # invoke-kind[/range]\n        elif 0x6E <= opcode <= 0x72 or 0x74 <= opcode <= 0x78:\n            lins.append(_ins(ins, vmap, gen_ret))\n        # filled-new-array[/range]\n        elif 0x24 <= opcode <= 0x25:\n            lins.append(_ins(ins, vmap, gen_ret.new()))\n        # move-result*\n        elif 0xA <= opcode <= 0xC:\n            lins.append(_ins(ins, vmap, gen_ret.last()))\n        # move-exception\n        elif opcode == 0xD:\n            lins.append(_ins(ins, vmap, exception_type))\n        # monitor-{enter,exit}\n        elif 0x1D <= opcode <= 0x1E:\n            idx += ins.get_length()\n            continue\n        else:\n            lins.append(_ins(ins, vmap))\n        idx += ins.get_length()\n    name = block.get_name()\n    # return*\n    if 0xE <= opcode <= 0x11:\n        node = ReturnBlock(name, lins)\n    # {packed,sparse}-switch\n    elif 0x2B <= opcode <= 0x2C:\n        idx -= ins.get_length()\n        values = block.get_special_ins(idx)\n        node = SwitchBlock(name, values, lins)\n    # if-test[z]\n    elif 0x32 <= opcode <= 0x3D:\n        node = CondBlock(name, lins)\n        node.off_last_ins = ins.get_ref_off()\n    # throw\n    elif opcode == 0x27:\n        node = ThrowBlock(name, lins)\n    else:\n        # goto*\n        if 0x28 <= opcode <= 0x2A:\n            lins.pop()\n        node = StatementBlock(name, lins)\n    return node\n"
  },
  {
    "path": "libs/androguard/decompiler/control_flow.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (c) 2012 Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom collections import defaultdict\n\nfrom loguru import logger\n\nfrom androguard.decompiler.basic_blocks import (\n    CatchBlock,\n    Condition,\n    LoopBlock,\n    ShortCircuitBlock,\n    TryBlock,\n)\nfrom androguard.decompiler.graph import Graph\nfrom androguard.decompiler.node import Interval\nfrom androguard.decompiler.util import common_dom\n\n\ndef intervals(graph):\n    \"\"\"\n    Compute the intervals of the graph\n    Returns\n    interval_graph: a graph of the intervals of G\n    interv_heads: a dict of (header node, interval)\n    \"\"\"\n    interval_graph = Graph()  # graph of intervals\n    heads = [graph.entry]  # list of header nodes\n    interv_heads = {}  # interv_heads[i] = interval of header i\n    processed = {i: False for i in graph}\n    edges = defaultdict(list)\n\n    while heads:\n        head = heads.pop(0)\n\n        if not processed[head]:\n            processed[head] = True\n            interv_heads[head] = Interval(head)\n\n            # Check if there is a node which has all its predecessor in the\n            # current interval. If there is, add that node to the interval and\n            # repeat until all the possible nodes have been added.\n            change = True\n            while change:\n                change = False\n                for node in graph.rpo[1:]:\n                    if all(\n                        p in interv_heads[head] for p in graph.all_preds(node)\n                    ):\n                        change |= interv_heads[head].add_node(node)\n\n            # At this stage, a node which is not in the interval, but has one\n            # of its predecessor in it, is the header of another interval. So\n            # we add all such nodes to the header list.\n            for node in graph:\n                if node not in interv_heads[head] and node not in heads:\n                    if any(\n                        p in interv_heads[head] for p in graph.all_preds(node)\n                    ):\n                        edges[interv_heads[head]].append(node)\n                        assert node not in heads\n                        heads.append(node)\n\n            interval_graph.add_node(interv_heads[head])\n            interv_heads[head].compute_end(graph)\n\n    # Edges is a mapping of 'Interval -> [header nodes of interval successors]'\n    for interval, heads in edges.items():\n        for head in heads:\n            interval_graph.add_edge(interval, interv_heads[head])\n\n    interval_graph.entry = graph.entry.interval\n    if graph.exit:\n        interval_graph.exit = graph.exit.interval\n\n    return interval_graph, interv_heads\n\n\ndef derived_sequence(graph):\n    \"\"\"\n    Compute the derived sequence of the graph G\n    The intervals of G are collapsed into nodes, intervals of these nodes are\n    built, and the process is repeated iteratively until we obtain a single\n    node (if the graph is not irreducible)\n    \"\"\"\n    deriv_seq = [graph]\n    deriv_interv = []\n    single_node = False\n\n    while not single_node:\n\n        interv_graph, interv_heads = intervals(graph)\n        deriv_interv.append(interv_heads)\n\n        single_node = len(interv_graph) == 1\n        if not single_node:\n            deriv_seq.append(interv_graph)\n\n        graph = interv_graph\n        graph.compute_rpo()\n\n    return deriv_seq, deriv_interv\n\n\ndef mark_loop_rec(graph, node, s_num, e_num, interval, nodes_in_loop):\n    if node in nodes_in_loop:\n        return\n    nodes_in_loop.append(node)\n    for pred in graph.all_preds(node):\n        if s_num < pred.num <= e_num and pred in interval:\n            mark_loop_rec(graph, pred, s_num, e_num, interval, nodes_in_loop)\n\n\ndef mark_loop(graph, start, end, interval):\n    logger.debug('MARKLOOP : %s END : %s', start, end)\n    head = start.get_head()\n    latch = end.get_end()\n    nodes_in_loop = [head]\n    mark_loop_rec(graph, latch, head.num, latch.num, interval, nodes_in_loop)\n    head.startloop = True\n    head.latch = latch\n    return nodes_in_loop\n\n\ndef loop_type(start, end, nodes_in_loop):\n    if end.type.is_cond:\n        if start.type.is_cond:\n            if start.true in nodes_in_loop and start.false in nodes_in_loop:\n                start.looptype.is_posttest = True\n            else:\n                start.looptype.is_pretest = True\n        else:\n            start.looptype.is_posttest = True\n    else:\n        if start.type.is_cond:\n            if start.true in nodes_in_loop and start.false in nodes_in_loop:\n                start.looptype.is_endless = True\n            else:\n                start.looptype.is_pretest = True\n        else:\n            start.looptype.is_endless = True\n\n\ndef loop_follow(start, end, nodes_in_loop):\n    follow = None\n    if start.looptype.is_pretest:\n        if start.true in nodes_in_loop:\n            follow = start.false\n        else:\n            follow = start.true\n    elif start.looptype.is_posttest:\n        if end.true in nodes_in_loop:\n            follow = end.false\n        else:\n            follow = end.true\n    else:\n        num_next = float('inf')\n        for node in nodes_in_loop:\n            if node.type.is_cond:\n                if node.true.num < num_next and node.true not in nodes_in_loop:\n                    follow = node.true\n                    num_next = follow.num\n                elif (\n                    node.false.num < num_next\n                    and node.false not in nodes_in_loop\n                ):\n                    follow = node.false\n                    num_next = follow.num\n    start.follow['loop'] = follow\n    for node in nodes_in_loop:\n        node.follow['loop'] = follow\n    logger.debug('Start of loop %s', start)\n    logger.debug('Follow of loop: %s', start.follow['loop'])\n\n\ndef loop_struct(graphs_list, intervals_list):\n    first_graph = graphs_list[0]\n    for i, graph in enumerate(graphs_list):\n        interval = intervals_list[i]\n        for head in sorted(list(interval.keys()), key=lambda x: x.num):\n            loop_nodes = []\n            for node in graph.all_preds(head):\n                if node.interval is head.interval:\n                    lnodes = mark_loop(first_graph, head, node, head.interval)\n                    for lnode in lnodes:\n                        if lnode not in loop_nodes:\n                            loop_nodes.append(lnode)\n            head.get_head().loop_nodes = loop_nodes\n\n\ndef if_struct(graph, idoms):\n    unresolved = set()\n    for node in graph.post_order():\n        if node.type.is_cond:\n            ldominates = []\n            for n, idom in idoms.items():\n                if node is idom and len(graph.reverse_edges.get(n, [])) > 1:\n                    ldominates.append(n)\n            if len(ldominates) > 0:\n                n = max(ldominates, key=lambda x: x.num)\n                node.follow['if'] = n\n                for x in unresolved.copy():\n                    if node.num < x.num < n.num:\n                        x.follow['if'] = n\n                        unresolved.remove(x)\n            else:\n                unresolved.add(node)\n    return unresolved\n\n\ndef switch_struct(graph, idoms):\n    unresolved = set()\n    for node in graph.post_order():\n        if node.type.is_switch:\n            m = node\n            for suc in graph.sucs(node):\n                if idoms[suc] is not node:\n                    m = common_dom(idoms, node, suc)\n            ldominates = []\n            for n, dom in idoms.items():\n                if m is dom and len(graph.all_preds(n)) > 1:\n                    ldominates.append(n)\n            if len(ldominates) > 0:\n                n = max(ldominates, key=lambda x: x.num)\n                node.follow['switch'] = n\n                for x in unresolved:\n                    x.follow['switch'] = n\n                unresolved = set()\n            else:\n                unresolved.add(node)\n            node.order_cases()\n\n\n# TODO: deal with preds which are in catch\ndef short_circuit_struct(graph, idom, node_map):\n    def MergeNodes(node1, node2, is_and, is_not):\n        lpreds = set()\n        ldests = set()\n        for node in (node1, node2):\n            lpreds.update(graph.preds(node))\n            ldests.update(graph.sucs(node))\n            graph.remove_node(node)\n            done.add(node)\n        lpreds.difference_update((node1, node2))\n        ldests.difference_update((node1, node2))\n\n        entry = graph.entry in (node1, node2)\n\n        new_name = '{}+{}'.format(node1.name, node2.name)\n        condition = Condition(node1, node2, is_and, is_not)\n\n        new_node = ShortCircuitBlock(new_name, condition)\n        for old_n, new_n in node_map.items():\n            if new_n in (node1, node2):\n                node_map[old_n] = new_node\n        node_map[node1] = new_node\n        node_map[node2] = new_node\n        idom[new_node] = idom[node1]\n        idom.pop(node1)\n        idom.pop(node2)\n        new_node.copy_from(node1)\n\n        graph.add_node(new_node)\n\n        for pred in lpreds:\n            pred.update_attribute_with(node_map)\n            graph.add_edge(node_map.get(pred, pred), new_node)\n        for dest in ldests:\n            graph.add_edge(new_node, node_map.get(dest, dest))\n        if entry:\n            graph.entry = new_node\n        return new_node\n\n    change = True\n    while change:\n        change = False\n        done = set()\n        for node in graph.post_order():\n            if node.type.is_cond and node not in done:\n                then = node.true\n                els = node.false\n                if node in (then, els):\n                    continue\n                if then.type.is_cond and len(graph.preds(then)) == 1:\n                    if node in (then.true, then.false):\n                        continue\n                    if then.false is els:  # node && t\n                        change = True\n                        merged_node = MergeNodes(node, then, True, False)\n                        merged_node.true = then.true\n                        merged_node.false = els\n                    elif then.true is els:  # !node || t\n                        change = True\n                        merged_node = MergeNodes(node, then, False, True)\n                        merged_node.true = els\n                        merged_node.false = then.false\n                elif els.type.is_cond and len(graph.preds(els)) == 1:\n                    if node in (els.false, els.true):\n                        continue\n                    if els.false is then:  # !node && e\n                        change = True\n                        merged_node = MergeNodes(node, els, True, True)\n                        merged_node.true = els.true\n                        merged_node.false = then\n                    elif els.true is then:  # node || e\n                        change = True\n                        merged_node = MergeNodes(node, els, False, False)\n                        merged_node.true = then\n                        merged_node.false = els.false\n            done.add(node)\n        if change:\n            graph.compute_rpo()\n\n\ndef while_block_struct(graph, node_map):\n    change = False\n    for node in graph.rpo[:]:\n        if node.startloop:\n            change = True\n            new_node = LoopBlock(node.name, node)\n            node_map[node] = new_node\n            new_node.copy_from(node)\n\n            entry = node is graph.entry\n            lpreds = graph.preds(node)\n            lsuccs = graph.sucs(node)\n\n            for pred in lpreds:\n                graph.add_edge(node_map.get(pred, pred), new_node)\n\n            for suc in lsuccs:\n                graph.add_edge(new_node, node_map.get(suc, suc))\n            if entry:\n                graph.entry = new_node\n\n            if node.type.is_cond:\n                new_node.true = node.true\n                new_node.false = node.false\n\n            graph.add_node(new_node)\n            graph.remove_node(node)\n\n    if change:\n        graph.compute_rpo()\n\n\ndef catch_struct(graph, idoms):\n    block_try_nodes = {}\n    node_map = {}\n    for catch_block in graph.reverse_catch_edges:\n        if catch_block in graph.catch_edges:\n            continue\n        catch_node = CatchBlock(catch_block)\n\n        try_block = idoms[catch_block]\n        try_node = block_try_nodes.get(try_block)\n        if try_node is None:\n            block_try_nodes[try_block] = TryBlock(try_block)\n            try_node = block_try_nodes[try_block]\n\n            node_map[try_block] = try_node\n            for pred in graph.all_preds(try_block):\n                pred.update_attribute_with(node_map)\n                if try_block in graph.sucs(pred):\n                    graph.edges[pred].remove(try_block)\n                graph.add_edge(pred, try_node)\n\n            if try_block.type.is_stmt:\n                follow = graph.sucs(try_block)\n                if follow:\n                    try_node.follow = graph.sucs(try_block)[0]\n                else:\n                    try_node.follow = None\n            elif try_block.type.is_cond:\n                loop_follow = try_block.follow['loop']\n                if loop_follow:\n                    try_node.follow = loop_follow\n                else:\n                    try_node.follow = try_block.follow['if']\n            elif try_block.type.is_switch:\n                try_node.follow = try_block.follow['switch']\n            else:  # return or throw\n                try_node.follow = None\n\n        try_node.add_catch_node(catch_node)\n    for node in graph.nodes:\n        node.update_attribute_with(node_map)\n    if graph.entry in node_map:\n        graph.entry = node_map[graph.entry]\n\n\ndef update_dom(idoms, node_map):\n    for n, dom in idoms.items():\n        idoms[n] = node_map.get(dom, dom)\n\n\ndef identify_structures(graph, idoms):\n    Gi, Li = derived_sequence(graph)\n    switch_struct(graph, idoms)\n    loop_struct(Gi, Li)\n    node_map = {}\n\n    short_circuit_struct(graph, idoms, node_map)\n    update_dom(idoms, node_map)\n\n    if_unresolved = if_struct(graph, idoms)\n\n    while_block_struct(graph, node_map)\n    update_dom(idoms, node_map)\n\n    loop_starts = []\n    for node in graph.rpo:\n        node.update_attribute_with(node_map)\n        if node.startloop:\n            loop_starts.append(node)\n    for node in loop_starts:\n        loop_type(node, node.latch, node.loop_nodes)\n        loop_follow(node, node.latch, node.loop_nodes)\n\n    for node in if_unresolved:\n        follows = [\n            n for n in (node.follow['loop'], node.follow['switch']) if n\n        ]\n        if len(follows) >= 1:\n            follow = min(follows, key=lambda x: x.num)\n            node.follow['if'] = follow\n\n    catch_struct(graph, idoms)\n"
  },
  {
    "path": "libs/androguard/decompiler/dast.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (C) 2014 Google Inc. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"This file is a simplified version of writer.py that outputs an AST instead of source code.\"\"\"\nimport struct\n\nfrom loguru import logger\n\nfrom androguard.core.dex.dex_types import TYPE_DESCRIPTOR\nfrom androguard.decompiler import basic_blocks, instruction, opcode_ins\n\n\nclass JSONWriter:\n    def __init__(self, graph, method):\n        self.graph = graph\n        self.method = method\n\n        self.visited_nodes = set()\n        self.loop_follow = [None]\n        self.if_follow = [None]\n        self.switch_follow = [None]\n        self.latch_node = [None]\n        self.try_follow = [None]\n        self.next_case = None\n        self.need_break = True\n        self.constructor = False\n\n        self.context = []\n\n    # This class is created as a context manager so that it can be used like\n    # with self as foo:\n    #   ...\n    # which pushes a statement block on to the context stack and assigns it to foo\n    # within the with block, all added instructions will be added to foo\n    def __enter__(self):\n        self.context.append(self.statement_block())\n        return self.context[-1]\n\n    def __exit__(self, *args):\n        self.context.pop()\n        return False\n\n    # Add a statement to the current context\n    def add(self, val):\n        self._append(self.context[-1], val)\n\n    def visit_ins(self, op):\n        self.add(self._visit_ins(op, isCtor=self.constructor))\n\n    # Note: this is a mutating operation\n    def get_ast(self):\n        m = self.method\n        flags = m.access\n        if 'constructor' in flags:\n            flags.remove('constructor')\n            self.constructor = True\n\n        params = m.lparams[:]\n        if 'static' not in m.access:\n            params = params[1:]\n\n        # DAD doesn't create any params for abstract methods\n        if len(params) != len(m.params_type):\n            assert 'abstract' in flags or 'native' in flags\n            assert not params\n            params = list(range(len(m.params_type)))\n\n        paramdecls = []\n        for ptype, name in zip(m.params_type, params):\n            t = self.parse_descriptor(ptype)\n            v = self.local('p{}'.format(name))\n            paramdecls.append(self.var_decl(t, v))\n\n        if self.graph is None:\n            body = None\n        else:\n            with self as body:\n                self.visit_node(self.graph.entry)\n\n        return {\n            'triple': m.triple,\n            'flags': flags,\n            'ret': self.parse_descriptor(m.type),\n            'params': paramdecls,\n            'comments': [],\n            'body': body,\n        }\n\n    def _visit_condition(self, cond):\n        if cond.isnot:\n            cond.cond1.neg()\n        left = self.parenthesis(self.get_cond(cond.cond1))\n        right = self.parenthesis(self.get_cond(cond.cond2))\n        op = '&&' if cond.isand else '||'\n        res = self.binary_infix(op, left, right)\n        return res\n\n    def get_cond(self, node):\n        if isinstance(node, basic_blocks.ShortCircuitBlock):\n            return self._visit_condition(node.cond)\n        elif isinstance(node, basic_blocks.LoopBlock):\n            return self.get_cond(node.cond)\n        else:\n            assert type(node) == basic_blocks.CondBlock\n            assert len(node.ins) == 1\n            return self.visit_expr(node.ins[-1])\n\n    def visit_node(self, node):\n        if node in (\n            self.if_follow[-1],\n            self.switch_follow[-1],\n            self.loop_follow[-1],\n            self.latch_node[-1],\n            self.try_follow[-1],\n        ):\n            return\n        if not node.type.is_return and node in self.visited_nodes:\n            return\n        self.visited_nodes.add(node)\n        for var in node.var_to_declare:\n            if not var.declared:\n                self.add(self.visit_decl(var))\n            var.declared = True\n        node.visit(self)\n\n    def visit_loop_node(self, loop):\n        isDo = cond_expr = body = None\n\n        follow = loop.follow['loop']\n        if loop.looptype.is_pretest:\n            if loop.true is follow:\n                loop.neg()\n                loop.true, loop.false = loop.false, loop.true\n            isDo = False\n            cond_expr = self.get_cond(loop)\n\n        elif loop.looptype.is_posttest:\n            isDo = True\n            self.latch_node.append(loop.latch)\n\n        elif loop.looptype.is_endless:\n            isDo = False\n            cond_expr = self.literal_bool(True)\n\n        with self as body:\n            self.loop_follow.append(follow)\n            if loop.looptype.is_pretest:\n                self.visit_node(loop.true)\n            else:\n                self.visit_node(loop.cond)\n            self.loop_follow.pop()\n\n            if loop.looptype.is_pretest:\n                pass\n            elif loop.looptype.is_posttest:\n                self.latch_node.pop()\n                cond_expr = self.get_cond(loop.latch)\n            else:\n                self.visit_node(loop.latch)\n\n        assert cond_expr is not None and isDo is not None\n        self.add(self.loop_stmt(isDo, cond_expr, body))\n        if follow is not None:\n            self.visit_node(follow)\n\n    def visit_cond_node(self, cond):\n        cond_expr = None\n        scopes = []\n\n        follow = cond.follow['if']\n        if cond.false is cond.true:\n            self.add(self.expression_stmt(self.get_cond(cond)))\n            self.visit_node(cond.true)\n            return\n\n        if cond.false is self.loop_follow[-1]:\n            cond.neg()\n            cond.true, cond.false = cond.false, cond.true\n\n        if self.loop_follow[-1] in (cond.true, cond.false):\n            cond_expr = self.get_cond(cond)\n            with self as scope:\n                self.add(self.jump_stmt('break'))\n            scopes.append(scope)\n\n            with self as scope:\n                self.visit_node(cond.false)\n            scopes.append(scope)\n\n            self.add(self.if_stmt(cond_expr, scopes))\n        elif follow is not None:\n            if (\n                cond.true in (follow, self.next_case)\n                or cond.num > cond.true.num\n            ):\n                # or cond.true.num > cond.false.num:\n                cond.neg()\n                cond.true, cond.false = cond.false, cond.true\n            self.if_follow.append(follow)\n            if cond.true:  # in self.visited_nodes:\n                cond_expr = self.get_cond(cond)\n                with self as scope:\n                    self.visit_node(cond.true)\n                scopes.append(scope)\n\n            is_else = not (follow in (cond.true, cond.false))\n            if is_else and cond.false not in self.visited_nodes:\n                with self as scope:\n                    self.visit_node(cond.false)\n                scopes.append(scope)\n            self.if_follow.pop()\n\n            self.add(self.if_stmt(cond_expr, scopes))\n            self.visit_node(follow)\n        else:\n            cond_expr = self.get_cond(cond)\n            with self as scope:\n                self.visit_node(cond.true)\n            scopes.append(scope)\n\n            with self as scope:\n                self.visit_node(cond.false)\n            scopes.append(scope)\n            self.add(self.if_stmt(cond_expr, scopes))\n\n    def visit_switch_node(self, switch):\n        lins = switch.get_ins()\n        for ins in lins[:-1]:\n            self.visit_ins(ins)\n        switch_ins = switch.get_ins()[-1]\n\n        cond_expr = self.visit_expr(switch_ins)\n        ksv_pairs = []\n\n        follow = switch.follow['switch']\n        cases = switch.cases\n        self.switch_follow.append(follow)\n        default = switch.default\n        for i, node in enumerate(cases):\n            if node in self.visited_nodes:\n                continue\n\n            cur_ks = switch.node_to_case[node][:]\n            if i + 1 < len(cases):\n                self.next_case = cases[i + 1]\n            else:\n                self.next_case = None\n\n            if node is default:\n                cur_ks.append(None)\n                default = None\n\n            with self as body:\n                self.visit_node(node)\n                if self.need_break:\n                    self.add(self.jump_stmt('break'))\n                else:\n                    self.need_break = True\n            ksv_pairs.append((cur_ks, body))\n\n        if default not in (None, follow):\n            with self as body:\n                self.visit_node(default)\n            ksv_pairs.append(([None], body))\n\n        self.add(self.switch_stmt(cond_expr, ksv_pairs))\n        self.switch_follow.pop()\n        self.visit_node(follow)\n\n    def visit_statement_node(self, stmt):\n        sucs = self.graph.sucs(stmt)\n        for ins in stmt.get_ins():\n            self.visit_ins(ins)\n        if len(sucs) == 1:\n            if sucs[0] is self.loop_follow[-1]:\n                self.add(self.jump_stmt('break'))\n            elif sucs[0] is self.next_case:\n                self.need_break = False\n            else:\n                self.visit_node(sucs[0])\n\n    def visit_try_node(self, try_node):\n        with self as tryb:\n            self.try_follow.append(try_node.follow)\n            self.visit_node(try_node.try_start)\n\n        pairs = []\n        for catch_node in try_node.catch:\n            if catch_node.exception_ins:\n                ins = catch_node.exception_ins\n                assert isinstance(ins, instruction.MoveExceptionExpression)\n                var = ins.var_map[ins.ref]\n                var.declared = True\n\n                ctype = var.get_type()\n                name = 'v{}'.format(var.name)\n            else:\n                ctype = catch_node.catch_type\n                name = '_'\n            catch_decl = self.var_decl(\n                self.parse_descriptor(ctype), self.local(name)\n            )\n\n            with self as body:\n                self.visit_node(catch_node.catch_start)\n            pairs.append((catch_decl, body))\n\n        self.add(self.try_stmt(tryb, pairs))\n        self.visit_node(self.try_follow.pop())\n\n    def visit_return_node(self, ret):\n        self.need_break = False\n        for ins in ret.get_ins():\n            self.visit_ins(ins)\n\n    def visit_throw_node(self, throw):\n        for ins in throw.get_ins():\n            self.visit_ins(ins)\n\n    def _visit_ins(self, op, isCtor=False):\n        if isinstance(op, instruction.ReturnInstruction):\n            expr = (\n                None if op.arg is None else self.visit_expr(op.var_map[op.arg])\n            )\n            return self.return_stmt(expr)\n        elif isinstance(op, instruction.ThrowExpression):\n            return self.throw_stmt(self.visit_expr(op.var_map[op.ref]))\n        elif isinstance(op, instruction.NopExpression):\n            return None\n\n        # Local var decl statements\n        if isinstance(\n            op,\n            (\n                instruction.AssignExpression,\n                instruction.MoveExpression,\n                instruction.MoveResultExpression,\n            ),\n        ):\n            lhs = op.var_map.get(op.lhs)\n            rhs = (\n                op.rhs\n                if isinstance(op, instruction.AssignExpression)\n                else op.var_map.get(op.rhs)\n            )\n            if isinstance(lhs, instruction.Variable) and not lhs.declared:\n                lhs.declared = True\n                expr = self.visit_expr(rhs)\n                return self.visit_decl(lhs, expr)\n\n        # skip this() at top of constructors\n        if isCtor and isinstance(op, instruction.AssignExpression):\n            op2 = op.rhs\n            if op.lhs is None and isinstance(\n                op2, instruction.InvokeInstruction\n            ):\n                if op2.name == '<init>' and len(op2.args) == 0:\n                    if isinstance(\n                        op2.var_map[op2.base], instruction.ThisParam\n                    ):\n                        return None\n\n        # MoveExpression is skipped when lhs = rhs\n        if isinstance(op, instruction.MoveExpression):\n            if op.var_map.get(op.lhs) is op.var_map.get(op.rhs):\n                return None\n\n        return self.expression_stmt(self.visit_expr(op))\n\n    def write_inplace_if_possible(self, lhs, rhs):\n        if (\n            isinstance(rhs, instruction.BinaryExpression)\n            and lhs == rhs.var_map[rhs.arg1]\n        ):\n            exp_rhs = rhs.var_map[rhs.arg2]\n            # post increment/decrement\n            if (\n                rhs.op in '+-'\n                and isinstance(exp_rhs, instruction.Constant)\n                and exp_rhs.get_int_value() == 1\n            ):\n                return self.unary_postfix(self.visit_expr(lhs), rhs.op * 2)\n            # compound assignment\n            return self.assignment(\n                self.visit_expr(lhs), self.visit_expr(exp_rhs), op=rhs.op\n            )\n        return self.assignment(self.visit_expr(lhs), self.visit_expr(rhs))\n\n    def visit_expr(self, op):\n        if isinstance(op, instruction.ArrayLengthExpression):\n            expr = self.visit_expr(op.var_map[op.array])\n            return self.field_access([None, 'length', None], expr)\n        if isinstance(op, instruction.ArrayLoadExpression):\n            array_expr = self.visit_expr(op.var_map[op.array])\n            index_expr = self.visit_expr(op.var_map[op.idx])\n            return self.array_access(array_expr, index_expr)\n        if isinstance(op, instruction.ArrayStoreInstruction):\n            array_expr = self.visit_expr(op.var_map[op.array])\n            index_expr = self.visit_expr(op.var_map[op.index])\n            rhs = self.visit_expr(op.var_map[op.rhs])\n            return self.assignment(\n                self.array_access(array_expr, index_expr), rhs\n            )\n\n        if isinstance(op, instruction.AssignExpression):\n            lhs = op.var_map.get(op.lhs)\n            rhs = op.rhs\n            if lhs is None:\n                return self.visit_expr(rhs)\n            return self.write_inplace_if_possible(lhs, rhs)\n\n        if isinstance(op, instruction.BaseClass):\n            if op.clsdesc is None:\n                assert op.cls == \"super\"\n                return self.local(op.cls)\n            return self.parse_descriptor(op.clsdesc)\n        if isinstance(op, instruction.BinaryExpression):\n            lhs = op.var_map.get(op.arg1)\n            rhs = op.var_map.get(op.arg2)\n            expr = self.binary_infix(\n                op.op, self.visit_expr(lhs), self.visit_expr(rhs)\n            )\n            if not isinstance(op, instruction.BinaryCompExpression):\n                expr = self.parenthesis(expr)\n            return expr\n\n        if isinstance(op, instruction.CheckCastExpression):\n            lhs = op.var_map.get(op.arg)\n            return self.parenthesis(\n                self.cast(\n                    self.parse_descriptor(op.clsdesc), self.visit_expr(lhs)\n                )\n            )\n        if isinstance(op, instruction.ConditionalExpression):\n            lhs = op.var_map.get(op.arg1)\n            rhs = op.var_map.get(op.arg2)\n            return self.binary_infix(\n                op.op, self.visit_expr(lhs), self.visit_expr(rhs)\n            )\n        if isinstance(op, instruction.ConditionalZExpression):\n            arg = op.var_map[op.arg]\n            if isinstance(arg, instruction.BinaryCompExpression):\n                arg.op = op.op\n                return self.visit_expr(arg)\n\n            expr = self.visit_expr(arg)\n            atype = str(arg.get_type())\n            if atype == 'Z':\n                if op.op == opcode_ins.Op.EQUAL:\n                    expr = self.unary_prefix('!', expr)\n            elif atype in 'VBSCIJFD':\n                expr = self.binary_infix(op.op, expr, self.literal_int(0))\n            else:\n                expr = self.binary_infix(op.op, expr, self.literal_null())\n            return expr\n\n        if isinstance(op, instruction.Constant):\n            if op.type == 'Ljava/lang/String;':\n                return self.literal_string(op.cst)\n            elif op.type == 'Z':\n                return self.literal_bool(op.cst == 0)\n            elif op.type in 'ISCB':\n                return self.literal_int(op.cst2)\n            elif op.type in 'J':\n                return self.literal_long(op.cst2)\n            elif op.type in 'F':\n                return self.literal_float(op.cst)\n            elif op.type in 'D':\n                return self.literal_double(op.cst)\n            elif op.type == 'Ljava/lang/Class;':\n                return self.literal_class(op.clsdesc)\n            return self.dummy('??? Unexpected constant: ' + str(op.type))\n\n        if isinstance(op, instruction.FillArrayExpression):\n            array_expr = self.visit_expr(op.var_map[op.reg])\n            rhs = self.visit_arr_data(op.value)\n            return self.assignment(array_expr, rhs)\n        if isinstance(op, instruction.FilledArrayExpression):\n            tn = self.parse_descriptor(op.type)\n            params = [self.visit_expr(op.var_map[x]) for x in op.args]\n            return self.array_initializer(params, tn)\n        if isinstance(op, instruction.InstanceExpression):\n            triple = op.clsdesc[1:-1], op.name, op.ftype\n            expr = self.visit_expr(op.var_map[op.arg])\n            return self.field_access(triple, expr)\n        if isinstance(op, instruction.InstanceInstruction):\n            triple = op.clsdesc[1:-1], op.name, op.atype\n            lhs = self.field_access(\n                triple, self.visit_expr(op.var_map[op.lhs])\n            )\n            rhs = self.visit_expr(op.var_map[op.rhs])\n            return self.assignment(lhs, rhs)\n\n        if isinstance(op, instruction.InvokeInstruction):\n            base = op.var_map[op.base]\n            params = [op.var_map[arg] for arg in op.args]\n            params = list(map(self.visit_expr, params))\n            if op.name == '<init>':\n                if isinstance(base, instruction.ThisParam):\n                    keyword = (\n                        'this' if base.type[1:-1] == op.triple[0] else 'super'\n                    )\n                    return self.method_invocation(\n                        op.triple, keyword, None, params\n                    )\n                elif isinstance(base, instruction.NewInstance):\n                    return [\n                        'ClassInstanceCreation',\n                        op.triple,\n                        params,\n                        self.parse_descriptor(base.type),\n                    ]\n                else:\n                    assert isinstance(base, instruction.Variable)\n                    # fallthrough to create dummy <init> call\n            return self.method_invocation(\n                op.triple, op.name, self.visit_expr(base), params\n            )\n        # for unmatched monitor instructions, just create dummy expressions\n        if isinstance(op, instruction.MonitorEnterExpression):\n            return self.dummy(\n                \"monitor enter(\", self.visit_expr(op.var_map[op.ref]), \")\"\n            )\n        if isinstance(op, instruction.MonitorExitExpression):\n            return self.dummy(\n                \"monitor exit(\", self.visit_expr(op.var_map[op.ref]), \")\"\n            )\n        if isinstance(op, instruction.MoveExpression):\n            lhs = op.var_map.get(op.lhs)\n            rhs = op.var_map.get(op.rhs)\n            return self.write_inplace_if_possible(lhs, rhs)\n        if isinstance(op, instruction.MoveResultExpression):\n            lhs = op.var_map.get(op.lhs)\n            rhs = op.var_map.get(op.rhs)\n            return self.assignment(self.visit_expr(lhs), self.visit_expr(rhs))\n        if isinstance(op, instruction.NewArrayExpression):\n            tn = self.parse_descriptor(op.type[1:])\n            expr = self.visit_expr(op.var_map[op.size])\n            return self.array_creation(tn, [expr], 1)\n        # create dummy expression for unmatched newinstance\n        if isinstance(op, instruction.NewInstance):\n            return self.dummy(\"new \", self.parse_descriptor(op.type))\n        if isinstance(op, instruction.Param):\n            if isinstance(op, instruction.ThisParam):\n                return self.local('this')\n            return self.local('p{}'.format(op.v))\n        if isinstance(op, instruction.StaticExpression):\n            triple = op.clsdesc[1:-1], op.name, op.ftype\n            return self.field_access(triple, self.parse_descriptor(op.clsdesc))\n        if isinstance(op, instruction.StaticInstruction):\n            triple = op.clsdesc[1:-1], op.name, op.ftype\n            lhs = self.field_access(triple, self.parse_descriptor(op.clsdesc))\n            rhs = self.visit_expr(op.var_map[op.rhs])\n            return self.assignment(lhs, rhs)\n        if isinstance(op, instruction.SwitchExpression):\n            return self.visit_expr(op.var_map[op.src])\n        if isinstance(op, instruction.UnaryExpression):\n            lhs = op.var_map.get(op.arg)\n            if isinstance(op, instruction.CastExpression):\n                expr = self.cast(\n                    self.parse_descriptor(op.clsdesc), self.visit_expr(lhs)\n                )\n            else:\n                expr = self.unary_prefix(op.op, self.visit_expr(lhs))\n            return self.parenthesis(expr)\n        if isinstance(op, instruction.Variable):\n            # assert(op.declared)\n            return self.local('v{}'.format(op.name))\n        return self.dummy('??? Unexpected op: ' + type(op).__name__)\n\n    def visit_arr_data(self, value):\n        data = value.get_data()\n        tab = []\n        elem_size = value.element_width\n        if elem_size == 4:\n            for i in range(0, value.size * 4, 4):\n                tab.append(struct.unpack('<i', data[i : i + 4])[0])\n        else:  # FIXME: other cases\n            for i in range(value.size):\n                tab.append(data[i])\n        return self.array_initializer(list(map(self.literal_int, tab)))\n\n    def visit_decl(self, var, init_expr=None):\n        t = self.parse_descriptor(var.get_type())\n        v = self.local('v{}'.format(var.name))\n        return self.local_decl_stmt(init_expr, self.var_decl(t, v))\n\n    @staticmethod\n    def literal_null():\n        return JSONWriter.literal('null', ('.null', 0))\n\n    @staticmethod\n    def literal_double(f):\n        return JSONWriter.literal(str(f), ('.double', 0))\n\n    @staticmethod\n    def literal_float(f):\n        return JSONWriter.literal(str(f) + 'f', ('.float', 0))\n\n    @staticmethod\n    def literal_long(b):\n        return JSONWriter.literal(str(b) + 'L', ('.long', 0))\n\n    @staticmethod\n    def literal_hex_int(b):\n        return JSONWriter.literal(hex(b), ('.int', 0))\n\n    @staticmethod\n    def literal_int(b):\n        return JSONWriter.literal(str(b), ('.int', 0))\n\n    @staticmethod\n    def literal_bool(b):\n        return JSONWriter.literal(str(b).lower(), ('.boolean', 0))\n\n    @staticmethod\n    def literal_class(desc):\n        return JSONWriter.literal(\n            JSONWriter.parse_descriptor(desc), ('java/lang/Class', 0)\n        )\n\n    @staticmethod\n    def literal_string(s):\n        return JSONWriter.literal(str(s), ('java/lang/String', 0))\n\n    @staticmethod\n    def parse_descriptor(desc: str) -> list:\n        dim = 0\n        while desc and desc[0] == '[':\n            desc = desc[1:]\n            dim += 1\n\n        if desc in TYPE_DESCRIPTOR:\n            return JSONWriter.typen('.' + TYPE_DESCRIPTOR[desc], dim)\n        if desc and desc[0] == 'L' and desc[-1] == ';':\n            return JSONWriter.typen(desc[1:-1], dim)\n        # invalid descriptor (probably None)\n        return JSONWriter.dummy(str(desc))\n\n    @staticmethod\n    def _append(sb, stmt):\n        # Add a statement to the end of a statement block\n        assert sb[0] == 'BlockStatement'\n        if stmt is not None:\n            sb[2].append(stmt)\n\n    @staticmethod\n    def statement_block():\n        # Create empty statement block (statements to be appended later)\n        # Note, the code below assumes this can be modified in place\n        return ['BlockStatement', None, []]\n\n    @staticmethod\n    def switch_stmt(cond_expr, ksv_pairs):\n        return ['SwitchStatement', None, cond_expr, ksv_pairs]\n\n    @staticmethod\n    def if_stmt(cond_expr, scopes):\n        return ['IfStatement', None, cond_expr, scopes]\n\n    @staticmethod\n    def try_stmt(tryb, pairs):\n        return ['TryStatement', None, tryb, pairs]\n\n    @staticmethod\n    def loop_stmt(isdo, cond_expr, body):\n        type_ = 'DoStatement' if isdo else 'WhileStatement'\n        return [type_, None, cond_expr, body]\n\n    @staticmethod\n    def jump_stmt(keyword):\n        return ['JumpStatement', keyword, None]\n\n    @staticmethod\n    def throw_stmt(expr):\n        return ['ThrowStatement', expr]\n\n    @staticmethod\n    def return_stmt(expr):\n        return ['ReturnStatement', expr]\n\n    @staticmethod\n    def local_decl_stmt(expr, decl):\n        return ['LocalDeclarationStatement', expr, decl]\n\n    @staticmethod\n    def expression_stmt(expr):\n        return ['ExpressionStatement', expr]\n\n    @staticmethod\n    def dummy(*args):\n        return ['Dummy', args]\n\n    @staticmethod\n    def var_decl(typen, var):\n        return [typen, var]\n\n    @staticmethod\n    def unary_postfix(left, op):\n        return ['Unary', [left], op, True]\n\n    @staticmethod\n    def unary_prefix(op, left):\n        return ['Unary', [left], op, False]\n\n    @staticmethod\n    def typen(baset: str, dim: int) -> list:\n        return ['TypeName', (baset, dim)]\n\n    @staticmethod\n    def parenthesis(expr):\n        return ['Parenthesis', [expr]]\n\n    @staticmethod\n    def method_invocation(triple, name, base, params):\n        if base is None:\n            return ['MethodInvocation', params, triple, name, False]\n        return ['MethodInvocation', [base] + params, triple, name, True]\n\n    @staticmethod\n    def local(name):\n        return ['Local', name]\n\n    @staticmethod\n    def literal(result, tt):\n        return ['Literal', result, tt]\n\n    @staticmethod\n    def field_access(triple, left):\n        return ['FieldAccess', [left], triple]\n\n    @staticmethod\n    def cast(tn, arg):\n        return ['Cast', [tn, arg]]\n\n    @staticmethod\n    def binary_infix(op, left, right):\n        return ['BinaryInfix', [left, right], op]\n\n    @staticmethod\n    def assignment(lhs, rhs, op=''):\n        return ['Assignment', [lhs, rhs], op]\n\n    @staticmethod\n    def array_initializer(params, tn=None):\n        return ['ArrayInitializer', params, tn]\n\n    @staticmethod\n    def array_creation(tn, params, dim):\n        return ['ArrayCreation', [tn] + params, dim]\n\n    @staticmethod\n    def array_access(arr, ind) -> list:\n        return ['ArrayAccess', [arr, ind]]\n"
  },
  {
    "path": "libs/androguard/decompiler/dataflow.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (c) 2012 Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom collections import defaultdict\n\nfrom loguru import logger\n\nfrom androguard.decompiler.instruction import Param, ThisParam, Variable\nfrom androguard.decompiler.node import Node\nfrom androguard.decompiler.util import build_path, common_dom\n\n\nclass BasicReachDef:\n    def __init__(self, graph, params):\n        self.g = graph\n        self.A = defaultdict(set)\n        self.R = defaultdict(set)\n        self.DB = defaultdict(set)\n        self.defs = defaultdict(lambda: defaultdict(set))\n        self.def_to_loc = defaultdict(set)\n        # Deal with special entry node\n        entry = graph.entry\n        self.A[entry] = set(range(-1, -len(params) - 1, -1))\n        for loc, param in enumerate(params, 1):\n            self.defs[entry][param].add(-loc)\n            self.def_to_loc[param].add(-loc)\n        # Deal with the other nodes\n        for node in graph.rpo:\n            for i, ins in node.get_loc_with_ins():\n                kill = ins.get_lhs()\n                if kill is not None:\n                    self.defs[node][kill].add(i)\n                    self.def_to_loc[kill].add(i)\n            for defs, values in self.defs[node].items():\n                self.DB[node].add(max(values))\n\n    def run(self):\n        nodes = list(self.g.rpo)\n        while nodes:\n            node = nodes.pop(0)\n            newR = set()\n            for pred in self.g.all_preds(node):\n                newR.update(self.A[pred])\n            if newR and newR != self.R[node]:\n                self.R[node] = newR\n                for suc in self.g.all_sucs(node):\n                    if suc not in nodes:\n                        nodes.append(suc)\n\n            killed_locs = set()\n            for reg in self.defs[node]:\n                killed_locs.update(self.def_to_loc[reg])\n\n            A = set()\n            for loc in self.R[node]:\n                if loc not in killed_locs:\n                    A.add(loc)\n            newA = A.union(self.DB[node])\n            if newA != self.A[node]:\n                self.A[node] = newA\n                for suc in self.g.all_sucs(node):\n                    if suc not in nodes:\n                        nodes.append(suc)\n\n\ndef update_chain(graph, loc, du, ud):\n    \"\"\"\n    Updates the DU chain of the instruction located at loc such that there is\n    no more reference to it so that we can remove it.\n    When an instruction is found to be dead (i.e it has no side effect, and the\n    register defined is not used) we have to update the DU chain of all the\n    variables that may me used by the dead instruction.\n    \"\"\"\n    ins = graph.get_ins_from_loc(loc)\n    for var in ins.get_used_vars():\n        # We get the definition points of the current variable\n        for def_loc in set(ud[var, loc]):\n            # We remove the use of the variable at loc from the DU chain of\n            # the variable definition located at def_loc\n            du[var, def_loc].remove(loc)\n            ud[var, loc].remove(def_loc)\n            if not ud.get((var, loc)):\n                ud.pop((var, loc))\n            # If the DU chain of the defined variable is now empty, this means\n            # that we may have created a new dead instruction, so we check that\n            # the instruction has no side effect and we update the DU chain of\n            # the new dead instruction, and we delete it.\n            # We also make sure that def_loc is not < 0. This is the case when\n            # the current variable is a method parameter.\n            if def_loc >= 0 and not du[var, def_loc]:\n                du.pop((var, def_loc))\n                def_ins = graph.get_ins_from_loc(def_loc)\n                if def_ins.is_call():\n                    def_ins.remove_defined_var()\n                elif def_ins.has_side_effect():\n                    continue\n                else:\n                    update_chain(graph, def_loc, du, ud)\n                    graph.remove_ins(def_loc)\n\n\ndef dead_code_elimination(graph, du, ud):\n    \"\"\"\n    Run a dead code elimination pass.\n    Instructions are checked to be dead. If it is the case, we remove them and\n    we update the DU & UD chains of its variables to check for further dead\n    instructions.\n    \"\"\"\n    for node in graph.rpo:\n        for i, ins in node.get_loc_with_ins():\n            reg = ins.get_lhs()\n            if reg is not None:\n                # If the definition is not used, we check that the instruction\n                # has no side effect. If there is one and this is a call, we\n                # remove only the unused defined variable. else, this is\n                # something like an array access, so we do nothing.\n                # Otherwise (no side effect) we can remove the instruction from\n                # the node.\n                if (reg, i) not in du:\n                    if ins.is_call():\n                        ins.remove_defined_var()\n                    elif ins.has_side_effect():\n                        continue\n                    else:\n                        # We can delete the instruction. First update the DU\n                        # chain of the variables used by the instruction to\n                        # `let them know` that they are not used anymore by the\n                        # deleted instruction.\n                        # Then remove the instruction.\n                        update_chain(graph, i, du, ud)\n                        graph.remove_ins(i)\n\n\ndef clear_path_node(graph, reg, loc1, loc2):\n    for loc in range(loc1, loc2):\n        ins = graph.get_ins_from_loc(loc)\n        logger.debug('  treat loc: %d, ins: %s', loc, ins)\n        if ins is None:\n            continue\n        logger.debug(\n            '  LHS: %s, side_effect: %s', ins.get_lhs(), ins.has_side_effect()\n        )\n        if ins.get_lhs() == reg or ins.has_side_effect():\n            return False\n    return True\n\n\ndef clear_path(graph, reg, loc1, loc2):\n    \"\"\"\n    Check that the path from loc1 to loc2 is clear.\n    We have to check that there is no side effect between the two location\n    points. We also have to check that the variable `reg` is not redefined\n    along one of the possible pathes from loc1 to loc2.\n    \"\"\"\n    logger.debug('clear_path: reg(%s), loc1(%s), loc2(%s)', reg, loc1, loc2)\n    node1 = graph.get_node_from_loc(loc1)\n    node2 = graph.get_node_from_loc(loc2)\n    # If both instructions are in the same node, we only have to check that the\n    # path is clear inside the node\n    if node1 is node2:\n        return clear_path_node(graph, reg, loc1 + 1, loc2)\n\n    # If instructions are in different nodes, we also have to check the nodes\n    # in the path between the two locations.\n    if not clear_path_node(graph, reg, loc1 + 1, node1.ins_range[1]):\n        return False\n    path = build_path(graph, node1, node2)\n    for node in path:\n        locs = node.ins_range\n        end_loc = loc2 if (locs[0] <= loc2 <= locs[1]) else locs[1]\n        if not clear_path_node(graph, reg, locs[0], end_loc):\n            return False\n    return True\n\n\ndef register_propagation(graph, du, ud):\n    \"\"\"\n    Propagate the temporary registers between instructions and remove them if\n    necessary.\n    We process the nodes of the graph in reverse post order. For each\n    instruction in the node, we look at the variables that it uses. For each of\n    these variables we look where it is defined and if we can replace it with\n    its definition.\n    We have to be careful to the side effects some instructions may have.\n    To do the propagation, we use the computed DU and UD chains.\n    \"\"\"\n    change = True\n    while change:\n        change = False\n        for node in graph.rpo:\n            for i, ins in node.get_loc_with_ins():\n                logger.debug('Treating instruction %d: %s', i, ins)\n                logger.debug('  Used vars: %s', ins.get_used_vars())\n                for var in ins.get_used_vars():\n                    # Get the list of locations this variable is defined at.\n                    locs = ud[var, i]\n                    logger.debug('    var %s defined in lines %s', var, locs)\n                    # If the variable is uniquely defined for this instruction\n                    # it may be eligible for propagation.\n                    if len(locs) != 1:\n                        continue\n\n                    loc = locs[0]\n                    # Methods parameters are defined with a location < 0.\n                    if loc < 0:\n                        continue\n                    orig_ins = graph.get_ins_from_loc(loc)\n                    logger.debug('     -> %s', orig_ins)\n                    logger.debug(\n                        '     -> DU(%s, %s) = %s', var, loc, du[var, loc]\n                    )\n\n                    # We defined some instructions as not propagable.\n                    # Actually this is the case only for array creation\n                    # (new foo[x])\n                    if not orig_ins.is_propagable():\n                        logger.debug('    %s not propagable...', orig_ins)\n                        continue\n\n                    if not orig_ins.get_rhs().is_const():\n                        # We only try to propagate constants and definition\n                        # points which are used at only one location.\n                        if len(du[var, loc]) > 1:\n                            logger.debug(\n                                '       => variable has multiple uses'\n                                ' and is not const => skip'\n                            )\n                            continue\n\n                        # We check that the propagation is safe for all the\n                        # variables that are used in the instruction.\n                        # The propagation is not safe if there is a side effect\n                        # along the path from the definition of the variable\n                        # to its use in the instruction, or if the variable may\n                        # be redifined along this path.\n                        safe = True\n                        orig_ins_used_vars = orig_ins.get_used_vars()\n                        logger.debug(\n                            '    variables used by the original '\n                            'instruction: %s',\n                            orig_ins_used_vars,\n                        )\n                        for var2 in orig_ins_used_vars:\n                            # loc is the location of the defined variable\n                            # i is the location of the current instruction\n                            if not clear_path(graph, var2, loc, i):\n                                safe = False\n                                break\n                        if not safe:\n                            logger.debug('Propagation NOT SAFE')\n                            continue\n\n                    # We also check that the instruction itself is\n                    # propagable. If the instruction has a side effect it\n                    # cannot be propagated if there is another side effect\n                    # along the path\n                    if orig_ins.has_side_effect():\n                        if not clear_path(graph, None, loc, i):\n                            logger.debug(\n                                '        %s has side effect and the '\n                                'path is not clear !',\n                                orig_ins,\n                            )\n                            continue\n\n                    logger.debug('     => Modification of the instruction!')\n                    logger.debug('      - BEFORE: %s', ins)\n                    ins.replace(var, orig_ins.get_rhs())\n                    logger.debug('      -> AFTER: %s', ins)\n                    logger.debug('\\t UD(%s, %s) : %s', var, i, ud[var, i])\n                    ud[var, i].remove(loc)\n                    logger.debug('\\t    -> %s', ud[var, i])\n                    if len(ud[var, i]) == 0:\n                        ud.pop((var, i))\n                    for var2 in orig_ins.get_used_vars():\n                        # We update the UD chain of the variables we\n                        # propagate. We also have to take the\n                        # definition points of all the variables used\n                        # by the instruction and update the DU chain\n                        # with this information.\n                        old_ud = ud.get((var2, loc))\n                        logger.debug('\\t  ud(%s, %s) = %s', var2, loc, old_ud)\n                        # If the instruction use the same variable\n                        # multiple times, the second+ time the ud chain\n                        # will be None because already treated.\n                        if old_ud is None:\n                            continue\n                        ud[var2, i].extend(old_ud)\n                        logger.debug(\n                            '\\t  - ud(%s, %s) = %s', var2, i, ud[var2, i]\n                        )\n                        ud.pop((var2, loc))\n\n                        for def_loc in old_ud:\n                            du[var2, def_loc].remove(loc)\n                            du[var2, def_loc].append(i)\n\n                    new_du = du[var, loc]\n                    logger.debug('\\t new_du(%s, %s): %s', var, loc, new_du)\n                    new_du.remove(i)\n                    logger.debug('\\t    -> %s', new_du)\n                    if not new_du:\n                        logger.debug('\\t  REMOVING INS %d', loc)\n                        du.pop((var, loc))\n                        graph.remove_ins(loc)\n                        change = True\n\n\nclass DummyNode(Node):\n    def __init__(self, name):\n        super().__init__(name)\n\n    def get_loc_with_ins(self):\n        return []\n\n    def __repr__(self):\n        return '%s-dumnode' % self.name\n\n    def __str__(self):\n        return '%s-dummynode' % self.name\n\n\ndef group_variables(lvars, DU, UD):\n    treated = defaultdict(list)\n    variables = defaultdict(list)\n    # FIXME\n    for var, loc in sorted(DU, key=lambda x: (str(x[0]), str(x[1]))):\n        if var not in lvars:\n            continue\n        if loc in treated[var]:\n            continue\n        defs = [loc]\n        uses = set(DU[var, loc])\n        change = True\n        while change:\n            change = False\n            for use in uses:\n                ldefs = UD[var, use]\n                for ldef in ldefs:\n                    if ldef not in defs:\n                        defs.append(ldef)\n                        change = True\n            for ldef in defs[1:]:\n                luses = set(DU[var, ldef])\n                for use in luses:\n                    if use not in uses:\n                        uses.add(use)\n                        change = True\n        treated[var].extend(defs)\n        variables[var].append((defs, list(uses)))\n    return variables\n\n\ndef split_variables(graph, lvars, DU, UD):\n    variables = group_variables(lvars, DU, UD)\n\n    if lvars:\n        nb_vars = max(lvars) + 1\n    else:\n        nb_vars = 0\n    for var, versions in variables.items():\n        nversions = len(versions)\n        if nversions == 1:\n            continue\n        orig_var = lvars.pop(var)\n        for i, (defs, uses) in enumerate(versions):\n            if min(defs) < 0:  # Param\n                if orig_var.this:\n                    new_version = ThisParam(var, orig_var.type)\n                else:\n                    new_version = Param(var, orig_var.type)\n                lvars[var] = new_version\n            else:\n                new_version = Variable(nb_vars)\n                new_version.type = orig_var.type\n                lvars[nb_vars] = new_version  # add new version to variables\n                nb_vars += 1\n            new_version.name = '%d_%d' % (var, i)\n\n            for loc in defs:\n                if loc < 0:\n                    continue\n                ins = graph.get_ins_from_loc(loc)\n                ins.replace_lhs(new_version)\n                DU[(new_version.value(), loc)] = DU.pop((var, loc))\n            for loc in uses:\n                ins = graph.get_ins_from_loc(loc)\n                ins.replace_var(var, new_version)\n                UD[(new_version.value(), loc)] = UD.pop((var, loc))\n\n\ndef reach_def_analysis(graph, lparams):\n    # We insert two special nodes : entry & exit, to the graph.\n    # This is done to simplify the reaching definition analysis.\n    old_entry = graph.entry\n    old_exit = graph.exit\n    new_entry = DummyNode('entry')\n    graph.add_node(new_entry)\n    graph.add_edge(new_entry, old_entry)\n    graph.entry = new_entry\n    if old_exit:\n        new_exit = DummyNode('exit')\n        graph.add_node(new_exit)\n        graph.add_edge(old_exit, new_exit)\n        graph.rpo.append(new_exit)\n\n    analysis = BasicReachDef(graph, lparams)\n    analysis.run()\n\n    # The analysis is done, We can now remove the two special nodes.\n    graph.remove_node(new_entry)\n    if old_exit:\n        graph.remove_node(new_exit)\n    graph.entry = old_entry\n    return analysis\n\n\ndef build_def_use(graph, lparams):\n    \"\"\"\n    Builds the Def-Use and Use-Def (DU/UD) chains of the variables of the\n    method.\n    \"\"\"\n    analysis = reach_def_analysis(graph, lparams)\n\n    UD = defaultdict(list)\n    for node in graph.rpo:\n        for i, ins in node.get_loc_with_ins():\n            for var in ins.get_used_vars():\n                # var not in analysis.def_to_loc: test that the register\n                # exists. It is possible that it is not the case, when a\n                # variable is of a type which is stored on multiple registers\n                # e.g: a 'double' stored in v3 is also present in v4, so a call\n                # to foo(v3), will in fact call foo(v3, v4).\n                if var not in analysis.def_to_loc:\n                    continue\n                ldefs = analysis.defs[node]\n                prior_def = -1\n                for v in ldefs.get(var, set()):\n                    if prior_def < v < i:\n                        prior_def = v\n                if prior_def >= 0:\n                    UD[var, i].append(prior_def)\n                else:\n                    intersect = analysis.def_to_loc[var].intersection(\n                        analysis.R[node]\n                    )\n                    UD[var, i].extend(intersect)\n    DU = defaultdict(list)\n    for var_loc, defs_loc in UD.items():\n        var, loc = var_loc\n        for def_loc in defs_loc:\n            DU[var, def_loc].append(loc)\n\n    return UD, DU\n\n\ndef place_declarations(graph, dvars, du, ud):\n    idom = graph.immediate_dominators()\n    for node in graph.post_order():\n        for loc, ins in node.get_loc_with_ins():\n            for var in ins.get_used_vars():\n                if not isinstance(dvars[var], Variable) or isinstance(\n                    dvars[var], Param\n                ):\n                    continue\n                var_defs_locs = ud[var, loc]\n                def_nodes = set()\n                for def_loc in var_defs_locs:\n                    def_node = graph.get_node_from_loc(def_loc)\n                    # TODO: place declarations in catch if needed\n                    if def_node.in_catch:\n                        continue\n                    def_nodes.add(def_node)\n                if not def_nodes:\n                    continue\n                common_dominator = def_nodes.pop()\n                for def_node in def_nodes:\n                    common_dominator = common_dom(\n                        idom, common_dominator, def_node\n                    )\n                if any(\n                    var in range(*common_dominator.ins_range)\n                    for var in ud[var, loc]\n                ):\n                    continue\n                common_dominator.add_variable_declaration(dvars[var])\n"
  },
  {
    "path": "libs/androguard/decompiler/decompile.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (c) 2012 Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    from androguard.core.analysis.analysis import Analysis, MethodAnalysis\n    from androguard.core.dex import EncodedField\n\nimport struct\nimport sys\nfrom collections import defaultdict\n\nfrom loguru import logger\n\nimport androguard.core.androconf as androconf\nimport androguard.decompiler.util as util\nfrom androguard.core import apk, dex\nfrom androguard.core.analysis import analysis\nfrom androguard.decompiler.control_flow import identify_structures\nfrom androguard.decompiler.dast import JSONWriter\nfrom androguard.decompiler.dataflow import (\n    build_def_use,\n    dead_code_elimination,\n    place_declarations,\n    register_propagation,\n    split_variables,\n)\nfrom androguard.decompiler.graph import construct, simplify, split_if_nodes\nfrom androguard.decompiler.instruction import Param, ThisParam\nfrom androguard.decompiler.writer import Writer\nfrom androguard.util import readFile\n\nlogger.add(\n    sys.stderr, format=\"{time} {level} {message}\", filter=\"dad\", level=\"INFO\"\n)\n\n\n# No seperate DvField class currently\ndef get_field_ast(field: EncodedField) -> dict:\n    triple = (\n        field.get_class_name()[1:-1],\n        field.get_name(),\n        field.get_descriptor(),\n    )\n\n    expr = None\n    if field.init_value:\n        val = field.init_value.value\n        expr = JSONWriter.dummy(str(val))\n\n        if val is not None:\n            if field.get_descriptor() == 'Ljava/lang/String;':\n                expr = JSONWriter.literal_string(val)\n            elif field.proto == 'B':\n                expr = JSONWriter.literal_hex_int(\n                    struct.unpack('<b', struct.pack(\"B\", val))[0]\n                )\n\n    return {\n        'triple': triple,\n        'type': JSONWriter.parse_descriptor(field.get_descriptor()),\n        'flags': util.get_access_field(field.get_access_flags()),\n        'expr': expr,\n    }\n\n\nclass DvMethod:\n    \"\"\"\n    This is a wrapper around :class:`~androguard.core.analysis.analysis.MethodAnalysis` and\n    :class:`~androguard.core.dex.EncodedMethod` inside the decompiler.\n\n    :param androguard.core.analysis.analysis.MethodAnalysis methanalysis:\n    \"\"\"\n\n    def __init__(self, methanalysis: MethodAnalysis) -> None:\n        method = methanalysis.get_method()\n        self.method = method\n        self.start_block = next(methanalysis.get_basic_blocks().get(), None)\n        self.cls_name = method.get_class_name()\n        self.name = method.get_name()\n        self.lparams = []\n        self.var_to_name = defaultdict()\n        self.writer = None\n        self.graph = None\n        self.ast = None\n\n        self.access = util.get_access_method(method.get_access_flags())\n\n        desc = method.get_descriptor()\n        self.type = desc.split(')')[-1]\n        self.params_type = util.get_params_type(desc)\n        self.triple = method.get_triple()\n\n        self.exceptions = methanalysis.exceptions.exceptions\n\n        code = method.get_code()\n        if code is None:\n            logger.debug('No code : %s %s', self.name, self.cls_name)\n        else:\n            start = code.registers_size - code.ins_size\n            if 'static' not in self.access:\n                self.var_to_name[start] = ThisParam(start, self.cls_name)\n                self.lparams.append(start)\n                start += 1\n            num_param = 0\n            for ptype in self.params_type:\n                param = start + num_param\n                self.lparams.append(param)\n                self.var_to_name[param] = Param(param, ptype)\n                num_param += util.get_type_size(ptype)\n\n        if not __debug__:\n            from androguard.core import bytecode\n\n            # TODO: use tempfile to create a correct tempfile (cross platform compatible)\n            bytecode.method2png(\n                '/tmp/dad/graphs/{}#{}.png'.format(\n                    self.cls_name.split('/')[-1][:-1], self.name\n                ),\n                methanalysis,\n            )\n\n    def process(self, doAST: bool = False) -> None:\n        \"\"\"\n        Processes the method and decompile the code.\n\n        There are two modes of operation:\n\n        1) Normal Decompilation to Java Code\n        2) Decompilation into an abstract syntax tree (AST)\n\n        The Decompilation is done twice. First, a rough decompilation is created,\n        which is then optimized. Second, the optimized version is used to create the final version.\n\n        :param doAST: generate AST instead of Java Code\n        \"\"\"\n        logger.debug('METHOD : %s', self.name)\n\n        # Native methods... no blocks.\n        if self.start_block is None:\n            logger.debug('Native Method.')\n            if doAST:\n                self.ast = JSONWriter(None, self).get_ast()\n            else:\n                self.writer = Writer(None, self)\n                self.writer.write_method()\n            return\n\n        # Construct the CFG\n        graph = construct(self.start_block, self.var_to_name, self.exceptions)\n        self.graph = graph\n\n        if not __debug__:\n            # TODO: use tempfile to create a correct tempfile (cross platform compatible)\n            util.create_png(self.cls_name, self.name, graph, '/tmp/dad/blocks')\n\n        use_defs, def_uses = build_def_use(graph, self.lparams)\n        split_variables(graph, self.var_to_name, def_uses, use_defs)\n        dead_code_elimination(graph, def_uses, use_defs)\n        register_propagation(graph, def_uses, use_defs)\n\n        # FIXME var_to_name need to contain the created tmp variables.\n        # This seems to be a workaround, we add them into the list manually\n        for var, i in def_uses:\n            if not isinstance(var, int):\n                self.var_to_name[var] = var.upper()\n\n        place_declarations(graph, self.var_to_name, def_uses, use_defs)\n        del def_uses, use_defs\n        # After the DCE pass, some nodes may be empty, so we can simplify the\n        # graph to delete these nodes.\n        # We start by restructuring the graph by spliting the conditional nodes\n        # into a pre-header and a header part.\n        split_if_nodes(graph)\n        # We then simplify the graph by merging multiple statement nodes into\n        # a single statement node when possible. This also delete empty nodes.\n\n        simplify(graph)\n        graph.compute_rpo()\n\n        if not __debug__:\n            # TODO: use tempfile to create a correct tempfile (cross platform compatible)\n            util.create_png(\n                self.cls_name, self.name, graph, '/tmp/dad/pre-structured'\n            )\n\n        identify_structures(graph, graph.immediate_dominators())\n\n        if not __debug__:\n            # TODO: use tempfile to create a correct tempfile (cross platform compatible)\n            util.create_png(\n                self.cls_name, self.name, graph, '/tmp/dad/structured'\n            )\n\n        if doAST:\n            self.ast = JSONWriter(graph, self).get_ast()\n        else:\n            self.writer = Writer(graph, self)\n            self.writer.write_method()\n\n    def get_ast(self) -> dict:\n        \"\"\"\n        Returns the AST, if previously was generated by calling :meth:`process` with argument :code:`doAST=True`.\n\n        The AST is a :class:`dict` with the following keys:\n\n        * triple\n        * flags\n        * ret\n        * params\n        * comments\n        * body\n\n        The actual AST for the method is in the :code:`body`.\n\n        :return: dict\n        \"\"\"\n        return self.ast\n\n    def show_source(self) -> None:\n        print(self.get_source())\n\n    def get_source(self) -> str:\n        if self.writer:\n            return str(self.writer)\n        return ''\n\n    def get_source_ext(self) -> list[tuple]:\n        if self.writer:\n            return self.writer.str_ext()\n        return []\n\n    def __repr__(self):\n        # return 'Method %s' % self.name\n        return '<class DvMethod(object): %s>' % self.name\n\n\nclass DvClass:\n    \"\"\"\n    This is a wrapper for :class:`~androguard.core.bytecodes.dvm.ClassDefItem` inside the decompiler.\n\n    At first, :py:attr:`methods` contains a list of :class:`~androguard.core.dex.EncodedMethod`,\n    which are successively replaced by :class:`DvMethod` in the process of decompilation.\n\n    :param androguard.core.dex.ClassDefItem dvclass: the class item\n    :param androguard.core.analysis.analysis.Analysis vma: an Analysis object\n    \"\"\"\n\n    def __init__(\n        self, dvclass: dex.ClassDefItem, vma: analysis.Analysis\n    ) -> None:\n        name = dvclass.get_name()\n        if name.find('/') > 0:\n            pckg, name = name.rsplit('/', 1)\n        else:\n            pckg, name = '', name\n        self.package = pckg[1:].replace('/', '.')\n        self.name = name[:-1]\n\n        self.vma = vma\n        self.methods = dvclass.get_methods()\n        self.fields = dvclass.get_fields()\n        self.code = []\n        self.inner = False\n\n        access = dvclass.get_access_flags()\n        # If interface we remove the class and abstract keywords\n        if 0x200 & access:\n            prototype = '%s %s'\n            if access & 0x400:\n                access -= 0x400\n        else:\n            prototype = '%s class %s'\n\n        self.access = util.get_access_class(access)\n        self.prototype = prototype % (' '.join(self.access), self.name)\n\n        self.interfaces = dvclass.get_interfaces()\n        self.superclass = dvclass.get_superclassname()\n        self.thisclass = dvclass.get_name()\n\n        logger.debug('Class : %s', self.name)\n        logger.debug('Methods added :')\n        for meth in self.methods:\n            logger.debug(\n                '%s (%s, %s)', meth.get_method_idx(), self.name, meth.name\n            )\n        logger.debug('')\n\n    def get_methods(self) -> list[dex.EncodedMethod]:\n        return self.methods\n\n    def process_method(self, num: int, doAST: bool = False) -> None:\n        method = self.methods[num]\n        if not isinstance(method, DvMethod):\n            self.methods[num] = DvMethod(self.vma.get_method(method))\n            self.methods[num].process(doAST=doAST)\n        else:\n            method.process(doAST=doAST)\n\n    def process(self, doAST: bool = False) -> None:\n        for i in range(len(self.methods)):\n            try:\n                self.process_method(i, doAST=doAST)\n            except Exception as e:\n                # FIXME: too broad exception?\n                logger.warning(\n                    'Error decompiling method %s: %s', self.methods[i], e\n                )\n\n    def get_ast(self) -> dict:\n        fields = [get_field_ast(f) for f in self.fields]\n        methods = []\n        for m in self.methods:\n            if isinstance(m, DvMethod) and m.ast:\n                methods.append(m.get_ast())\n        isInterface = 'interface' in self.access\n        return {\n            'rawname': self.thisclass[1:-1],\n            'name': JSONWriter.parse_descriptor(self.thisclass),\n            'super': JSONWriter.parse_descriptor(self.superclass),\n            'flags': self.access,\n            'isInterface': isInterface,\n            'interfaces': list(\n                map(JSONWriter.parse_descriptor, self.interfaces)\n            ),\n            'fields': fields,\n            'methods': methods,\n        }\n\n    def get_source(self) -> str:\n        source = []\n        if not self.inner and self.package:\n            source.append('package %s;\\n' % self.package)\n\n        superclass, prototype = self.superclass, self.prototype\n        if superclass is not None and superclass != 'Ljava/lang/Object;':\n            superclass = superclass[1:-1].replace('/', '.')\n            prototype += ' extends %s' % superclass\n\n        if len(self.interfaces) > 0:\n            prototype += ' implements %s' % ', '.join(\n                [str(n[1:-1].replace('/', '.')) for n in self.interfaces]\n            )\n\n        source.append('%s {\\n' % prototype)\n        for field in self.fields:\n            name = field.get_name()\n            access = util.get_access_field(field.get_access_flags())\n            f_type = util.get_type(field.get_descriptor())\n            source.append('    ')\n            if access:\n                source.append(' '.join(access))\n                source.append(' ')\n            init_value = field.get_init_value()\n            if init_value:\n                value = init_value.value\n                if f_type == 'String':\n                    if value:\n                        value = '\"%s\"' % str(value).encode(\n                            \"unicode-escape\"\n                        ).decode(\"ascii\")\n                    else:\n                        # FIXME we can not check if this value here is null or \"\"\n                        # In both cases we end up here...\n                        value = '\"\"'\n                elif field.proto == 'B':\n                    # byte value: convert from unsiged int to signed and print as hex\n                    # as bytes are signed in Java\n                    value = hex(struct.unpack(\"b\", struct.pack(\"B\", value))[0])\n                source.append('{} {} = {};\\n'.format(f_type, name, value))\n            else:\n                source.append('{} {};\\n'.format(f_type, name))\n\n        for method in self.methods:\n            if isinstance(method, DvMethod):\n                source.append(method.get_source())\n\n        source.append('}\\n')\n        return ''.join(source)\n\n    def get_source_ext(self) -> list[tuple[str, list]]:\n        source = []\n        if not self.inner and self.package:\n            source.append(\n                (\n                    'PACKAGE',\n                    [\n                        ('PACKAGE_START', 'package '),\n                        ('NAME_PACKAGE', '%s' % self.package),\n                        ('PACKAGE_END', ';\\n'),\n                    ],\n                )\n            )\n        list_proto = [\n            ('PROTOTYPE_ACCESS', '%s class ' % ' '.join(self.access)),\n            ('NAME_PROTOTYPE', '%s' % self.name, self.package),\n        ]\n        superclass = self.superclass\n        if superclass is not None and superclass != 'Ljava/lang/Object;':\n            superclass = superclass[1:-1].replace('/', '.')\n            list_proto.append(('EXTEND', ' extends '))\n            list_proto.append(('NAME_SUPERCLASS', '%s' % superclass))\n\n        if len(self.interfaces) > 0:\n            list_proto.append(('IMPLEMENTS', ' implements '))\n            for i, interface in enumerate(self.interfaces):\n                if i != 0:\n                    list_proto.append(('COMMA', ', '))\n                list_proto.append(\n                    ('NAME_INTERFACE', interface[1:-1].replace('/', '.'))\n                )\n        list_proto.append(('PROTOTYPE_END', ' {\\n'))\n        source.append((\"PROTOTYPE\", list_proto))\n\n        for field in self.fields:\n            field_access_flags = field.get_access_flags()\n            access = [\n                util.ACCESS_FLAGS_FIELDS[flag]\n                for flag in util.ACCESS_FLAGS_FIELDS\n                if flag & field_access_flags\n            ]\n            f_type = util.get_type(field.get_descriptor())\n            name = field.get_name()\n            if access:\n                access_str = '    %s ' % ' '.join(access)\n            else:\n                access_str = '    '\n\n            value = None\n            init_value = field.get_init_value()\n            if init_value:\n                value = init_value.value\n                if f_type == 'String':\n                    if value:\n                        value = ' = \"%s\"' % value.encode(\n                            \"unicode-escape\"\n                        ).decode(\"ascii\")\n                    else:\n                        # FIXME we can not check if this value here is null or \"\"\n                        # In both cases we end up here...\n                        value = ' = \"\"'\n                elif field.proto == 'B':\n                    # a byte\n                    value = ' = %s' % hex(\n                        struct.unpack(\"b\", struct.pack(\"B\", value))[0]\n                    )\n                else:\n                    value = ' = %s' % str(value)\n            if value:\n                source.append(\n                    (\n                        'FIELD',\n                        [\n                            ('FIELD_ACCESS', access_str),\n                            ('FIELD_TYPE', '%s' % f_type),\n                            ('SPACE', ' '),\n                            ('NAME_FIELD', '%s' % name, f_type, field),\n                            ('FIELD_VALUE', value),\n                            ('FIELD_END', ';\\n'),\n                        ],\n                    )\n                )\n            else:\n                source.append(\n                    (\n                        'FIELD',\n                        [\n                            ('FIELD_ACCESS', access_str),\n                            ('FIELD_TYPE', '%s' % f_type),\n                            ('SPACE', ' '),\n                            ('NAME_FIELD', '%s' % name, f_type, field),\n                            ('FIELD_END', ';\\n'),\n                        ],\n                    )\n                )\n\n        for method in self.methods:\n            if isinstance(method, DvMethod):\n                source.append((\"METHOD\", method.get_source_ext()))\n        source.append((\"CLASS_END\", [('CLASS_END', '}\\n')]))\n        return source\n\n    def show_source(self) -> None:\n        print(self.get_source())\n\n    def __repr__(self):\n        return '<Class(%s)>' % self.name\n\n\nclass DvMachine:\n    \"\"\"\n    Wrapper class for a Dalvik Object, like a DEX or ODEX file.\n\n    The wrapper allows to take a Dalvik file and get a list of Classes out of it.\n    The :class:`~androguard.decompiler.decompile.DvMachine` can take either an APK file directly,\n    where all DEX files from the multidex are used, or a single DEX or ODEX file as an argument.\n\n    At first, :py:attr:`classes` contains only :class:`~androguard.core.dex.ClassDefItem` as values.\n    Then these objects are replaced by :class:`DvClass` items successively.\n    \"\"\"\n\n    def __init__(self, name: str) -> None:\n        \"\"\"\n\n        :param name: filename to load\n        \"\"\"\n        self.vma = analysis.Analysis()\n\n        # Proper detection which supports multidex inside APK\n        ftype = androconf.is_android(name)\n        if ftype == 'APK':\n            for d in apk.APK(name).get_all_dex():\n                self.vma.add(dex.DEX(d))\n        elif ftype == 'DEX':\n            self.vma.add(dex.DEX(readFile(name)))\n        elif ftype == 'DEY':\n            self.vma.add(dex.ODEX(readFile(name)))\n        else:\n            raise ValueError(\"Format not recognised for filename '%s'\" % name)\n\n        self.classes = {\n            dvclass.orig_class.get_name(): dvclass.orig_class\n            for dvclass in self.vma.get_classes()\n        }\n        # TODO why not?\n        # util.merge_inner(self.classes)\n\n    def get_classes(self) -> list[str]:\n        \"\"\"\n        Return a list of classnames contained in this machine.\n        The format of each name is Lxxx;\n\n        :return: list of class names\n        \"\"\"\n        return list(self.classes.keys())\n\n    def get_class(self, class_name: str) -> DvClass:\n        \"\"\"\n        Return the :class:`DvClass` with the given name\n\n        The name is partially matched against the known class names and the first result is returned.\n        For example, the input `foobar` will match on Lfoobar/bla/foo;\n\n        :param str class_name:\n        :return: the class matching on the name\n        :rtype: :class:`DvClass`\n        \"\"\"\n        for name, klass in self.classes.items():\n            # TODO why use the name partially?\n            if class_name in name:\n                if isinstance(klass, DvClass):\n                    return klass\n                dvclass = self.classes[name] = DvClass(klass, self.vma)\n                return dvclass\n\n    def process(self) -> None:\n        \"\"\"\n        Process all classes inside the machine.\n\n        This calls :meth:`~androgaurd.decompiler.decompile.DvClass.process` on each :class:`DvClass`.\n        \"\"\"\n        for name, klass in self.classes.items():\n            logger.debug('Processing class: %s', name)\n            if isinstance(klass, DvClass):\n                klass.process()\n            else:\n                dvclass = self.classes[name] = DvClass(klass, self.vma)\n                dvclass.process()\n\n    def show_source(self) -> None:\n        \"\"\"\n        Calls `show_source` on all classes inside the machine.\n        This prints the source to stdout.\n\n        This calls :meth:`~androgaurd.decompiler.decompile.DvClass.show_source` on each :class:`DvClass`.\n        \"\"\"\n        for klass in self.classes.values():\n            klass.show_source()\n\n    def process_and_show(self) -> None:\n        \"\"\"\n        Run :meth:`process` and :meth:`show_source` after each other.\n        \"\"\"\n        for name, klass in sorted(self.classes.items()):\n            logger.debug('Processing class: %s', name)\n            if not isinstance(klass, DvClass):\n                klass = DvClass(klass, self.vma)\n            klass.process()\n            klass.show_source()\n\n    def get_ast(self) -> dict:\n        \"\"\"\n        Processes each class with AST enabled and returns a dictionary with all single ASTs\n        Classnames as keys.\n\n        :return: an dictionary for all classes\n        :rtype: dict\n        \"\"\"\n        ret = dict()\n        for name, cls in sorted(self.classes.items()):\n            logger.debug('Processing class: %s', name)\n            if not isinstance(cls, DvClass):\n                cls = DvClass(cls, self.vma)\n            cls.process(doAST=True)\n            ret[name] = cls.get_ast()\n        return ret\n"
  },
  {
    "path": "libs/androguard/decompiler/decompiler.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (C) 2013, Anthony Desnos <desnos at t0t0.fr>\n# All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    from androguard.core.analysis.analysis import Analysis, MethodAnalysis\n    from androguard.core.dex import DEX, ClassDefItem\n\nfrom loguru import logger\nfrom pygments import highlight\nfrom pygments.formatters import TerminalFormatter\nfrom pygments.lexers import get_lexer_by_name\nfrom pygments.token import Token\n\nfrom androguard.decompiler import decompile\n\n\nclass DecompilerDAD:\n    def __init__(self, vm: DEX, vmx: Analysis) -> None:\n        \"\"\"\n        Decompiler wrapper for DAD: **D**AD is **A** **D**ecompiler\n        DAD is the androguard internal decompiler.\n\n        This Method does not use the :class:`~androguard.decompiler.decompile.DvMachine` but\n        creates :class:`~androguard.decompiler.decompile.DvClass` and\n        :class:`~androguard.decompiler.decompile.DvMethod` on demand.\n\n        :param androguard.core.bytecodes.DEX vm: `DEX` object\n        :param androguard.core.analysis.analysis.Analysis vmx: `Analysis` object\n        \"\"\"\n        self.vm = vm\n        self.vmx = vmx\n\n    def get_source_method(self, m: MethodAnalysis) -> str:\n        mx = self.vmx.get_method(m)\n        z = decompile.DvMethod(mx)\n        z.process()\n        return z.get_source()\n\n    def get_ast_method(self, m: MethodAnalysis) -> dict:\n        mx = self.vmx.get_method(m)\n        z = decompile.DvMethod(mx)\n        z.process(doAST=True)\n        return z.get_ast()\n\n    def display_source(self, m: MethodAnalysis) -> None:\n        result = self.get_source_method(m)\n\n        lexer = get_lexer_by_name(\"java\", stripall=True)\n        formatter = TerminalFormatter()\n        result = highlight(result, lexer, formatter)\n        print(result)\n\n    def get_source_class(self, _class: ClassDefItem) -> str:\n        c = decompile.DvClass(_class, self.vmx)\n        c.process()\n        return c.get_source()\n\n    def get_ast_class(self, _class: ClassDefItem) -> dict:\n        c = decompile.DvClass(_class, self.vmx)\n        c.process(doAST=True)\n        return c.get_ast()\n\n    def get_source_class_ext(\n        self, _class: ClassDefItem\n    ) -> list[tuple[str, list]]:\n        c = decompile.DvClass(_class, self.vmx)\n        c.process()\n\n        result = c.get_source_ext()\n\n        return result\n\n    def display_all(self, _class: ClassDefItem) -> None:\n        result = self.get_source_class(_class)\n\n        lexer = get_lexer_by_name(\"java\", stripall=True)\n        formatter = TerminalFormatter()\n        result = highlight(result, lexer, formatter)\n        print(result)\n"
  },
  {
    "path": "libs/androguard/decompiler/graph.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (c) 2012 Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nfrom collections import defaultdict\n\nfrom loguru import logger\n\nfrom androguard.decompiler.basic_blocks import (\n    CondBlock,\n    StatementBlock,\n    build_node_from_block,\n)\nfrom androguard.decompiler.instruction import Variable\n\n\n# TODO Could use networkx here, as it has plenty of tools already, no need to reengineer the wheel\nclass Graph:\n    \"\"\"\n    Stores a CFG (Control Flow Graph), which is a directed graph.\n\n    The CFG defines an entry node :py:attr:`entry`, a single exit node :py:attr:`exit`, a list of nodes\n    :py:attr:`nodes` and a list of edges :py:attr:`edges`.\n    \"\"\"\n\n    def __init__(self):\n        self.entry = None\n        self.exit = None\n        self.nodes = list()\n        self.edges = defaultdict(list)\n\n        self.rpo = []\n        self.catch_edges = defaultdict(list)\n        self.reverse_edges = defaultdict(list)\n        self.reverse_catch_edges = defaultdict(list)\n        self.loc_to_ins = None\n        self.loc_to_node = None\n\n    def sucs(self, node):\n        return self.edges.get(node, [])\n\n    def all_sucs(self, node):\n        return self.edges.get(node, []) + self.catch_edges.get(node, [])\n\n    def preds(self, node):\n        return [n for n in self.reverse_edges.get(node, []) if not n.in_catch]\n\n    def all_preds(self, node):\n        return self.reverse_edges.get(node, []) + self.reverse_catch_edges.get(\n            node, []\n        )\n\n    def add_node(self, node):\n        \"\"\"\n        Adds the given node to the graph, without connecting it to anyhting else.\n\n        :param androguard.decompiler.node.Node node: node to add\n        \"\"\"\n        self.nodes.append(node)\n\n    def add_edge(self, e1, e2):\n        lsucs = self.edges[e1]\n        if e2 not in lsucs:\n            lsucs.append(e2)\n        lpreds = self.reverse_edges[e2]\n        if e1 not in lpreds:\n            lpreds.append(e1)\n\n    def add_catch_edge(self, e1, e2):\n        # Ensure nodes always inherit non-empty catch types from each other.\n        active_type = e1.catch_type or e2.catch_type\n        e1.set_catch_type(active_type)\n        e2.set_catch_type(active_type)\n        lsucs = self.catch_edges[e1]\n        if e2 not in lsucs:\n            lsucs.append(e2)\n        lpreds = self.reverse_catch_edges[e2]\n        if e1 not in lpreds:\n            lpreds.append(e1)\n\n    def remove_node(self, node):\n        \"\"\"\n        Remove the node from the graph, removes also all connections.\n\n        :param androguard.decompiler.node.Node node: the node to remove\n        \"\"\"\n        preds = self.reverse_edges.get(node, [])\n        for pred in preds:\n            self.edges[pred].remove(node)\n\n        succs = self.edges.get(node, [])\n        for suc in succs:\n            self.reverse_edges[suc].remove(node)\n\n        exc_preds = self.reverse_catch_edges.pop(node, [])\n        for pred in exc_preds:\n            self.catch_edges[pred].remove(node)\n\n        exc_succs = self.catch_edges.pop(node, [])\n        for suc in exc_succs:\n            self.reverse_catch_edges[suc].remove(node)\n\n        self.nodes.remove(node)\n        if node in self.rpo:\n            self.rpo.remove(node)\n        del node\n\n    def number_ins(self):\n        self.loc_to_ins = {}\n        self.loc_to_node = {}\n        num = 0\n        for node in self.rpo:\n            start_node = num\n            num = node.number_ins(num)\n            end_node = num - 1\n            self.loc_to_ins.update(node.get_loc_with_ins())\n            self.loc_to_node[start_node, end_node] = node\n\n    def get_ins_from_loc(self, loc):\n        return self.loc_to_ins.get(loc)\n\n    def get_node_from_loc(self, loc):\n        for (start, end), node in self.loc_to_node.items():\n            if start <= loc <= end:\n                return node\n\n    def remove_ins(self, loc):\n        ins = self.get_ins_from_loc(loc)\n        self.get_node_from_loc(loc).remove_ins(loc, ins)\n        self.loc_to_ins.pop(loc)\n\n    def compute_rpo(self):\n        \"\"\"\n        Number the nodes in reverse post order.\n        An RPO traversal visit as many predecessors of a node as possible\n        before visiting the node itself.\n        \"\"\"\n        nb = len(self.nodes) + 1\n        for node in self.post_order():\n            node.num = nb - node.po\n        self.rpo = sorted(self.nodes, key=lambda n: n.num)\n\n    def post_order(self):\n        \"\"\"\n        Yields the :class`~androguard.decompiler.node.Node`s of the graph in post-order i.e we visit all the\n        children of a node before visiting the node itself.\n        \"\"\"\n\n        def _visit(n, cnt):\n            visited.add(n)\n            for suc in self.all_sucs(n):\n                if suc not in visited:\n                    for cnt, s in _visit(suc, cnt):\n                        yield cnt, s\n            n.po = cnt\n            yield cnt + 1, n\n\n        visited = set()\n        for _, node in _visit(self.entry, 1):\n            yield node\n\n    def draw(self, name, dname, draw_branches=True):\n        \"\"\"\n        Writes the current graph as a PNG file\n\n        :param str name: filename (without .png)\n        :param str dname: directory of the output png\n        :param draw_branches:\n        :return:\n        \"\"\"\n        import os\n\n        from pydot import Dot, Edge\n\n        g = Dot()\n        g.set_node_defaults(\n            color='lightgray',\n            style='filled',\n            shape='box',\n            fontname='Courier',\n            fontsize='10',\n        )\n        for node in sorted(self.nodes, key=lambda x: x.num):\n            if draw_branches and node.type.is_cond:\n                g.add_edge(Edge(str(node), str(node.true), color='green'))\n                g.add_edge(Edge(str(node), str(node.false), color='red'))\n            else:\n                for suc in self.sucs(node):\n                    g.add_edge(Edge(str(node), str(suc), color='blue'))\n            for except_node in self.catch_edges.get(node, []):\n                g.add_edge(\n                    Edge(\n                        str(node),\n                        str(except_node),\n                        color='black',\n                        style='dashed',\n                    )\n                )\n\n        g.write(os.path.join(dname, '%s.png' % name), format='png')\n\n    def immediate_dominators(self):\n        return dom_lt(self)\n\n    def __len__(self):\n        return len(self.nodes)\n\n    def __repr__(self):\n        return str(self.nodes)\n\n    def __iter__(self):\n        for node in self.nodes:\n            yield node\n\n\ndef split_if_nodes(graph):\n    \"\"\"\n    Split IfNodes in two nodes, the first node is the header node, the\n    second one is only composed of the jump condition.\n    \"\"\"\n    node_map = {n: n for n in graph}\n    to_update = set()\n    for node in graph.nodes[:]:\n        if node.type.is_cond:\n            if len(node.get_ins()) > 1:\n                pre_ins = node.get_ins()[:-1]\n                last_ins = node.get_ins()[-1]\n                pre_node = StatementBlock('%s-pre' % node.name, pre_ins)\n                cond_node = CondBlock('%s-cond' % node.name, [last_ins])\n                node_map[node] = pre_node\n                node_map[pre_node] = pre_node\n                node_map[cond_node] = cond_node\n\n                pre_node.copy_from(node)\n                cond_node.copy_from(node)\n                for var in node.var_to_declare:\n                    pre_node.add_variable_declaration(var)\n                pre_node.type.is_stmt = True\n                cond_node.true = node.true\n                cond_node.false = node.false\n\n                for pred in graph.all_preds(node):\n                    pred_node = node_map[pred]\n                    # Verify that the link is not an exception link\n                    if node not in graph.sucs(pred):\n                        graph.add_catch_edge(pred_node, pre_node)\n                        continue\n                    if pred is node:\n                        pred_node = cond_node\n                    if pred.type.is_cond:  # and not (pred is node):\n                        if pred.true is node:\n                            pred_node.true = pre_node\n                        if pred.false is node:\n                            pred_node.false = pre_node\n                    graph.add_edge(pred_node, pre_node)\n                for suc in graph.sucs(node):\n                    graph.add_edge(cond_node, node_map[suc])\n\n                # We link all the exceptions to the pre node instead of the\n                # condition node, which should not trigger any of them.\n                for suc in graph.catch_edges.get(node, []):\n                    graph.add_catch_edge(pre_node, node_map[suc])\n\n                if node is graph.entry:\n                    graph.entry = pre_node\n\n                graph.add_node(pre_node)\n                graph.add_node(cond_node)\n                graph.add_edge(pre_node, cond_node)\n                pre_node.update_attribute_with(node_map)\n                cond_node.update_attribute_with(node_map)\n                graph.remove_node(node)\n        else:\n            to_update.add(node)\n    for node in to_update:\n        node.update_attribute_with(node_map)\n\n\ndef simplify(graph):\n    \"\"\"\n    Simplify the CFG by merging/deleting statement nodes when possible:\n    If statement B follows statement A and if B has no other predecessor\n    besides A, then we can merge A and B into a new statement node.\n    We also remove nodes which do nothing except redirecting the control\n    flow (nodes which only contains a goto).\n    \"\"\"\n    redo = True\n    while redo:\n        redo = False\n        node_map = {}\n        to_update = set()\n        for node in graph.nodes[:]:\n            if node.type.is_stmt and node in graph:\n                sucs = graph.all_sucs(node)\n                if len(sucs) != 1:\n                    continue\n                suc = sucs[0]\n                if len(node.get_ins()) == 0:\n                    if any(\n                        pred.type.is_switch for pred in graph.all_preds(node)\n                    ):\n                        continue\n                    if node is suc:\n                        continue\n                    node_map[node] = suc\n\n                    for pred in graph.all_preds(node):\n                        pred.update_attribute_with(node_map)\n                        if node not in graph.sucs(pred):\n                            graph.add_catch_edge(pred, suc)\n                            continue\n                        graph.add_edge(pred, suc)\n                    redo = True\n                    if node is graph.entry:\n                        graph.entry = suc\n                    graph.remove_node(node)\n                elif (\n                    suc.type.is_stmt\n                    and len(graph.all_preds(suc)) == 1\n                    and not (suc in graph.catch_edges)\n                    and not ((node is suc) or (suc is graph.entry))\n                ):\n                    ins_to_merge = suc.get_ins()\n                    node.add_ins(ins_to_merge)\n                    for var in suc.var_to_declare:\n                        node.add_variable_declaration(var)\n                    new_suc = graph.sucs(suc)[0]\n                    if new_suc:\n                        graph.add_edge(node, new_suc)\n                    for exception_suc in graph.catch_edges.get(suc, []):\n                        graph.add_catch_edge(node, exception_suc)\n                    redo = True\n                    graph.remove_node(suc)\n            else:\n                to_update.add(node)\n        for node in to_update:\n            node.update_attribute_with(node_map)\n\n\ndef dom_lt(graph):\n    \"\"\"Dominator algorithm from Lengauer-Tarjan\"\"\"\n\n    def _dfs(v, n):\n        semi[v] = n = n + 1\n        vertex[n] = label[v] = v\n        ancestor[v] = 0\n        for w in graph.all_sucs(v):\n            if not semi[w]:\n                parent[w] = v\n                n = _dfs(w, n)\n            pred[w].add(v)\n        return n\n\n    def _compress(v):\n        u = ancestor[v]\n        if ancestor[u]:\n            _compress(u)\n            if semi[label[u]] < semi[label[v]]:\n                label[v] = label[u]\n            ancestor[v] = ancestor[u]\n\n    def _eval(v):\n        if ancestor[v]:\n            _compress(v)\n            return label[v]\n        return v\n\n    def _link(v, w):\n        ancestor[w] = v\n\n    parent, ancestor, vertex = {}, {}, {}\n    label, dom = {}, {}\n    pred, bucket = defaultdict(set), defaultdict(set)\n\n    # Step 1:\n    semi = {v: 0 for v in graph.nodes}\n    n = _dfs(graph.entry, 0)\n    for i in range(n, 1, -1):\n        w = vertex[i]\n        # Step 2:\n        for v in pred[w]:\n            u = _eval(v)\n            y = semi[w] = min(semi[w], semi[u])\n        bucket[vertex[y]].add(w)\n        pw = parent[w]\n        _link(pw, w)\n        # Step 3:\n        bpw = bucket[pw]\n        while bpw:\n            v = bpw.pop()\n            u = _eval(v)\n            dom[v] = u if semi[u] < semi[v] else pw\n    # Step 4:\n    for i in range(2, n + 1):\n        w = vertex[i]\n        dw = dom[w]\n        if dw != vertex[semi[w]]:\n            dom[w] = dom[dw]\n    dom[graph.entry] = None\n    return dom\n\n\ndef bfs(start):\n    \"\"\"\n    Breadth first search\n\n    Yields all nodes found from the starting point\n\n    :param start: start node\n    \"\"\"\n    to_visit = [start]\n    visited = {start}\n    while to_visit:\n        node = to_visit.pop(0)\n        yield node\n        if node.exception_analysis:\n            for _, _, exception in node.exception_analysis.exceptions:\n                if exception not in visited:\n                    to_visit.append(exception)\n                    visited.add(exception)\n        for _, _, child in node.childs:\n            if child not in visited:\n                to_visit.append(child)\n                visited.add(child)\n\n\nclass GenInvokeRetName:\n    def __init__(self):\n        self.num = 0\n        self.ret = None\n\n    def new(self):\n        self.num += 1\n        self.ret = Variable('tmp%d' % self.num)\n        return self.ret\n\n    def set_to(self, ret):\n        self.ret = ret\n\n    def last(self):\n        return self.ret\n\n\ndef make_node(graph, block, block_to_node, vmap, gen_ret):\n    node = block_to_node.get(block)\n    if node is None:\n        node = build_node_from_block(block, vmap, gen_ret)\n        block_to_node[block] = node\n    if block.exception_analysis:\n        for _type, _, exception_target in block.exception_analysis.exceptions:\n            exception_node = block_to_node.get(exception_target)\n            if exception_node is None:\n                exception_node = build_node_from_block(\n                    exception_target, vmap, gen_ret, _type\n                )\n                exception_node.in_catch = True\n                block_to_node[exception_target] = exception_node\n            node.set_catch_type(_type)\n            exception_node.set_catch_type(_type)\n            graph.add_catch_edge(node, exception_node)\n    for _, _, child_block in block.childs:\n        child_node = block_to_node.get(child_block)\n        if child_node is None:\n            child_node = build_node_from_block(child_block, vmap, gen_ret)\n            block_to_node[child_block] = child_node\n        graph.add_edge(node, child_node)\n        if node.type.is_switch:\n            node.add_case(child_node)\n        if node.type.is_cond:\n            if_target = (\n                (block.end // 2) - (block.last_length // 2) + node.off_last_ins\n            )\n            child_addr = child_block.start // 2\n            if if_target == child_addr:\n                node.true = child_node\n            else:\n                node.false = child_node\n\n    # Check that both branch of the if point to something\n    # It may happen that both branch point to the same node, in this case\n    # the false branch will be None. So we set it to the right node.\n    # TODO: In this situation, we should transform the condition node into\n    # a statement node\n    if node.type.is_cond and node.false is None:\n        node.false = node.true\n\n    return node\n\n\ndef construct(start_block, vmap, exceptions):\n    \"\"\"\n    Constructs a CFG\n\n    :param androguard.core.analysis.analysis.DEXBasicBlock start_block: The startpoint\n    :param vmap: variable mapping\n    :param exceptions: list of androguard.core.analysis.analysis.ExceptionAnalysis\n\n    :rtype: Graph\n    \"\"\"\n    bfs_blocks = bfs(start_block)\n\n    graph = Graph()\n    gen_ret = GenInvokeRetName()\n\n    # Construction of a mapping of basic blocks into Nodes\n    block_to_node = {}\n\n    exceptions_start_block = []\n    for exception in exceptions:\n        for _, _, block in exception.exceptions:\n            exceptions_start_block.append(block)\n\n    for block in bfs_blocks:\n        node = make_node(graph, block, block_to_node, vmap, gen_ret)\n        graph.add_node(node)\n\n    graph.entry = block_to_node[start_block]\n    del block_to_node, bfs_blocks\n\n    graph.compute_rpo()\n    graph.number_ins()\n\n    for node in graph.rpo:\n        preds = [pred for pred in graph.all_preds(node) if pred.num < node.num]\n        if preds and all(pred.in_catch for pred in preds):\n            node.in_catch = True\n\n    # FIXME: We have seen samples in the wild which have multiple exit nodes!\n    #        This seems to be not necessarily a obfuscation method, but rather some\n    #        speciality with certain compilers!\n    # Create a list of Node which are 'return' node\n    # There should be one and only one node of this type\n    # If this is not the case, try to continue anyway by setting the exit node\n    # to the one which has the greatest RPO number (not necessarily the case)\n    lexit_nodes = [node for node in graph if node.type.is_return]\n\n    if len(lexit_nodes) > 1:\n        # Not sure that this case is possible...\n        logger.error('Multiple exit nodes found !')\n        graph.exit = graph.rpo[-1]\n    elif len(lexit_nodes) < 1:\n        # A method can have no return if it has throw statement(s) or if its\n        # body is a while(1) whitout break/return.\n        logger.debug('No exit node found !')\n    else:\n        graph.exit = lexit_nodes[0]\n\n    return graph\n"
  },
  {
    "path": "libs/androguard/decompiler/instruction.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (C) 2012, Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport androguard.decompiler.util as util\n\n\nclass IRForm:\n    def __init__(self):\n        self.var_map = {}\n        self.type = None\n\n    def is_call(self):\n        return False\n\n    def is_cond(self):\n        return False\n\n    def is_const(self):\n        return False\n\n    def is_ident(self):\n        return False\n\n    def is_propagable(self):\n        return True\n\n    def get_type(self):\n        return self.type\n\n    def set_type(self, _type):\n        self.type = _type\n\n    def has_side_effect(self):\n        return False\n\n    def get_used_vars(self):\n        return []\n\n    def replace(self, old, new):\n        raise NotImplementedError('replace not implemented in %r' % self)\n\n    def replace_lhs(self, new):\n        raise NotImplementedError('replace_lhs not implemented in %r' % self)\n\n    def replace_var(self, old, new):\n        raise NotImplementedError('replace_var not implemented in %r' % self)\n\n    def remove_defined_var(self):\n        pass\n\n    def get_rhs(self):\n        return []\n\n    def get_lhs(self):\n        return None\n\n    def visit(self, visitor):\n        pass\n\n\nclass Constant(IRForm):\n    def __init__(self, value, atype, int_value=None, descriptor=None):\n        \"\"\"\n\n        :param value:\n        :param atype: the type of the constant as described in https://source.android.com/devices/tech/dalvik/dex-format.html#typedescriptor\n        :param int_value:\n        :param descriptor:\n        \"\"\"\n        self.v = 'c%s' % value\n        self.cst = value\n        if int_value is None:\n            self.cst2 = value\n        else:\n            self.cst2 = int_value\n        self.type = atype\n\n        self.clsdesc = descriptor\n\n    def get_used_vars(self):\n        return []\n\n    def is_const(self):\n        return True\n\n    def get_int_value(self):\n        return self.cst2\n\n    def get_type(self):\n        return self.type\n\n    def visit(self, visitor):\n        if self.type == 'Z':\n            if self.cst == 0:\n                return visitor.visit_constant('false')\n            else:\n                return visitor.visit_constant('true')\n        elif self.type == 'Ljava/lang/Class;':\n            return visitor.visit_base_class(self.cst, data=self.cst)\n        elif self.type in 'IJB':\n            return visitor.visit_constant(self.cst2)\n        else:\n            return visitor.visit_constant(self.cst)\n\n    def __str__(self):\n        return 'CST_%s' % repr(self.cst)\n\n\nclass BaseClass(IRForm):\n    def __init__(self, name, descriptor=None):\n        self.v = 'c%s' % name\n        self.cls = name\n\n        self.clsdesc = descriptor\n\n    def is_const(self):\n        return True\n\n    def visit(self, visitor):\n        return visitor.visit_base_class(self.cls, data=self.cls)\n\n    def __str__(self):\n        return 'BASECLASS_%s' % self.cls\n\n\nclass Variable(IRForm):\n    def __init__(self, value):\n        self.v = value\n        self.declared = False\n        self.type = None\n        self.name = value\n\n    def get_used_vars(self):\n        return [self.v]\n\n    def is_ident(self):\n        return True\n\n    def value(self):\n        return self.v\n\n    def visit(self, visitor):\n        return visitor.visit_variable(self)\n\n    def visit_decl(self, visitor):\n        return visitor.visit_decl(self)\n\n    def __str__(self):\n        return 'VAR_%s' % self.name\n\n\nclass Param(Variable):\n    def __init__(self, value, atype):\n        super().__init__(value)\n        self.declared = True\n        self.type = atype\n        self.this = False\n\n    def is_const(self):\n        return True\n\n    def visit(self, visitor):\n        return visitor.visit_param(self.v, data=self.type)\n\n    def __str__(self):\n        return 'PARAM_%s' % self.name\n\n\nclass ThisParam(Param):\n    def __init__(self, value, atype):\n        super().__init__(value, atype)\n        self.this = True\n        self.super = False\n\n    def visit(self, visitor):\n        if self.super:\n            return visitor.visit_super()\n        return visitor.visit_this()\n\n    def __str__(self):\n        return 'THIS'\n\n\nclass AssignExpression(IRForm):\n    def __init__(self, lhs, rhs):\n        super().__init__()\n        if lhs:\n            self.lhs = lhs.v\n            self.var_map[lhs.v] = lhs\n            lhs.set_type(rhs.get_type())\n        else:\n            self.lhs = None\n        self.rhs = rhs\n\n    def is_propagable(self):\n        return self.rhs.is_propagable()\n\n    def is_call(self):\n        return self.rhs.is_call()\n\n    def has_side_effect(self):\n        return self.rhs.has_side_effect()\n\n    def get_rhs(self):\n        return self.rhs\n\n    def get_lhs(self):\n        return self.lhs\n\n    def get_used_vars(self):\n        return self.rhs.get_used_vars()\n\n    def remove_defined_var(self):\n        self.lhs = None\n\n    def replace(self, old, new):\n        self.rhs.replace(old, new)\n\n    def replace_lhs(self, new):\n        self.lhs = new.v\n        self.var_map[new.v] = new\n\n    def replace_var(self, old, new):\n        self.rhs.replace_var(old, new)\n\n    def visit(self, visitor):\n        return visitor.visit_assign(self.var_map.get(self.lhs), self.rhs)\n\n    def __str__(self):\n        return 'ASSIGN({}, {})'.format(self.var_map.get(self.lhs), self.rhs)\n\n\nclass MoveExpression(IRForm):\n    def __init__(self, lhs, rhs):\n        super().__init__()\n        self.lhs = lhs.v\n        self.rhs = rhs.v\n        self.var_map.update([(lhs.v, lhs), (rhs.v, rhs)])\n        lhs.set_type(rhs.get_type())\n\n    def has_side_effect(self):\n        return False\n\n    def is_call(self):\n        return self.var_map[self.rhs].is_call()\n\n    def get_used_vars(self):\n        return self.var_map[self.rhs].get_used_vars()\n\n    def get_rhs(self):\n        return self.var_map[self.rhs]\n\n    def get_lhs(self):\n        return self.lhs\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        return visitor.visit_move(v_m[self.lhs], v_m[self.rhs])\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        rhs = v_m[self.rhs]\n        if not (rhs.is_const() or rhs.is_ident()):\n            rhs.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.rhs = new.value()\n            else:\n                v_m[old] = new\n\n    def replace_lhs(self, new):\n        if self.lhs != self.rhs:\n            self.var_map.pop(self.lhs)\n        self.lhs = new.v\n        self.var_map[new.v] = new\n\n    def replace_var(self, old, new):\n        if self.lhs != old:\n            self.var_map.pop(old)\n        self.rhs = new.v\n        self.var_map[new.v] = new\n\n    def __str__(self):\n        v_m = self.var_map\n        return '{} = {}'.format(v_m.get(self.lhs), v_m.get(self.rhs))\n\n\nclass MoveResultExpression(MoveExpression):\n    def __init__(self, lhs, rhs):\n        super().__init__(lhs, rhs)\n\n    def is_propagable(self):\n        return self.var_map[self.rhs].is_propagable()\n\n    def has_side_effect(self):\n        return self.var_map[self.rhs].has_side_effect()\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        return visitor.visit_move_result(v_m[self.lhs], v_m[self.rhs])\n\n    def __str__(self):\n        v_m = self.var_map\n        return '{} = {}'.format(v_m.get(self.lhs), v_m.get(self.rhs))\n\n\nclass ArrayStoreInstruction(IRForm):\n    def __init__(self, rhs, array, index, _type):\n        super().__init__()\n        self.rhs = rhs.v\n        self.array = array.v\n        self.index = index.v\n        self.var_map.update([(rhs.v, rhs), (array.v, array), (index.v, index)])\n        self.type = _type\n\n    def has_side_effect(self):\n        return True\n\n    def get_used_vars(self):\n        v_m = self.var_map\n        lused_vars = v_m[self.array].get_used_vars()\n        lused_vars.extend(v_m[self.index].get_used_vars())\n        lused_vars.extend(v_m[self.rhs].get_used_vars())\n        return list(set(lused_vars))\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        return visitor.visit_astore(\n            v_m[self.array], v_m[self.index], v_m[self.rhs], data=self\n        )\n\n    def replace_var(self, old, new):\n        if self.rhs == old:\n            self.rhs = new.v\n        if self.array == old:\n            self.array = new.v\n        if self.index == old:\n            self.index = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        if old in v_m:\n            arg = v_m[old]\n            if not (arg.is_const() or arg.is_ident()):\n                arg.replace(old, new)\n            else:\n                if new.is_ident():\n                    v_m[new.value()] = new\n                    if self.rhs == old:\n                        self.rhs = new.value()\n                    if self.array == old:\n                        self.array = new.value()\n                    if self.index == old:\n                        self.array = new.value()\n                else:\n                    v_m[old] = new\n        else:\n            for arg in (v_m[self.array], v_m[self.index], v_m[self.rhs]):\n                if not (arg.is_const() or arg.is_ident()):\n                    arg.replace(old, new)\n\n    def __str__(self):\n        v_m = self.var_map\n        return '{}[{}] = {}'.format(\n            v_m[self.array], v_m[self.index], v_m[self.rhs]\n        )\n\n\nclass StaticInstruction(IRForm):\n    def __init__(self, rhs, klass, ftype, name):\n        super().__init__()\n        self.rhs = rhs.v\n        self.cls = util.get_type(klass)\n        self.ftype = ftype\n        self.name = name\n        self.var_map[rhs.v] = rhs\n\n        self.clsdesc = klass\n\n    def has_side_effect(self):\n        return True\n\n    def get_used_vars(self):\n        return self.var_map[self.rhs].get_used_vars()\n\n    def get_lhs(self):\n        return None\n\n    def visit(self, visitor):\n        return visitor.visit_put_static(\n            self.cls, self.name, self.var_map[self.rhs]\n        )\n\n    def replace_var(self, old, new):\n        self.rhs = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        rhs = v_m[self.rhs]\n        if not (rhs.is_const() or rhs.is_ident()):\n            rhs.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.rhs = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        return '{}.{} = {}'.format(self.cls, self.name, self.var_map[self.rhs])\n\n\nclass InstanceInstruction(IRForm):\n    def __init__(self, rhs, lhs, klass, atype, name):\n        super().__init__()\n        self.lhs = lhs.v\n        self.rhs = rhs.v\n        self.atype = atype\n        self.cls = util.get_type(klass)\n        self.name = name\n        self.var_map.update([(lhs.v, lhs), (rhs.v, rhs)])\n\n        self.clsdesc = klass\n\n    def has_side_effect(self):\n        return True\n\n    def get_used_vars(self):\n        v_m = self.var_map\n        lused_vars = v_m[self.lhs].get_used_vars()\n        lused_vars.extend(v_m[self.rhs].get_used_vars())\n        return list(set(lused_vars))\n\n    def get_lhs(self):\n        return None\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        return visitor.visit_put_instance(\n            v_m[self.lhs], self.name, v_m[self.rhs], data=self.atype\n        )\n\n    def replace_var(self, old, new):\n        if self.lhs == old:\n            self.lhs = new.v\n        if self.rhs == old:\n            self.rhs = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        if old in v_m:\n            arg = v_m[old]\n            if not (arg.is_const() or arg.is_ident()):\n                arg.replace(old, new)\n            else:\n                if new.is_ident():\n                    v_m[new.value()] = new\n                    if self.lhs == old:\n                        self.lhs = new.value()\n                    if self.rhs == old:\n                        self.rhs = new.value()\n                else:\n                    v_m[old] = new\n        else:\n            for arg in (v_m[self.lhs], v_m[self.rhs]):\n                if not (arg.is_const() or arg.is_ident()):\n                    arg.replace(old, new)\n\n    def __str__(self):\n        v_m = self.var_map\n        return '{}.{} = {}'.format(v_m[self.lhs], self.name, v_m[self.rhs])\n\n\nclass NewInstance(IRForm):\n    def __init__(self, ins_type):\n        super().__init__()\n        self.type = ins_type\n\n    def get_type(self):\n        return self.type\n\n    def get_used_vars(self):\n        return []\n\n    def visit(self, visitor):\n        return visitor.visit_new(self.type, data=self)\n\n    def replace(self, old, new):\n        pass\n\n    def __str__(self):\n        return 'NEW(%s)' % self.type\n\n\nclass InvokeInstruction(IRForm):\n    def __init__(self, clsname, name, base, rtype, ptype, args, triple):\n        super().__init__()\n        self.cls = clsname\n        self.name = name\n        self.base = base.v\n        self.rtype = rtype\n        self.ptype = ptype\n        self.args = [arg.v for arg in args]\n        self.var_map[base.v] = base\n        for arg in args:\n            self.var_map[arg.v] = arg\n\n        self.triple = triple\n        assert triple[1] == name\n\n    def get_type(self):\n        if self.name == '<init>':\n            return self.var_map[self.base].get_type()\n        return self.rtype\n\n    def is_call(self):\n        return True\n\n    def has_side_effect(self):\n        return True\n\n    def replace_var(self, old, new):\n        if self.base == old:\n            self.base = new.v\n        new_args = []\n        for arg in self.args:\n            if arg != old:\n                new_args.append(arg)\n            else:\n                new_args.append(new.v)\n        self.args = new_args\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        if old in v_m:\n            arg = v_m[old]\n            if not (arg.is_ident() or arg.is_const()):\n                arg.replace(old, new)\n            else:\n                if new.is_ident():\n                    v_m[new.value()] = new\n                    if self.base == old:\n                        self.base = new.value()\n                    new_args = []\n                    for arg in self.args:\n                        if arg != old:\n                            new_args.append(arg)\n                        else:\n                            new_args.append(new.v)\n                    self.args = new_args\n                else:\n                    v_m[old] = new\n        else:\n            base = v_m[self.base]\n            if not (base.is_ident() or base.is_const()):\n                base.replace(old, new)\n            for arg in self.args:\n                cnt = v_m[arg]\n                if not (cnt.is_ident() or cnt.is_const()):\n                    cnt.replace(old, new)\n\n    def get_used_vars(self):\n        v_m = self.var_map\n        lused_vars = []\n        for arg in self.args:\n            lused_vars.extend(v_m[arg].get_used_vars())\n        lused_vars.extend(v_m[self.base].get_used_vars())\n        return list(set(lused_vars))\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        largs = [v_m[arg] for arg in self.args]\n        return visitor.visit_invoke(\n            self.name, v_m[self.base], self.ptype, self.rtype, largs, self\n        )\n\n    def __str__(self):\n        v_m = self.var_map\n        return '{}.{}({})'.format(\n            v_m[self.base],\n            self.name,\n            ', '.join('%s' % v_m[i] for i in self.args),\n        )\n\n\nclass InvokeRangeInstruction(InvokeInstruction):\n    def __init__(self, clsname, name, rtype, ptype, args, triple):\n        base = args.pop(0)\n        super().__init__(clsname, name, base, rtype, ptype, args, triple)\n\n\nclass InvokeDirectInstruction(InvokeInstruction):\n    def __init__(self, clsname, name, base, rtype, ptype, args, triple):\n        super().__init__(clsname, name, base, rtype, ptype, args, triple)\n\n\nclass InvokeStaticInstruction(InvokeInstruction):\n    def __init__(self, clsname, name, base, rtype, ptype, args, triple):\n        super().__init__(clsname, name, base, rtype, ptype, args, triple)\n\n    def get_used_vars(self):\n        v_m = self.var_map\n        lused_vars = []\n        for arg in self.args:\n            lused_vars.extend(v_m[arg].get_used_vars())\n        return list(set(lused_vars))\n\n\nclass ReturnInstruction(IRForm):\n    def __init__(self, arg):\n        super().__init__()\n        self.arg = arg\n        if arg is not None:\n            self.var_map[arg.v] = arg\n            self.arg = arg.v\n\n    def get_used_vars(self):\n        if self.arg is None:\n            return []\n        return self.var_map[self.arg].get_used_vars()\n\n    def get_lhs(self):\n        return None\n\n    def visit(self, visitor):\n        if self.arg is None:\n            return visitor.visit_return_void()\n        else:\n            return visitor.visit_return(self.var_map[self.arg])\n\n    def replace_var(self, old, new):\n        self.arg = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        arg = v_m[self.arg]\n        if not (arg.is_const() or arg.is_ident()):\n            arg.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.arg = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        if self.arg is not None:\n            return 'RETURN(%s)' % self.var_map.get(self.arg)\n        return 'RETURN'\n\n\nclass NopExpression(IRForm):\n    def __init__(self):\n        pass\n\n    def get_used_vars(self):\n        return []\n\n    def get_lhs(self):\n        return None\n\n    def visit(self, visitor):\n        return visitor.visit_nop()\n\n\nclass SwitchExpression(IRForm):\n    def __init__(self, src, branch):\n        super().__init__()\n        self.src = src.v\n        self.branch = branch\n        self.var_map[src.v] = src\n\n    def get_used_vars(self):\n        return self.var_map[self.src].get_used_vars()\n\n    def visit(self, visitor):\n        return visitor.visit_switch(self.var_map[self.src])\n\n    def replace_var(self, old, new):\n        self.src = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        src = v_m[self.src]\n        if not (src.is_const() or src.is_ident()):\n            src.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.src = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        return 'SWITCH(%s)' % (self.var_map[self.src])\n\n\nclass CheckCastExpression(IRForm):\n    def __init__(self, arg, _type, descriptor=None):\n        super().__init__()\n        self.arg = arg.v\n        self.var_map[arg.v] = arg\n        self.type = descriptor\n\n        self.clsdesc = descriptor\n\n    def is_const(self):\n        return self.var_map[self.arg].is_const()\n\n    def get_used_vars(self):\n        return self.var_map[self.arg].get_used_vars()\n\n    def visit(self, visitor):\n        return visitor.visit_check_cast(\n            self.var_map[self.arg], util.get_type(self.type)\n        )\n\n    def replace_var(self, old, new):\n        self.arg = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        arg = v_m[self.arg]\n        if not (arg.is_const() or arg.is_ident()):\n            arg.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.arg = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        return 'CAST({}) {}'.format(self.type, self.var_map[self.arg])\n\n\nclass ArrayExpression(IRForm):\n    def __init__(self):\n        super().__init__()\n\n\nclass ArrayLoadExpression(ArrayExpression):\n    def __init__(self, arg, index, _type):\n        super().__init__()\n        self.array = arg.v\n        self.idx = index.v\n        self.var_map.update([(arg.v, arg), (index.v, index)])\n        self.type = _type\n\n    def get_used_vars(self):\n        v_m = self.var_map\n        lused_vars = v_m[self.array].get_used_vars()\n        lused_vars.extend(v_m[self.idx].get_used_vars())\n        return list(set(lused_vars))\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        return visitor.visit_aload(v_m[self.array], v_m[self.idx])\n\n    def get_type(self):\n        return self.var_map[self.array].get_type().replace('[', '', 1)\n\n    def replace_var(self, old, new):\n        if self.array == old:\n            self.array = new.v\n        if self.idx == old:\n            self.idx = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        if old in v_m:\n            arg = v_m[old]\n            if not (arg.is_ident() or arg.is_const()):\n                arg.replace(old, new)\n            else:\n                if new.is_ident():\n                    v_m[new.value()] = new\n                    if self.array == old:\n                        self.array = new.value()\n                    if self.idx == old:\n                        self.idx = new.value()\n                else:\n                    v_m[old] = new\n        else:\n            for arg in (self.array, self.idx):\n                cnt = v_m[arg]\n                if not (cnt.is_ident() or cnt.is_const()):\n                    cnt.replace(old, new)\n\n    def __str__(self):\n        v_m = self.var_map\n        return 'ARRAYLOAD({}, {})'.format(v_m[self.array], v_m[self.idx])\n\n\nclass ArrayLengthExpression(ArrayExpression):\n    def __init__(self, array):\n        super().__init__()\n        self.array = array.v\n        self.var_map[array.v] = array\n\n    def get_type(self):\n        return 'I'\n\n    def get_used_vars(self):\n        return self.var_map[self.array].get_used_vars()\n\n    def visit(self, visitor):\n        return visitor.visit_alength(self.var_map[self.array])\n\n    def replace_var(self, old, new):\n        self.array = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        array = v_m[self.array]\n        if not (array.is_const() or array.is_ident()):\n            array.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.array = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        return 'ARRAYLEN(%s)' % (self.var_map[self.array])\n\n\nclass NewArrayExpression(ArrayExpression):\n    def __init__(self, asize, atype):\n        super().__init__()\n        self.size = asize.v\n        self.type = atype\n        self.var_map[asize.v] = asize\n\n    def is_propagable(self):\n        return False\n\n    def get_used_vars(self):\n        return self.var_map[self.size].get_used_vars()\n\n    def visit(self, visitor):\n        return visitor.visit_new_array(self.type, self.var_map[self.size])\n\n    def replace_var(self, old, new):\n        self.size = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        size = v_m[self.size]\n        if not (size.is_const() or size.is_ident()):\n            size.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.size = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        return 'NEWARRAY_{}[{}]'.format(self.type, self.var_map[self.size])\n\n\nclass FilledArrayExpression(ArrayExpression):\n    def __init__(self, asize, atype, args):\n        super().__init__()\n        self.size = asize\n        self.type = atype\n        self.args = []\n        for arg in args:\n            self.var_map[arg.v] = arg\n            self.args.append(arg.v)\n\n    def get_used_vars(self):\n        lused_vars = []\n        for arg in self.args:\n            lused_vars.extend(self.var_map[arg].get_used_vars())\n        return list(set(lused_vars))\n\n    def replace_var(self, old, new):\n        new_args = []\n        for arg in self.args:\n            if arg == old:\n                new_args.append(new.v)\n            else:\n                new_args.append(arg)\n        self.args = new_args\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        if old in v_m:\n            arg = v_m[old]\n            if not (arg.is_ident() or arg.is_const()):\n                arg.replace(old, new)\n            else:\n                if new.is_ident():\n                    v_m[new.value()] = new\n                    new_args = []\n                    for arg in self.args:\n                        if arg == old:\n                            new_args.append(new.v)\n                        else:\n                            new_args.append(arg)\n                    self.args = new_args\n                else:\n                    v_m[old] = new\n        else:\n            for arg in self.args:\n                cnt = v_m[arg]\n                if not (cnt.is_ident() or cnt.is_const()):\n                    cnt.replace(old, new)\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        largs = [v_m[arg] for arg in self.args]\n        return visitor.visit_filled_new_array(self.type, self.size, largs)\n\n\nclass FillArrayExpression(ArrayExpression):\n    def __init__(self, reg, value):\n        super().__init__()\n        self.reg = reg.v\n        self.var_map[reg.v] = reg\n        self.value = value\n\n    def is_propagable(self):\n        return False\n\n    def get_rhs(self):\n        return self.reg\n\n    def replace_var(self, old, new):\n        self.reg = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        reg = v_m[self.reg]\n        if not (reg.is_const() or reg.is_ident()):\n            reg.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.reg = new.value()\n            else:\n                v_m[old] = new\n\n    def get_used_vars(self):\n        return self.var_map[self.reg].get_used_vars()\n\n    def visit(self, visitor):\n        return visitor.visit_fill_array(self.var_map[self.reg], self.value)\n\n\nclass RefExpression(IRForm):\n    def __init__(self, ref):\n        super().__init__()\n        self.ref = ref.v\n        self.var_map[ref.v] = ref\n\n    def is_propagable(self):\n        return False\n\n    def get_used_vars(self):\n        return self.var_map[self.ref].get_used_vars()\n\n    def replace_var(self, old, new):\n        self.ref = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        ref = v_m[self.ref]\n        if not (ref.is_const() or ref.is_ident()):\n            ref.replace(old, new)\n        else:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.ref = new.value()\n            else:\n                v_m[old] = new\n\n\nclass MoveExceptionExpression(RefExpression):\n    def __init__(self, ref, _type):\n        super().__init__(ref)\n        self.type = _type\n        ref.set_type(_type)\n\n    def get_lhs(self):\n        return self.ref\n\n    def has_side_effect(self):\n        return True\n\n    def get_used_vars(self):\n        return []\n\n    def replace_lhs(self, new):\n        self.var_map.pop(self.ref)\n        self.ref = new.v\n        self.var_map[new.v] = new\n\n    def visit(self, visitor):\n        return visitor.visit_move_exception(self.var_map[self.ref], data=self)\n\n    def __str__(self):\n        return 'MOVE_EXCEPT %s' % self.var_map[self.ref]\n\n\nclass MonitorEnterExpression(RefExpression):\n    def __init__(self, ref):\n        super().__init__(ref)\n\n    def visit(self, visitor):\n        return visitor.visit_monitor_enter(self.var_map[self.ref])\n\n\nclass MonitorExitExpression(RefExpression):\n    def __init__(self, ref):\n        super().__init__(ref)\n\n    def visit(self, visitor):\n        return visitor.visit_monitor_exit(self.var_map[self.ref])\n\n\nclass ThrowExpression(RefExpression):\n    def __init__(self, ref):\n        super().__init__(ref)\n\n    def visit(self, visitor):\n        return visitor.visit_throw(self.var_map[self.ref])\n\n    def __str__(self):\n        return 'Throw %s' % self.var_map[self.ref]\n\n\nclass BinaryExpression(IRForm):\n    def __init__(self, op, arg1, arg2, _type):\n        super().__init__()\n        self.op = op\n        self.arg1 = arg1.v\n        self.arg2 = arg2.v\n        self.var_map.update([(arg1.v, arg1), (arg2.v, arg2)])\n        self.type = _type\n\n    def has_side_effect(self):\n        v_m = self.var_map\n        return (\n            v_m[self.arg1].has_side_effect()\n            or v_m[self.arg2].has_side_effect()\n        )\n\n    def get_used_vars(self):\n        v_m = self.var_map\n        lused_vars = v_m[self.arg1].get_used_vars()\n        lused_vars.extend(v_m[self.arg2].get_used_vars())\n        return list(set(lused_vars))\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        return visitor.visit_binary_expression(\n            self.op, v_m[self.arg1], v_m[self.arg2]\n        )\n\n    def replace_var(self, old, new):\n        if self.arg1 == old:\n            self.arg1 = new.v\n        if self.arg2 == old:\n            self.arg2 = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        if old in v_m:\n            arg = v_m[old]\n            if not (arg.is_const() or arg.is_ident()):\n                arg.replace(old, new)\n            else:\n                if new.is_ident():\n                    v_m[new.value()] = new\n                    if self.arg1 == old:\n                        self.arg1 = new.value()\n                    if self.arg2 == old:\n                        self.arg2 = new.value()\n                else:\n                    v_m[old] = new\n        else:\n            for arg in (v_m[self.arg1], v_m[self.arg2]):\n                if not (arg.is_ident() or arg.is_const()):\n                    arg.replace(old, new)\n\n    def __str__(self):\n        v_m = self.var_map\n        return '({} {} {})'.format(self.op, v_m[self.arg1], v_m[self.arg2])\n\n\nclass BinaryCompExpression(BinaryExpression):\n    def __init__(self, op, arg1, arg2, _type):\n        super().__init__(op, arg1, arg2, _type)\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        return visitor.visit_cond_expression(\n            self.op, v_m[self.arg1], v_m[self.arg2]\n        )\n\n\nclass BinaryExpression2Addr(BinaryExpression):\n    def __init__(self, op, dest, arg, _type):\n        super().__init__(op, dest, arg, _type)\n\n\nclass BinaryExpressionLit(BinaryExpression):\n    def __init__(self, op, arg1, arg2):\n        super().__init__(op, arg1, arg2, 'I')\n\n\nclass UnaryExpression(IRForm):\n    def __init__(self, op, arg, _type):\n        super().__init__()\n        self.op = op\n        self.arg = arg.v\n        self.var_map[arg.v] = arg\n        self.type = _type\n\n    def get_type(self):\n        return self.var_map[self.arg].get_type()\n\n    def get_used_vars(self):\n        return self.var_map[self.arg].get_used_vars()\n\n    def visit(self, visitor):\n        return visitor.visit_unary_expression(self.op, self.var_map[self.arg])\n\n    def replace_var(self, old, new):\n        self.arg = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        arg = v_m[self.arg]\n        if not (arg.is_const() or arg.is_ident()):\n            arg.replace(old, new)\n        elif old in v_m:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.arg = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        return '({}, {})'.format(self.op, self.var_map[self.arg])\n\n\nclass CastExpression(UnaryExpression):\n    def __init__(self, op, atype, arg):\n        super().__init__(op, arg, atype)\n        self.clsdesc = atype\n\n    def is_const(self):\n        return self.var_map[self.arg].is_const()\n\n    def get_type(self):\n        return self.type\n\n    def get_used_vars(self):\n        return self.var_map[self.arg].get_used_vars()\n\n    def visit(self, visitor):\n        return visitor.visit_cast(self.op, self.var_map[self.arg])\n\n    def __str__(self):\n        return 'CAST_{}({})'.format(self.op, self.var_map[self.arg])\n\n\nCONDS = {\n    '==': '!=',\n    '!=': '==',\n    '<': '>=',\n    '<=': '>',\n    '>=': '<',\n    '>': '<=',\n}\n\n\nclass ConditionalExpression(IRForm):\n    def __init__(self, op, arg1, arg2):\n        super().__init__()\n        self.op = op\n        self.arg1 = arg1.v\n        self.arg2 = arg2.v\n        self.var_map.update([(arg1.v, arg1), (arg2.v, arg2)])\n\n    def get_lhs(self):\n        return None\n\n    def is_cond(self):\n        return True\n\n    def get_used_vars(self):\n        v_m = self.var_map\n        lused_vars = v_m[self.arg1].get_used_vars()\n        lused_vars.extend(v_m[self.arg2].get_used_vars())\n        return list(set(lused_vars))\n\n    def neg(self):\n        self.op = CONDS[self.op]\n\n    def visit(self, visitor):\n        v_m = self.var_map\n        return visitor.visit_cond_expression(\n            self.op, v_m[self.arg1], v_m[self.arg2]\n        )\n\n    def replace_var(self, old, new):\n        if self.arg1 == old:\n            self.arg1 = new.v\n        if self.arg2 == old:\n            self.arg2 = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        if old in v_m:\n            arg = v_m[old]\n            if not (arg.is_const() or arg.is_ident()):\n                arg.replace(old, new)\n            else:\n                if new.is_ident():\n                    v_m[new.value()] = new\n                    if self.arg1 == old:\n                        self.arg1 = new.value()\n                    if self.arg2 == old:\n                        self.arg2 = new.value()\n                else:\n                    v_m[old] = new\n        else:\n            for arg in (v_m[self.arg1], v_m[self.arg2]):\n                if not (arg.is_ident() or arg.is_const()):\n                    arg.replace(old, new)\n\n    def __str__(self):\n        v_m = self.var_map\n        return 'COND({}, {}, {})'.format(\n            self.op, v_m[self.arg1], v_m[self.arg2]\n        )\n\n\nclass ConditionalZExpression(IRForm):\n    def __init__(self, op, arg):\n        super().__init__()\n        self.op = op\n        self.arg = arg.v\n        self.var_map[arg.v] = arg\n\n    def get_lhs(self):\n        return None\n\n    def is_cond(self):\n        return True\n\n    def get_used_vars(self):\n        return self.var_map[self.arg].get_used_vars()\n\n    def neg(self):\n        self.op = CONDS[self.op]\n\n    def visit(self, visitor):\n        return visitor.visit_condz_expression(self.op, self.var_map[self.arg])\n\n    def replace_var(self, old, new):\n        self.arg = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        arg = v_m[self.arg]\n        if not (arg.is_const() or arg.is_ident()):\n            arg.replace(old, new)\n        elif old in v_m:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.arg = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        return '(IS{}0, {})'.format(self.op, self.var_map[self.arg])\n\n\nclass InstanceExpression(IRForm):\n    def __init__(self, arg, klass, ftype, name):\n        super().__init__()\n        self.arg = arg.v\n        self.cls = util.get_type(klass)\n        self.ftype = ftype\n        self.name = name\n        self.var_map[arg.v] = arg\n\n        self.clsdesc = klass\n\n    def get_type(self):\n        return self.ftype\n\n    def get_used_vars(self):\n        return self.var_map[self.arg].get_used_vars()\n\n    def visit(self, visitor):\n        return visitor.visit_get_instance(\n            self.var_map[self.arg], self.name, data=self.ftype\n        )\n\n    def replace_var(self, old, new):\n        self.arg = new.v\n        self.var_map.pop(old)\n        self.var_map[new.v] = new\n\n    def replace(self, old, new):\n        v_m = self.var_map\n        arg = v_m[self.arg]\n        if not (arg.is_const() or arg.is_ident()):\n            arg.replace(old, new)\n        elif old in v_m:\n            if new.is_ident():\n                v_m[new.value()] = new\n                self.arg = new.value()\n            else:\n                v_m[old] = new\n\n    def __str__(self):\n        return '{}.{}'.format(self.var_map[self.arg], self.name)\n\n\nclass StaticExpression(IRForm):\n    def __init__(self, cls_name, field_type, field_name):\n        super().__init__()\n        self.cls = util.get_type(cls_name)\n        self.ftype = field_type\n        self.name = field_name\n\n        self.clsdesc = cls_name\n\n    def get_type(self):\n        return self.ftype\n\n    def visit(self, visitor):\n        return visitor.visit_get_static(self.cls, self.name)\n\n    def replace(self, old, new):\n        pass\n\n    def __str__(self):\n        return '{}.{}'.format(self.cls, self.name)\n"
  },
  {
    "path": "libs/androguard/decompiler/node.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (c) 2012 Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\nclass MakeProperties(type):\n    def __init__(cls, name, bases, dct):\n\n        def _wrap_set(names, name):\n\n            def fun(self, value):\n                for field in names:\n                    self.__dict__[field] = (name == field) and value\n\n            return fun\n\n        def _wrap_get(name):\n\n            def fun(self):\n                return self.__dict__[name]\n\n            return fun\n\n        super().__init__(name, bases, dct)\n        attrs = []\n        prefixes = ('_get_', '_set_')\n        for key in list(dct.keys()):\n            for prefix in prefixes:\n                if key.startswith(prefix):\n                    attrs.append(key[4:])\n                    delattr(cls, key)\n        for attr in attrs:\n            setattr(\n                cls,\n                attr[1:],\n                property(_wrap_get(attr), _wrap_set(attrs, attr)),\n            )\n        cls._attrs = attrs\n\n    def __call__(cls, *args, **kwds):\n        obj = super().__call__(*args, **kwds)\n        for attr in cls._attrs:\n            obj.__dict__[attr] = False\n        return obj\n\n\nclass LoopType(metaclass=MakeProperties):\n    _set_is_pretest = _set_is_posttest = _set_is_endless = None\n    _get_is_pretest = _get_is_posttest = _get_is_endless = None\n\n    def copy(self):\n        res = LoopType()\n        for key, value in self.__dict__.items():\n            setattr(res, key, value)\n        return res\n\n\nclass NodeType(metaclass=MakeProperties):\n    _set_is_cond = _set_is_switch = _set_is_stmt = None\n    _get_is_cond = _get_is_switch = _get_is_stmt = None\n    _set_is_return = _set_is_throw = None\n    _get_is_return = _get_is_throw = None\n\n    def copy(self):\n        res = NodeType()\n        for key, value in self.__dict__.items():\n            setattr(res, key, value)\n        return res\n\n\nclass Node:\n    def __init__(self, name):\n        self.name = name\n        self.num = 0\n        self.follow = {'if': None, 'loop': None, 'switch': None}\n        self.looptype = LoopType()\n        self.type = NodeType()\n        self.in_catch = False\n        self.interval = None\n        self.startloop = False\n        self.latch = None\n        self.loop_nodes = []\n\n    def copy_from(self, node):\n        self.num = node.num\n        self.looptype = node.looptype.copy()\n        self.interval = node.interval\n        self.startloop = node.startloop\n        self.type = node.type.copy()\n        self.follow = node.follow.copy()\n        self.latch = node.latch\n        self.loop_nodes = node.loop_nodes\n        self.in_catch = node.in_catch\n\n    def update_attribute_with(self, n_map):\n        self.latch = n_map.get(self.latch, self.latch)\n        for follow_type, value in self.follow.items():\n            self.follow[follow_type] = n_map.get(value, value)\n        self.loop_nodes = list({n_map.get(n, n) for n in self.loop_nodes})\n\n    def get_head(self):\n        return self\n\n    def get_end(self):\n        return self\n\n    def __repr__(self):\n        return '%s' % self\n\n\nclass Interval:\n    def __init__(self, head):\n        self.name = 'Interval-%s' % head.name\n        self.content = {head}\n        self.end = None\n        self.head = head\n        self.in_catch = head.in_catch\n        head.interval = self\n\n    def __contains__(self, item):\n        # If the interval contains nodes, check if the item is one of them\n        if item in self.content:\n            return True\n        # If the interval contains intervals, we need to check them\n        return any(\n            item in node for node in self.content if isinstance(node, Interval)\n        )\n\n    def add_node(self, node):\n        if node in self.content:\n            return False\n        self.content.add(node)\n        node.interval = self\n        return True\n\n    def compute_end(self, graph):\n        for node in self.content:\n            for suc in graph.sucs(node):\n                if suc not in self.content:\n                    self.end = node\n        self.end = self.end or self.head\n\n    def get_end(self):\n        return self.end.get_end()\n\n    def get_head(self):\n        return self.head.get_head()\n\n    def __len__(self):\n        return len(self.content)\n\n    def __repr__(self):\n        return '{}({})'.format(self.name, self.content)\n"
  },
  {
    "path": "libs/androguard/decompiler/opcode_ins.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (C) 2012, Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom struct import pack, unpack\n\nfrom loguru import logger\n\nimport androguard.decompiler.util as util\nfrom androguard.decompiler.instruction import (\n    ArrayLengthExpression,\n    ArrayLoadExpression,\n    ArrayStoreInstruction,\n    AssignExpression,\n    BaseClass,\n    BinaryCompExpression,\n    BinaryExpression,\n    BinaryExpression2Addr,\n    BinaryExpressionLit,\n    CastExpression,\n    CheckCastExpression,\n    ConditionalExpression,\n    ConditionalZExpression,\n    Constant,\n    FillArrayExpression,\n    FilledArrayExpression,\n    InstanceExpression,\n    InstanceInstruction,\n    InvokeDirectInstruction,\n    InvokeInstruction,\n    InvokeRangeInstruction,\n    InvokeStaticInstruction,\n    MonitorEnterExpression,\n    MonitorExitExpression,\n    MoveExceptionExpression,\n    MoveExpression,\n    MoveResultExpression,\n    NewArrayExpression,\n    NewInstance,\n    NopExpression,\n    ReturnInstruction,\n    StaticExpression,\n    StaticInstruction,\n    SwitchExpression,\n    ThisParam,\n    ThrowExpression,\n    UnaryExpression,\n    Variable,\n)\n\n\nclass Op:\n    CMP = 'cmp'\n    ADD = '+'\n    SUB = '-'\n    MUL = '*'\n    DIV = '/'\n    MOD = '%'\n    AND = '&'\n    OR = '|'\n    XOR = '^'\n    EQUAL = '=='\n    NEQUAL = '!='\n    GREATER = '>'\n    LOWER = '<'\n    GEQUAL = '>='\n    LEQUAL = '<='\n    NEG = '-'\n    NOT = '~'\n    INTSHL = '<<'  # '(%s << ( %s & 0x1f ))'\n    INTSHR = '>>'  # '(%s >> ( %s & 0x1f ))'\n    LONGSHL = '<<'  # '(%s << ( %s & 0x3f ))'\n    LONGSHR = '>>'  # '(%s >> ( %s & 0x3f ))'\n\n\ndef get_variables(vmap, *variables):\n    res = []\n    for variable in variables:\n        res.append(vmap.setdefault(variable, Variable(variable)))\n    if len(res) == 1:\n        return res[0]\n    return res\n\n\ndef assign_const(dest_reg, cst, vmap):\n    return AssignExpression(get_variables(vmap, dest_reg), cst)\n\n\ndef assign_cmp(val_a, val_b, val_c, cmp_type, vmap):\n    reg_a, reg_b, reg_c = get_variables(vmap, val_a, val_b, val_c)\n    exp = BinaryCompExpression(Op.CMP, reg_b, reg_c, cmp_type)\n    return AssignExpression(reg_a, exp)\n\n\ndef load_array_exp(val_a, val_b, val_c, ar_type, vmap):\n    reg_a, reg_b, reg_c = get_variables(vmap, val_a, val_b, val_c)\n    return AssignExpression(reg_a, ArrayLoadExpression(reg_b, reg_c, ar_type))\n\n\ndef store_array_inst(val_a, val_b, val_c, ar_type, vmap):\n    reg_a, reg_b, reg_c = get_variables(vmap, val_a, val_b, val_c)\n    return ArrayStoreInstruction(reg_a, reg_b, reg_c, ar_type)\n\n\ndef assign_cast_exp(val_a, val_b, val_op, op_type, vmap):\n    reg_a, reg_b = get_variables(vmap, val_a, val_b)\n    return AssignExpression(reg_a, CastExpression(val_op, op_type, reg_b))\n\n\ndef assign_binary_exp(ins, val_op, op_type, vmap):\n    reg_a, reg_b, reg_c = get_variables(vmap, ins.AA, ins.BB, ins.CC)\n    return AssignExpression(\n        reg_a, BinaryExpression(val_op, reg_b, reg_c, op_type)\n    )\n\n\ndef assign_binary_2addr_exp(ins, val_op, op_type, vmap):\n    reg_a, reg_b = get_variables(vmap, ins.A, ins.B)\n    return AssignExpression(\n        reg_a, BinaryExpression2Addr(val_op, reg_a, reg_b, op_type)\n    )\n\n\ndef assign_lit(op_type, val_cst, val_a, val_b, vmap):\n    cst = Constant(val_cst, 'I')\n    var_a, var_b = get_variables(vmap, val_a, val_b)\n    return AssignExpression(var_a, BinaryExpressionLit(op_type, var_b, cst))\n\n\n## From here on, there are all defined instructions\n\n\n# nop\ndef nop(ins, vmap):\n    return NopExpression()\n\n\n# move vA, vB ( 4b, 4b )\ndef move(ins, vmap):\n    logger.debug('Move %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.A, ins.B)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move/from16 vAA, vBBBB ( 8b, 16b )\ndef movefrom16(ins, vmap):\n    logger.debug('MoveFrom16 %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.AA, ins.BBBB)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move/16 vAAAA, vBBBB ( 16b, 16b )\ndef move16(ins, vmap):\n    logger.debug('Move16 %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.AAAA, ins.BBBB)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move-wide vA, vB ( 4b, 4b )\ndef movewide(ins, vmap):\n    logger.debug('MoveWide %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.A, ins.B)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move-wide/from16 vAA, vBBBB ( 8b, 16b )\ndef movewidefrom16(ins, vmap):\n    logger.debug('MoveWideFrom16 : %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.AA, ins.BBBB)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move-wide/16 vAAAA, vBBBB ( 16b, 16b )\ndef movewide16(ins, vmap):\n    logger.debug('MoveWide16 %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.AAAA, ins.BBBB)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move-object vA, vB ( 4b, 4b )\ndef moveobject(ins, vmap):\n    logger.debug('MoveObject %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.A, ins.B)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move-object/from16 vAA, vBBBB ( 8b, 16b )\ndef moveobjectfrom16(ins, vmap):\n    logger.debug('MoveObjectFrom16 : %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.AA, ins.BBBB)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move-object/16 vAAAA, vBBBB ( 16b, 16b )\ndef moveobject16(ins, vmap):\n    logger.debug('MoveObject16 : %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.AAAA, ins.BBBB)\n    return MoveExpression(reg_a, reg_b)\n\n\n# move-result vAA ( 8b )\ndef moveresult(ins, vmap, ret):\n    logger.debug('MoveResult : %s', ins.get_output())\n    return MoveResultExpression(get_variables(vmap, ins.AA), ret)\n\n\n# move-result-wide vAA ( 8b )\ndef moveresultwide(ins, vmap, ret):\n    logger.debug('MoveResultWide : %s', ins.get_output())\n    return MoveResultExpression(get_variables(vmap, ins.AA), ret)\n\n\n# move-result-object vAA ( 8b )\ndef moveresultobject(ins, vmap, ret):\n    logger.debug('MoveResultObject : %s', ins.get_output())\n    return MoveResultExpression(get_variables(vmap, ins.AA), ret)\n\n\n# move-exception vAA ( 8b )\ndef moveexception(ins, vmap, _type):\n    logger.debug('MoveException : %s', ins.get_output())\n    return MoveExceptionExpression(get_variables(vmap, ins.AA), _type)\n\n\n# return-void\ndef returnvoid(ins, vmap):\n    logger.debug('ReturnVoid')\n    return ReturnInstruction(None)\n\n\n# return vAA ( 8b )\ndef return_reg(ins, vmap):\n    logger.debug('Return : %s', ins.get_output())\n    return ReturnInstruction(get_variables(vmap, ins.AA))\n\n\n# return-wide vAA ( 8b )\ndef returnwide(ins, vmap):\n    logger.debug('ReturnWide : %s', ins.get_output())\n    return ReturnInstruction(get_variables(vmap, ins.AA))\n\n\n# return-object vAA ( 8b )\ndef returnobject(ins, vmap):\n    logger.debug('ReturnObject : %s', ins.get_output())\n    return ReturnInstruction(get_variables(vmap, ins.AA))\n\n\n# const/4 vA, #+B ( 4b, 4b )\ndef const4(ins, vmap):\n    logger.debug('Const4 : %s', ins.get_output())\n    cst = Constant(ins.B, 'I')\n    return assign_const(ins.A, cst, vmap)\n\n\n# const/16 vAA, #+BBBB ( 8b, 16b )\ndef const16(ins, vmap):\n    logger.debug('Const16 : %s', ins.get_output())\n    cst = Constant(ins.BBBB, 'I')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const vAA, #+BBBBBBBB ( 8b, 32b )\ndef const(ins, vmap):\n    logger.debug('Const : %s', ins.get_output())\n    cst = Constant(ins.BBBBBBBB, 'I')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const/high16 vAA, #+BBBB0000 ( 8b, 16b )\ndef consthigh16(ins, vmap):\n    logger.debug('ConstHigh16 : %s', ins.get_output())\n    cst = Constant(ins.BBBB, 'I')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const-wide/16 vAA, #+BBBB ( 8b, 16b )\ndef constwide16(ins, vmap):\n    logger.debug('ConstWide16 : %s', ins.get_output())\n    cst = Constant(ins.BBBB, 'J')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const-wide/32 vAA, #+BBBBBBBB ( 8b, 32b )\ndef constwide32(ins, vmap):\n    logger.debug('ConstWide32 : %s', ins.get_output())\n    cst = Constant(ins.BBBBBBBB, 'J')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const-wide vAA, #+BBBBBBBBBBBBBBBB ( 8b, 64b )\ndef constwide(ins, vmap):\n    logger.debug('ConstWide : %s', ins.get_output())\n    cst = Constant(ins.BBBBBBBBBBBBBBBB, 'J')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const-wide/high16 vAA, #+BBBB000000000000 ( 8b, 16b )\ndef constwidehigh16(ins, vmap):\n    logger.debug('ConstWideHigh16 : %s', ins.get_output())\n    cst = Constant(ins.BBBB, 'J')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const-string vAA ( 8b )\ndef conststring(ins, vmap):\n    logger.debug('ConstString : %s', ins.get_output())\n    cst = Constant(ins.get_raw_string(), 'Ljava/lang/String;')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const-string/jumbo vAA ( 8b )\ndef conststringjumbo(ins, vmap):\n    logger.debug('ConstStringJumbo %s', ins.get_output())\n    cst = Constant(ins.get_raw_string(), 'Ljava/lang/String;')\n    return assign_const(ins.AA, cst, vmap)\n\n\n# const-class vAA, type@BBBB ( 8b )\ndef constclass(ins, vmap):\n    logger.debug('ConstClass : %s', ins.get_output())\n    cst = Constant(\n        util.get_type(ins.get_string()),\n        'Ljava/lang/Class;',\n        descriptor=ins.get_string(),\n    )\n    return assign_const(ins.AA, cst, vmap)\n\n\n# monitor-enter vAA ( 8b )\ndef monitorenter(ins, vmap):\n    logger.debug('MonitorEnter : %s', ins.get_output())\n    return MonitorEnterExpression(get_variables(vmap, ins.AA))\n\n\n# monitor-exit vAA ( 8b )\ndef monitorexit(ins, vmap):\n    logger.debug('MonitorExit : %s', ins.get_output())\n    a = get_variables(vmap, ins.AA)\n    return MonitorExitExpression(a)\n\n\n# check-cast vAA ( 8b )\ndef checkcast(ins, vmap):\n    logger.debug('CheckCast: %s', ins.get_output())\n    cast_type = util.get_type(ins.get_translated_kind())\n    cast_var = get_variables(vmap, ins.AA)\n    cast_expr = CheckCastExpression(\n        cast_var, cast_type, descriptor=ins.get_translated_kind()\n    )\n    return AssignExpression(cast_var, cast_expr)\n\n\n# instance-of vA, vB ( 4b, 4b )\ndef instanceof(ins, vmap):\n    logger.debug('InstanceOf : %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.A, ins.B)\n    reg_c = BaseClass(\n        util.get_type(ins.get_translated_kind()),\n        descriptor=ins.get_translated_kind(),\n    )\n    exp = BinaryExpression('instanceof', reg_b, reg_c, 'Z')\n    return AssignExpression(reg_a, exp)\n\n\n# array-length vA, vB ( 4b, 4b )\ndef arraylength(ins, vmap):\n    logger.debug('ArrayLength: %s', ins.get_output())\n    reg_a, reg_b = get_variables(vmap, ins.A, ins.B)\n    return AssignExpression(reg_a, ArrayLengthExpression(reg_b))\n\n\n# new-instance vAA ( 8b )\ndef newinstance(ins, vmap):\n    logger.debug('NewInstance : %s', ins.get_output())\n    reg_a = get_variables(vmap, ins.AA)\n    ins_type = ins.cm.get_type(ins.BBBB)\n    return AssignExpression(reg_a, NewInstance(ins_type))\n\n\n# new-array vA, vB ( 8b, size )\ndef newarray(ins, vmap):\n    logger.debug('NewArray : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = NewArrayExpression(b, ins.cm.get_type(ins.CCCC))\n    return AssignExpression(a, exp)\n\n\n# filled-new-array {vD, vE, vF, vG, vA} ( 4b each )\ndef fillednewarray(ins, vmap, ret):\n    logger.debug('FilledNewArray : %s', ins.get_output())\n    c, d, e, f, g = get_variables(vmap, ins.C, ins.D, ins.E, ins.F, ins.G)\n    array_type = ins.cm.get_type(ins.BBBB)\n    exp = FilledArrayExpression(ins.A, array_type, [c, d, e, f, g][: ins.A])\n    return AssignExpression(ret, exp)\n\n\n# filled-new-array/range {vCCCC..vNNNN} ( 16b )\ndef fillednewarrayrange(ins, vmap, ret):\n    logger.debug('FilledNewArrayRange : %s', ins.get_output())\n    a, c, n = get_variables(vmap, ins.AA, ins.CCCC, ins.NNNN)\n    array_type = ins.cm.get_type(ins.BBBB)\n    exp = FilledArrayExpression(a, array_type, [c, n])\n    return AssignExpression(ret, exp)\n\n\n# fill-array-data vAA, +BBBBBBBB ( 8b, 32b )\ndef fillarraydata(ins, vmap, value):\n    logger.debug('FillArrayData : %s', ins.get_output())\n    return FillArrayExpression(get_variables(vmap, ins.AA), value)\n\n\n# fill-array-data-payload vAA, +BBBBBBBB ( 8b, 32b )\ndef fillarraydatapayload(ins, vmap):\n    logger.debug('FillArrayDataPayload : %s', ins.get_output())\n    return FillArrayExpression(None)\n\n\n# throw vAA ( 8b )\ndef throw(ins, vmap):\n    logger.debug('Throw : %s', ins.get_output())\n    return ThrowExpression(get_variables(vmap, ins.AA))\n\n\n# goto +AA ( 8b )\ndef goto(ins, vmap):\n    return NopExpression()\n\n\n# goto/16 +AAAA ( 16b )\ndef goto16(ins, vmap):\n    return NopExpression()\n\n\n# goto/32 +AAAAAAAA ( 32b )\ndef goto32(ins, vmap):\n    return NopExpression()\n\n\n# packed-switch vAA, +BBBBBBBB ( reg to test, 32b )\ndef packedswitch(ins, vmap):\n    logger.debug('PackedSwitch : %s', ins.get_output())\n    reg_a = get_variables(vmap, ins.AA)\n    return SwitchExpression(reg_a, ins.BBBBBBBB)\n\n\n# sparse-switch vAA, +BBBBBBBB ( reg to test, 32b )\ndef sparseswitch(ins, vmap):\n    logger.debug('SparseSwitch : %s', ins.get_output())\n    reg_a = get_variables(vmap, ins.AA)\n    return SwitchExpression(reg_a, ins.BBBBBBBB)\n\n\n# cmpl-float vAA, vBB, vCC ( 8b, 8b, 8b )\ndef cmplfloat(ins, vmap):\n    logger.debug('CmpglFloat : %s', ins.get_output())\n    return assign_cmp(ins.AA, ins.BB, ins.CC, 'F', vmap)\n\n\n# cmpg-float vAA, vBB, vCC ( 8b, 8b, 8b )\ndef cmpgfloat(ins, vmap):\n    logger.debug('CmpgFloat : %s', ins.get_output())\n    return assign_cmp(ins.AA, ins.BB, ins.CC, 'F', vmap)\n\n\n# cmpl-double vAA, vBB, vCC ( 8b, 8b, 8b )\ndef cmpldouble(ins, vmap):\n    logger.debug('CmplDouble : %s', ins.get_output())\n    return assign_cmp(ins.AA, ins.BB, ins.CC, 'D', vmap)\n\n\n# cmpg-double vAA, vBB, vCC ( 8b, 8b, 8b )\ndef cmpgdouble(ins, vmap):\n    logger.debug('CmpgDouble : %s', ins.get_output())\n    return assign_cmp(ins.AA, ins.BB, ins.CC, 'D', vmap)\n\n\n# cmp-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef cmplong(ins, vmap):\n    logger.debug('CmpLong : %s', ins.get_output())\n    return assign_cmp(ins.AA, ins.BB, ins.CC, 'J', vmap)\n\n\n# if-eq vA, vB, +CCCC ( 4b, 4b, 16b )\ndef ifeq(ins, vmap):\n    logger.debug('IfEq : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return ConditionalExpression(Op.EQUAL, a, b)\n\n\n# if-ne vA, vB, +CCCC ( 4b, 4b, 16b )\ndef ifne(ins, vmap):\n    logger.debug('IfNe : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return ConditionalExpression(Op.NEQUAL, a, b)\n\n\n# if-lt vA, vB, +CCCC ( 4b, 4b, 16b )\ndef iflt(ins, vmap):\n    logger.debug('IfLt : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return ConditionalExpression(Op.LOWER, a, b)\n\n\n# if-ge vA, vB, +CCCC ( 4b, 4b, 16b )\ndef ifge(ins, vmap):\n    logger.debug('IfGe : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return ConditionalExpression(Op.GEQUAL, a, b)\n\n\n# if-gt vA, vB, +CCCC ( 4b, 4b, 16b )\ndef ifgt(ins, vmap):\n    logger.debug('IfGt : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return ConditionalExpression(Op.GREATER, a, b)\n\n\n# if-le vA, vB, +CCCC ( 4b, 4b, 16b )\ndef ifle(ins, vmap):\n    logger.debug('IfLe : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return ConditionalExpression(Op.LEQUAL, a, b)\n\n\n# if-eqz vAA, +BBBB ( 8b, 16b )\ndef ifeqz(ins, vmap):\n    logger.debug('IfEqz : %s', ins.get_output())\n    return ConditionalZExpression(Op.EQUAL, get_variables(vmap, ins.AA))\n\n\n# if-nez vAA, +BBBB ( 8b, 16b )\ndef ifnez(ins, vmap):\n    logger.debug('IfNez : %s', ins.get_output())\n    return ConditionalZExpression(Op.NEQUAL, get_variables(vmap, ins.AA))\n\n\n# if-ltz vAA, +BBBB ( 8b, 16b )\ndef ifltz(ins, vmap):\n    logger.debug('IfLtz : %s', ins.get_output())\n    return ConditionalZExpression(Op.LOWER, get_variables(vmap, ins.AA))\n\n\n# if-gez vAA, +BBBB ( 8b, 16b )\ndef ifgez(ins, vmap):\n    logger.debug('IfGez : %s', ins.get_output())\n    return ConditionalZExpression(Op.GEQUAL, get_variables(vmap, ins.AA))\n\n\n# if-gtz vAA, +BBBB ( 8b, 16b )\ndef ifgtz(ins, vmap):\n    logger.debug('IfGtz : %s', ins.get_output())\n    return ConditionalZExpression(Op.GREATER, get_variables(vmap, ins.AA))\n\n\n# if-lez vAA, +BBBB (8b, 16b )\ndef iflez(ins, vmap):\n    logger.debug('IfLez : %s', ins.get_output())\n    return ConditionalZExpression(Op.LEQUAL, get_variables(vmap, ins.AA))\n\n\n# TODO: check type for all aget\n# aget vAA, vBB, vCC ( 8b, 8b, 8b )\ndef aget(ins, vmap):\n    logger.debug('AGet : %s', ins.get_output())\n    return load_array_exp(ins.AA, ins.BB, ins.CC, None, vmap)\n\n\n# aget-wide vAA, vBB, vCC ( 8b, 8b, 8b )\ndef agetwide(ins, vmap):\n    logger.debug('AGetWide : %s', ins.get_output())\n    return load_array_exp(ins.AA, ins.BB, ins.CC, 'W', vmap)\n\n\n# aget-object vAA, vBB, vCC ( 8b, 8b, 8b )\ndef agetobject(ins, vmap):\n    logger.debug('AGetObject : %s', ins.get_output())\n    return load_array_exp(ins.AA, ins.BB, ins.CC, 'O', vmap)\n\n\n# aget-boolean vAA, vBB, vCC ( 8b, 8b, 8b )\ndef agetboolean(ins, vmap):\n    logger.debug('AGetBoolean : %s', ins.get_output())\n    return load_array_exp(ins.AA, ins.BB, ins.CC, 'Z', vmap)\n\n\n# aget-byte vAA, vBB, vCC ( 8b, 8b, 8b )\ndef agetbyte(ins, vmap):\n    logger.debug('AGetByte : %s', ins.get_output())\n    return load_array_exp(ins.AA, ins.BB, ins.CC, 'B', vmap)\n\n\n# aget-char vAA, vBB, vCC ( 8b, 8b, 8b )\ndef agetchar(ins, vmap):\n    logger.debug('AGetChar : %s', ins.get_output())\n    return load_array_exp(ins.AA, ins.BB, ins.CC, 'C', vmap)\n\n\n# aget-short vAA, vBB, vCC ( 8b, 8b, 8b )\ndef agetshort(ins, vmap):\n    logger.debug('AGetShort : %s', ins.get_output())\n    return load_array_exp(ins.AA, ins.BB, ins.CC, 'S', vmap)\n\n\n# aput vAA, vBB, vCC\ndef aput(ins, vmap):\n    logger.debug('APut : %s', ins.get_output())\n    return store_array_inst(ins.AA, ins.BB, ins.CC, None, vmap)\n\n\n# aput-wide vAA, vBB, vCC ( 8b, 8b, 8b )\ndef aputwide(ins, vmap):\n    logger.debug('APutWide : %s', ins.get_output())\n    return store_array_inst(ins.AA, ins.BB, ins.CC, 'W', vmap)\n\n\n# aput-object vAA, vBB, vCC ( 8b, 8b, 8b )\ndef aputobject(ins, vmap):\n    logger.debug('APutObject : %s', ins.get_output())\n    return store_array_inst(ins.AA, ins.BB, ins.CC, 'O', vmap)\n\n\n# aput-boolean vAA, vBB, vCC ( 8b, 8b, 8b )\ndef aputboolean(ins, vmap):\n    logger.debug('APutBoolean : %s', ins.get_output())\n    return store_array_inst(ins.AA, ins.BB, ins.CC, 'Z', vmap)\n\n\n# aput-byte vAA, vBB, vCC ( 8b, 8b, 8b )\ndef aputbyte(ins, vmap):\n    logger.debug('APutByte : %s', ins.get_output())\n    return store_array_inst(ins.AA, ins.BB, ins.CC, 'B', vmap)\n\n\n# aput-char vAA, vBB, vCC ( 8b, 8b, 8b )\ndef aputchar(ins, vmap):\n    logger.debug('APutChar : %s', ins.get_output())\n    return store_array_inst(ins.AA, ins.BB, ins.CC, 'C', vmap)\n\n\n# aput-short vAA, vBB, vCC ( 8b, 8b, 8b )\ndef aputshort(ins, vmap):\n    logger.debug('APutShort : %s', ins.get_output())\n    return store_array_inst(ins.AA, ins.BB, ins.CC, 'S', vmap)\n\n\n# iget vA, vB ( 4b, 4b )\ndef iget(ins, vmap):\n    logger.debug('IGet : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = InstanceExpression(b, klass, ftype, name)\n    return AssignExpression(a, exp)\n\n\n# iget-wide vA, vB ( 4b, 4b )\ndef igetwide(ins, vmap):\n    logger.debug('IGetWide : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = InstanceExpression(b, klass, ftype, name)\n    return AssignExpression(a, exp)\n\n\n# iget-object vA, vB ( 4b, 4b )\ndef igetobject(ins, vmap):\n    logger.debug('IGetObject : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = InstanceExpression(b, klass, ftype, name)\n    return AssignExpression(a, exp)\n\n\n# iget-boolean vA, vB ( 4b, 4b )\ndef igetboolean(ins, vmap):\n    logger.debug('IGetBoolean : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = InstanceExpression(b, klass, ftype, name)\n    return AssignExpression(a, exp)\n\n\n# iget-byte vA, vB ( 4b, 4b )\ndef igetbyte(ins, vmap):\n    logger.debug('IGetByte : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = InstanceExpression(b, klass, ftype, name)\n    return AssignExpression(a, exp)\n\n\n# iget-char vA, vB ( 4b, 4b )\ndef igetchar(ins, vmap):\n    logger.debug('IGetChar : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = InstanceExpression(b, klass, ftype, name)\n    return AssignExpression(a, exp)\n\n\n# iget-short vA, vB ( 4b, 4b )\ndef igetshort(ins, vmap):\n    logger.debug('IGetShort : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = InstanceExpression(b, klass, ftype, name)\n    return AssignExpression(a, exp)\n\n\n# iput vA, vB ( 4b, 4b )\ndef iput(ins, vmap):\n    logger.debug('IPut %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return InstanceInstruction(a, b, klass, atype, name)\n\n\n# iput-wide vA, vB ( 4b, 4b )\ndef iputwide(ins, vmap):\n    logger.debug('IPutWide %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return InstanceInstruction(a, b, klass, atype, name)\n\n\n# iput-object vA, vB ( 4b, 4b )\ndef iputobject(ins, vmap):\n    logger.debug('IPutObject %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return InstanceInstruction(a, b, klass, atype, name)\n\n\n# iput-boolean vA, vB ( 4b, 4b )\ndef iputboolean(ins, vmap):\n    logger.debug('IPutBoolean %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return InstanceInstruction(a, b, klass, atype, name)\n\n\n# iput-byte vA, vB ( 4b, 4b )\ndef iputbyte(ins, vmap):\n    logger.debug('IPutByte %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return InstanceInstruction(a, b, klass, atype, name)\n\n\n# iput-char vA, vB ( 4b, 4b )\ndef iputchar(ins, vmap):\n    logger.debug('IPutChar %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return InstanceInstruction(a, b, klass, atype, name)\n\n\n# iput-short vA, vB ( 4b, 4b )\ndef iputshort(ins, vmap):\n    logger.debug('IPutShort %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.CCCC)\n    a, b = get_variables(vmap, ins.A, ins.B)\n    return InstanceInstruction(a, b, klass, atype, name)\n\n\n# sget vAA ( 8b )\ndef sget(ins, vmap):\n    logger.debug('SGet : %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.BBBB)\n    exp = StaticExpression(klass, atype, name)\n    a = get_variables(vmap, ins.AA)\n    return AssignExpression(a, exp)\n\n\n# sget-wide vAA ( 8b )\ndef sgetwide(ins, vmap):\n    logger.debug('SGetWide : %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.BBBB)\n    exp = StaticExpression(klass, atype, name)\n    a = get_variables(vmap, ins.AA)\n    return AssignExpression(a, exp)\n\n\n# sget-object vAA ( 8b )\ndef sgetobject(ins, vmap):\n    logger.debug('SGetObject : %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.BBBB)\n    exp = StaticExpression(klass, atype, name)\n    a = get_variables(vmap, ins.AA)\n    return AssignExpression(a, exp)\n\n\n# sget-boolean vAA ( 8b )\ndef sgetboolean(ins, vmap):\n    logger.debug('SGetBoolean : %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.BBBB)\n    exp = StaticExpression(klass, atype, name)\n    a = get_variables(vmap, ins.AA)\n    return AssignExpression(a, exp)\n\n\n# sget-byte vAA ( 8b )\ndef sgetbyte(ins, vmap):\n    logger.debug('SGetByte : %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.BBBB)\n    exp = StaticExpression(klass, atype, name)\n    a = get_variables(vmap, ins.AA)\n    return AssignExpression(a, exp)\n\n\n# sget-char vAA ( 8b )\ndef sgetchar(ins, vmap):\n    logger.debug('SGetChar : %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.BBBB)\n    exp = StaticExpression(klass, atype, name)\n    a = get_variables(vmap, ins.AA)\n    return AssignExpression(a, exp)\n\n\n# sget-short vAA ( 8b )\ndef sgetshort(ins, vmap):\n    logger.debug('SGetShort : %s', ins.get_output())\n    klass, atype, name = ins.cm.get_field(ins.BBBB)\n    exp = StaticExpression(klass, atype, name)\n    a = get_variables(vmap, ins.AA)\n    return AssignExpression(a, exp)\n\n\n# sput vAA ( 8b )\ndef sput(ins, vmap):\n    logger.debug('SPut : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.BBBB)\n    a = get_variables(vmap, ins.AA)\n    return StaticInstruction(a, klass, ftype, name)\n\n\n# sput-wide vAA ( 8b )\ndef sputwide(ins, vmap):\n    logger.debug('SPutWide : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.BBBB)\n    a = get_variables(vmap, ins.AA)\n    return StaticInstruction(a, klass, ftype, name)\n\n\n# sput-object vAA ( 8b )\ndef sputobject(ins, vmap):\n    logger.debug('SPutObject : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.BBBB)\n    a = get_variables(vmap, ins.AA)\n    return StaticInstruction(a, klass, ftype, name)\n\n\n# sput-boolean vAA ( 8b )\ndef sputboolean(ins, vmap):\n    logger.debug('SPutBoolean : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.BBBB)\n    a = get_variables(vmap, ins.AA)\n    return StaticInstruction(a, klass, ftype, name)\n\n\n# sput-wide vAA ( 8b )\ndef sputbyte(ins, vmap):\n    logger.debug('SPutByte : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.BBBB)\n    a = get_variables(vmap, ins.AA)\n    return StaticInstruction(a, klass, ftype, name)\n\n\n# sput-char vAA ( 8b )\ndef sputchar(ins, vmap):\n    logger.debug('SPutChar : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.BBBB)\n    a = get_variables(vmap, ins.AA)\n    return StaticInstruction(a, klass, ftype, name)\n\n\n# sput-short vAA ( 8b )\ndef sputshort(ins, vmap):\n    logger.debug('SPutShort : %s', ins.get_output())\n    klass, ftype, name = ins.cm.get_field(ins.BBBB)\n    a = get_variables(vmap, ins.AA)\n    return StaticInstruction(a, klass, ftype, name)\n\n\ndef get_args(vmap, param_type, largs):\n    num_param = 0\n    args = []\n    if len(param_type) > len(largs):\n        logger.warning('len(param_type) > len(largs) !')\n        return args\n    for type_ in param_type:\n        param = largs[num_param]\n        args.append(param)\n        num_param += util.get_type_size(type_)\n\n    if len(param_type) == 1:\n        return [get_variables(vmap, *args)]\n    return get_variables(vmap, *args)\n\n\n# invoke-virtual {vD, vE, vF, vG, vA} ( 4b each )\ndef invokevirtual(ins, vmap, ret):\n    logger.debug('InvokeVirtual : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = [ins.D, ins.E, ins.F, ins.G]\n    args = get_args(vmap, param_type, largs)\n    c = get_variables(vmap, ins.C)\n    returned = None if ret_type == 'V' else ret.new()\n    exp = InvokeInstruction(\n        cls_name, name, c, ret_type, param_type, args, method.get_triple()\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-super {vD, vE, vF, vG, vA} ( 4b each )\ndef invokesuper(ins, vmap, ret):\n    logger.debug('InvokeSuper : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = [ins.D, ins.E, ins.F, ins.G]\n    args = get_args(vmap, param_type, largs)\n    superclass = BaseClass('super')\n    returned = None if ret_type == 'V' else ret.new()\n    exp = InvokeInstruction(\n        cls_name,\n        name,\n        superclass,\n        ret_type,\n        param_type,\n        args,\n        method.get_triple(),\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-direct {vD, vE, vF, vG, vA} ( 4b each )\ndef invokedirect(ins, vmap, ret):\n    logger.debug('InvokeDirect : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = [ins.D, ins.E, ins.F, ins.G]\n    args = get_args(vmap, param_type, largs)\n    base = get_variables(vmap, ins.C)\n    if ret_type == 'V':\n        if isinstance(base, ThisParam):\n            returned = None\n        else:\n            returned = base\n            ret.set_to(base)\n    else:\n        returned = ret.new()\n    exp = InvokeDirectInstruction(\n        cls_name, name, base, ret_type, param_type, args, method.get_triple()\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-static {vD, vE, vF, vG, vA} ( 4b each )\ndef invokestatic(ins, vmap, ret):\n    logger.debug('InvokeStatic : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = [ins.C, ins.D, ins.E, ins.F, ins.G]\n    args = get_args(vmap, param_type, largs)\n    base = BaseClass(cls_name, descriptor=method.get_class_name())\n    returned = None if ret_type == 'V' else ret.new()\n    exp = InvokeStaticInstruction(\n        cls_name, name, base, ret_type, param_type, args, method.get_triple()\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-interface {vD, vE, vF, vG, vA} ( 4b each )\ndef invokeinterface(ins, vmap, ret):\n    logger.debug('InvokeInterface : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = [ins.D, ins.E, ins.F, ins.G]\n    args = get_args(vmap, param_type, largs)\n    c = get_variables(vmap, ins.C)\n    returned = None if ret_type == 'V' else ret.new()\n    exp = InvokeInstruction(\n        cls_name, name, c, ret_type, param_type, args, method.get_triple()\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-virtual/range {vCCCC..vNNNN} ( 16b each )\ndef invokevirtualrange(ins, vmap, ret):\n    logger.debug('InvokeVirtualRange : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = list(range(ins.CCCC, ins.NNNN + 1))\n    this_arg = get_variables(vmap, largs[0])\n    args = get_args(vmap, param_type, largs[1:])\n    returned = None if ret_type == 'V' else ret.new()\n    exp = InvokeRangeInstruction(\n        cls_name,\n        name,\n        ret_type,\n        param_type,\n        [this_arg] + args,\n        method.get_triple(),\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-super/range {vCCCC..vNNNN} ( 16b each )\ndef invokesuperrange(ins, vmap, ret):\n    logger.debug('InvokeSuperRange : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = list(range(ins.CCCC, ins.NNNN + 1))\n    args = get_args(vmap, param_type, largs[1:])\n    base = get_variables(vmap, ins.CCCC)\n    if ret_type != 'V':\n        returned = ret.new()\n    else:\n        returned = base\n        ret.set_to(base)\n    superclass = BaseClass('super')\n    exp = InvokeRangeInstruction(\n        cls_name,\n        name,\n        ret_type,\n        param_type,\n        [superclass] + args,\n        method.get_triple(),\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-direct/range {vCCCC..vNNNN} ( 16b each )\ndef invokedirectrange(ins, vmap, ret):\n    logger.debug('InvokeDirectRange : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = list(range(ins.CCCC, ins.NNNN + 1))\n    this_arg = get_variables(vmap, largs[0])\n    args = get_args(vmap, param_type, largs[1:])\n    base = get_variables(vmap, ins.CCCC)\n    if ret_type != 'V':\n        returned = ret.new()\n    else:\n        returned = base\n        ret.set_to(base)\n    exp = InvokeRangeInstruction(\n        cls_name,\n        name,\n        ret_type,\n        param_type,\n        [this_arg] + args,\n        method.get_triple(),\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-static/range {vCCCC..vNNNN} ( 16b each )\ndef invokestaticrange(ins, vmap, ret):\n    logger.debug('InvokeStaticRange : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = list(range(ins.CCCC, ins.NNNN + 1))\n    args = get_args(vmap, param_type, largs)\n    base = BaseClass(cls_name, descriptor=method.get_class_name())\n    returned = None if ret_type == 'V' else ret.new()\n    exp = InvokeStaticInstruction(\n        cls_name, name, base, ret_type, param_type, args, method.get_triple()\n    )\n    return AssignExpression(returned, exp)\n\n\n# invoke-interface/range {vCCCC..vNNNN} ( 16b each )\ndef invokeinterfacerange(ins, vmap, ret):\n    logger.debug('InvokeInterfaceRange : %s', ins.get_output())\n    method = ins.cm.get_method_ref(ins.BBBB)\n    cls_name = util.get_type(method.get_class_name())\n    name = method.get_name()\n    param_type, ret_type = method.get_proto()\n    param_type = util.get_params_type(param_type)\n    largs = list(range(ins.CCCC, ins.NNNN + 1))\n    base_arg = get_variables(vmap, largs[0])\n    args = get_args(vmap, param_type, largs[1:])\n    returned = None if ret_type == 'V' else ret.new()\n    exp = InvokeRangeInstruction(\n        cls_name,\n        name,\n        ret_type,\n        param_type,\n        [base_arg] + args,\n        method.get_triple(),\n    )\n    return AssignExpression(returned, exp)\n\n\n# neg-int vA, vB ( 4b, 4b )\ndef negint(ins, vmap):\n    logger.debug('NegInt : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = UnaryExpression(Op.NEG, b, 'I')\n    return AssignExpression(a, exp)\n\n\n# not-int vA, vB ( 4b, 4b )\ndef notint(ins, vmap):\n    logger.debug('NotInt : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = UnaryExpression(Op.NOT, b, 'I')\n    return AssignExpression(a, exp)\n\n\n# neg-long vA, vB ( 4b, 4b )\ndef neglong(ins, vmap):\n    logger.debug('NegLong : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = UnaryExpression(Op.NEG, b, 'J')\n    return AssignExpression(a, exp)\n\n\n# not-long vA, vB ( 4b, 4b )\ndef notlong(ins, vmap):\n    logger.debug('NotLong : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = UnaryExpression(Op.NOT, b, 'J')\n    return AssignExpression(a, exp)\n\n\n# neg-float vA, vB ( 4b, 4b )\ndef negfloat(ins, vmap):\n    logger.debug('NegFloat : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = UnaryExpression(Op.NEG, b, 'F')\n    return AssignExpression(a, exp)\n\n\n# neg-double vA, vB ( 4b, 4b )\ndef negdouble(ins, vmap):\n    logger.debug('NegDouble : %s', ins.get_output())\n    a, b = get_variables(vmap, ins.A, ins.B)\n    exp = UnaryExpression(Op.NEG, b, 'D')\n    return AssignExpression(a, exp)\n\n\n# int-to-long vA, vB ( 4b, 4b )\ndef inttolong(ins, vmap):\n    logger.debug('IntToLong : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(long)', 'J', vmap)\n\n\n# int-to-float vA, vB ( 4b, 4b )\ndef inttofloat(ins, vmap):\n    logger.debug('IntToFloat : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(float)', 'F', vmap)\n\n\n# int-to-double vA, vB ( 4b, 4b )\ndef inttodouble(ins, vmap):\n    logger.debug('IntToDouble : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(double)', 'D', vmap)\n\n\n# long-to-int vA, vB ( 4b, 4b )\ndef longtoint(ins, vmap):\n    logger.debug('LongToInt : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(int)', 'I', vmap)\n\n\n# long-to-float vA, vB ( 4b, 4b )\ndef longtofloat(ins, vmap):\n    logger.debug('LongToFloat : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(float)', 'F', vmap)\n\n\n# long-to-double vA, vB ( 4b, 4b )\ndef longtodouble(ins, vmap):\n    logger.debug('LongToDouble : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(double)', 'D', vmap)\n\n\n# float-to-int vA, vB ( 4b, 4b )\ndef floattoint(ins, vmap):\n    logger.debug('FloatToInt : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(int)', 'I', vmap)\n\n\n# float-to-long vA, vB ( 4b, 4b )\ndef floattolong(ins, vmap):\n    logger.debug('FloatToLong : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(long)', 'J', vmap)\n\n\n# float-to-double vA, vB ( 4b, 4b )\ndef floattodouble(ins, vmap):\n    logger.debug('FloatToDouble : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(double)', 'D', vmap)\n\n\n# double-to-int vA, vB ( 4b, 4b )\ndef doubletoint(ins, vmap):\n    logger.debug('DoubleToInt : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(int)', 'I', vmap)\n\n\n# double-to-long vA, vB ( 4b, 4b )\ndef doubletolong(ins, vmap):\n    logger.debug('DoubleToLong : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(long)', 'J', vmap)\n\n\n# double-to-float vA, vB ( 4b, 4b )\ndef doubletofloat(ins, vmap):\n    logger.debug('DoubleToFloat : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(float)', 'F', vmap)\n\n\n# int-to-byte vA, vB ( 4b, 4b )\ndef inttobyte(ins, vmap):\n    logger.debug('IntToByte : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(byte)', 'B', vmap)\n\n\n# int-to-char vA, vB ( 4b, 4b )\ndef inttochar(ins, vmap):\n    logger.debug('IntToChar : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(char)', 'C', vmap)\n\n\n# int-to-short vA, vB ( 4b, 4b )\ndef inttoshort(ins, vmap):\n    logger.debug('IntToShort : %s', ins.get_output())\n    return assign_cast_exp(ins.A, ins.B, '(short)', 'S', vmap)\n\n\n# add-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef addint(ins, vmap):\n    logger.debug('AddInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.ADD, 'I', vmap)\n\n\n# sub-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef subint(ins, vmap):\n    logger.debug('SubInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.SUB, 'I', vmap)\n\n\n# mul-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef mulint(ins, vmap):\n    logger.debug('MulInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.MUL, 'I', vmap)\n\n\n# div-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef divint(ins, vmap):\n    logger.debug('DivInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.DIV, 'I', vmap)\n\n\n# rem-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef remint(ins, vmap):\n    logger.debug('RemInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.MOD, 'I', vmap)\n\n\n# and-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef andint(ins, vmap):\n    logger.debug('AndInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.AND, 'I', vmap)\n\n\n# or-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef orint(ins, vmap):\n    logger.debug('OrInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.OR, 'I', vmap)\n\n\n# xor-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef xorint(ins, vmap):\n    logger.debug('XorInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.XOR, 'I', vmap)\n\n\n# shl-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef shlint(ins, vmap):\n    logger.debug('ShlInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.INTSHL, 'I', vmap)\n\n\n# shr-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef shrint(ins, vmap):\n    logger.debug('ShrInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.INTSHR, 'I', vmap)\n\n\n# ushr-int vAA, vBB, vCC ( 8b, 8b, 8b )\ndef ushrint(ins, vmap):\n    logger.debug('UShrInt : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.INTSHR, 'I', vmap)\n\n\n# add-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef addlong(ins, vmap):\n    logger.debug('AddLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.ADD, 'J', vmap)\n\n\n# sub-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef sublong(ins, vmap):\n    logger.debug('SubLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.SUB, 'J', vmap)\n\n\n# mul-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef mullong(ins, vmap):\n    logger.debug('MulLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.MUL, 'J', vmap)\n\n\n# div-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef divlong(ins, vmap):\n    logger.debug('DivLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.DIV, 'J', vmap)\n\n\n# rem-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef remlong(ins, vmap):\n    logger.debug('RemLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.MOD, 'J', vmap)\n\n\n# and-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef andlong(ins, vmap):\n    logger.debug('AndLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.AND, 'J', vmap)\n\n\n# or-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef orlong(ins, vmap):\n    logger.debug('OrLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.OR, 'J', vmap)\n\n\n# xor-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef xorlong(ins, vmap):\n    logger.debug('XorLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.XOR, 'J', vmap)\n\n\n# shl-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef shllong(ins, vmap):\n    logger.debug('ShlLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.LONGSHL, 'J', vmap)\n\n\n# shr-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef shrlong(ins, vmap):\n    logger.debug('ShrLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.LONGSHR, 'J', vmap)\n\n\n# ushr-long vAA, vBB, vCC ( 8b, 8b, 8b )\ndef ushrlong(ins, vmap):\n    logger.debug('UShrLong : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.LONGSHR, 'J', vmap)\n\n\n# add-float vAA, vBB, vCC ( 8b, 8b, 8b )\ndef addfloat(ins, vmap):\n    logger.debug('AddFloat : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.ADD, 'F', vmap)\n\n\n# sub-float vAA, vBB, vCC ( 8b, 8b, 8b )\ndef subfloat(ins, vmap):\n    logger.debug('SubFloat : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.SUB, 'F', vmap)\n\n\n# mul-float vAA, vBB, vCC ( 8b, 8b, 8b )\ndef mulfloat(ins, vmap):\n    logger.debug('MulFloat : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.MUL, 'F', vmap)\n\n\n# div-float vAA, vBB, vCC ( 8b, 8b, 8b )\ndef divfloat(ins, vmap):\n    logger.debug('DivFloat : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.DIV, 'F', vmap)\n\n\n# rem-float vAA, vBB, vCC ( 8b, 8b, 8b )\ndef remfloat(ins, vmap):\n    logger.debug('RemFloat : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.MOD, 'F', vmap)\n\n\n# add-double vAA, vBB, vCC ( 8b, 8b, 8b )\ndef adddouble(ins, vmap):\n    logger.debug('AddDouble : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.ADD, 'D', vmap)\n\n\n# sub-double vAA, vBB, vCC ( 8b, 8b, 8b )\ndef subdouble(ins, vmap):\n    logger.debug('SubDouble : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.SUB, 'D', vmap)\n\n\n# mul-double vAA, vBB, vCC ( 8b, 8b, 8b )\ndef muldouble(ins, vmap):\n    logger.debug('MulDouble : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.MUL, 'D', vmap)\n\n\n# div-double vAA, vBB, vCC ( 8b, 8b, 8b )\ndef divdouble(ins, vmap):\n    logger.debug('DivDouble : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.DIV, 'D', vmap)\n\n\n# rem-double vAA, vBB, vCC ( 8b, 8b, 8b )\ndef remdouble(ins, vmap):\n    logger.debug('RemDouble : %s', ins.get_output())\n    return assign_binary_exp(ins, Op.MOD, 'D', vmap)\n\n\n# add-int/2addr vA, vB ( 4b, 4b )\ndef addint2addr(ins, vmap):\n    logger.debug('AddInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.ADD, 'I', vmap)\n\n\n# sub-int/2addr vA, vB ( 4b, 4b )\ndef subint2addr(ins, vmap):\n    logger.debug('SubInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.SUB, 'I', vmap)\n\n\n# mul-int/2addr vA, vB ( 4b, 4b )\ndef mulint2addr(ins, vmap):\n    logger.debug('MulInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.MUL, 'I', vmap)\n\n\n# div-int/2addr vA, vB ( 4b, 4b )\ndef divint2addr(ins, vmap):\n    logger.debug('DivInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.DIV, 'I', vmap)\n\n\n# rem-int/2addr vA, vB ( 4b, 4b )\ndef remint2addr(ins, vmap):\n    logger.debug('RemInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.MOD, 'I', vmap)\n\n\n# and-int/2addr vA, vB ( 4b, 4b )\ndef andint2addr(ins, vmap):\n    logger.debug('AndInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.AND, 'I', vmap)\n\n\n# or-int/2addr vA, vB ( 4b, 4b )\ndef orint2addr(ins, vmap):\n    logger.debug('OrInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.OR, 'I', vmap)\n\n\n# xor-int/2addr vA, vB ( 4b, 4b )\ndef xorint2addr(ins, vmap):\n    logger.debug('XorInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.XOR, 'I', vmap)\n\n\n# shl-int/2addr vA, vB ( 4b, 4b )\ndef shlint2addr(ins, vmap):\n    logger.debug('ShlInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.INTSHL, 'I', vmap)\n\n\n# shr-int/2addr vA, vB ( 4b, 4b )\ndef shrint2addr(ins, vmap):\n    logger.debug('ShrInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.INTSHR, 'I', vmap)\n\n\n# ushr-int/2addr vA, vB ( 4b, 4b )\ndef ushrint2addr(ins, vmap):\n    logger.debug('UShrInt2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.INTSHR, 'I', vmap)\n\n\n# add-long/2addr vA, vB ( 4b, 4b )\ndef addlong2addr(ins, vmap):\n    logger.debug('AddLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.ADD, 'J', vmap)\n\n\n# sub-long/2addr vA, vB ( 4b, 4b )\ndef sublong2addr(ins, vmap):\n    logger.debug('SubLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.SUB, 'J', vmap)\n\n\n# mul-long/2addr vA, vB ( 4b, 4b )\ndef mullong2addr(ins, vmap):\n    logger.debug('MulLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.MUL, 'J', vmap)\n\n\n# div-long/2addr vA, vB ( 4b, 4b )\ndef divlong2addr(ins, vmap):\n    logger.debug('DivLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.DIV, 'J', vmap)\n\n\n# rem-long/2addr vA, vB ( 4b, 4b )\ndef remlong2addr(ins, vmap):\n    logger.debug('RemLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.MOD, 'J', vmap)\n\n\n# and-long/2addr vA, vB ( 4b, 4b )\ndef andlong2addr(ins, vmap):\n    logger.debug('AndLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.AND, 'J', vmap)\n\n\n# or-long/2addr vA, vB ( 4b, 4b )\ndef orlong2addr(ins, vmap):\n    logger.debug('OrLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.OR, 'J', vmap)\n\n\n# xor-long/2addr vA, vB ( 4b, 4b )\ndef xorlong2addr(ins, vmap):\n    logger.debug('XorLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.XOR, 'J', vmap)\n\n\n# shl-long/2addr vA, vB ( 4b, 4b )\ndef shllong2addr(ins, vmap):\n    logger.debug('ShlLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.LONGSHL, 'J', vmap)\n\n\n# shr-long/2addr vA, vB ( 4b, 4b )\ndef shrlong2addr(ins, vmap):\n    logger.debug('ShrLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.LONGSHR, 'J', vmap)\n\n\n# ushr-long/2addr vA, vB ( 4b, 4b )\ndef ushrlong2addr(ins, vmap):\n    logger.debug('UShrLong2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.LONGSHR, 'J', vmap)\n\n\n# add-float/2addr vA, vB ( 4b, 4b )\ndef addfloat2addr(ins, vmap):\n    logger.debug('AddFloat2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.ADD, 'F', vmap)\n\n\n# sub-float/2addr vA, vB ( 4b, 4b )\ndef subfloat2addr(ins, vmap):\n    logger.debug('SubFloat2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.SUB, 'F', vmap)\n\n\n# mul-float/2addr vA, vB ( 4b, 4b )\ndef mulfloat2addr(ins, vmap):\n    logger.debug('MulFloat2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.MUL, 'F', vmap)\n\n\n# div-float/2addr vA, vB ( 4b, 4b )\ndef divfloat2addr(ins, vmap):\n    logger.debug('DivFloat2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.DIV, 'F', vmap)\n\n\n# rem-float/2addr vA, vB ( 4b, 4b )\ndef remfloat2addr(ins, vmap):\n    logger.debug('RemFloat2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.MOD, 'F', vmap)\n\n\n# add-double/2addr vA, vB ( 4b, 4b )\ndef adddouble2addr(ins, vmap):\n    logger.debug('AddDouble2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.ADD, 'D', vmap)\n\n\n# sub-double/2addr vA, vB ( 4b, 4b )\ndef subdouble2addr(ins, vmap):\n    logger.debug('subDouble2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.SUB, 'D', vmap)\n\n\n# mul-double/2addr vA, vB ( 4b, 4b )\ndef muldouble2addr(ins, vmap):\n    logger.debug('MulDouble2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.MUL, 'D', vmap)\n\n\n# div-double/2addr vA, vB ( 4b, 4b )\ndef divdouble2addr(ins, vmap):\n    logger.debug('DivDouble2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.DIV, 'D', vmap)\n\n\n# rem-double/2addr vA, vB ( 4b, 4b )\ndef remdouble2addr(ins, vmap):\n    logger.debug('RemDouble2Addr : %s', ins.get_output())\n    return assign_binary_2addr_exp(ins, Op.MOD, 'D', vmap)\n\n\n# add-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )\ndef addintlit16(ins, vmap):\n    logger.debug('AddIntLit16 : %s', ins.get_output())\n    return assign_lit(Op.ADD, ins.CCCC, ins.A, ins.B, vmap)\n\n\n# rsub-int vA, vB, #+CCCC ( 4b, 4b, 16b )\ndef rsubint(ins, vmap):\n    logger.debug('RSubInt : %s', ins.get_output())\n    var_a, var_b = get_variables(vmap, ins.A, ins.B)\n    cst = Constant(ins.CCCC, 'I')\n    return AssignExpression(var_a, BinaryExpressionLit(Op.SUB, cst, var_b))\n\n\n# mul-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )\ndef mulintlit16(ins, vmap):\n    logger.debug('MulIntLit16 : %s', ins.get_output())\n    return assign_lit(Op.MUL, ins.CCCC, ins.A, ins.B, vmap)\n\n\n# div-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )\ndef divintlit16(ins, vmap):\n    logger.debug('DivIntLit16 : %s', ins.get_output())\n    return assign_lit(Op.DIV, ins.CCCC, ins.A, ins.B, vmap)\n\n\n# rem-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )\ndef remintlit16(ins, vmap):\n    logger.debug('RemIntLit16 : %s', ins.get_output())\n    return assign_lit(Op.MOD, ins.CCCC, ins.A, ins.B, vmap)\n\n\n# and-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )\ndef andintlit16(ins, vmap):\n    logger.debug('AndIntLit16 : %s', ins.get_output())\n    return assign_lit(Op.AND, ins.CCCC, ins.A, ins.B, vmap)\n\n\n# or-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )\ndef orintlit16(ins, vmap):\n    logger.debug('OrIntLit16 : %s', ins.get_output())\n    return assign_lit(Op.OR, ins.CCCC, ins.A, ins.B, vmap)\n\n\n# xor-int/lit16 vA, vB, #+CCCC ( 4b, 4b, 16b )\ndef xorintlit16(ins, vmap):\n    logger.debug('XorIntLit16 : %s', ins.get_output())\n    return assign_lit(Op.XOR, ins.CCCC, ins.A, ins.B, vmap)\n\n\n# add-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef addintlit8(ins, vmap):\n    logger.debug('AddIntLit8 : %s', ins.get_output())\n    literal, op = [(ins.CC, Op.ADD), (-ins.CC, Op.SUB)][ins.CC < 0]\n    return assign_lit(op, literal, ins.AA, ins.BB, vmap)\n\n\n# rsub-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef rsubintlit8(ins, vmap):\n    logger.debug('RSubIntLit8 : %s', ins.get_output())\n    var_a, var_b = get_variables(vmap, ins.AA, ins.BB)\n    cst = Constant(ins.CC, 'I')\n    return AssignExpression(var_a, BinaryExpressionLit(Op.SUB, cst, var_b))\n\n\n# mul-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef mulintlit8(ins, vmap):\n    logger.debug('MulIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.MUL, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# div-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef divintlit8(ins, vmap):\n    logger.debug('DivIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.DIV, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# rem-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef remintlit8(ins, vmap):\n    logger.debug('RemIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.MOD, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# and-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef andintlit8(ins, vmap):\n    logger.debug('AndIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.AND, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# or-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef orintlit8(ins, vmap):\n    logger.debug('OrIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.OR, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# xor-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef xorintlit8(ins, vmap):\n    logger.debug('XorIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.XOR, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# shl-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef shlintlit8(ins, vmap):\n    logger.debug('ShlIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.INTSHL, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# shr-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef shrintlit8(ins, vmap):\n    logger.debug('ShrIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.INTSHR, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# ushr-int/lit8 vAA, vBB, #+CC ( 8b, 8b, 8b )\ndef ushrintlit8(ins, vmap):\n    logger.debug('UShrIntLit8 : %s', ins.get_output())\n    return assign_lit(Op.INTSHR, ins.CC, ins.AA, ins.BB, vmap)\n\n\n# FIXME: Need to add all opcodes here, check for new unused ones.\n# FIXME: The instruction set is dalvik version specific\nINSTRUCTION_SET = [\n    # 0x00\n    nop,  # nop\n    move,  # move\n    movefrom16,  # move/from16\n    move16,  # move/16\n    movewide,  # move-wide\n    movewidefrom16,  # move-wide/from16\n    movewide16,  # move-wide/16\n    moveobject,  # move-object\n    moveobjectfrom16,  # move-object/from16\n    moveobject16,  # move-object/16\n    moveresult,  # move-result\n    moveresultwide,  # move-result-wide\n    moveresultobject,  # move-result-object\n    moveexception,  # move-exception\n    returnvoid,  # return-void\n    return_reg,  # return\n    # 0x10\n    returnwide,  # return-wide\n    returnobject,  # return-object\n    const4,  # const/4\n    const16,  # const/16\n    const,  # const\n    consthigh16,  # const/high16\n    constwide16,  # const-wide/16\n    constwide32,  # const-wide/32\n    constwide,  # const-wide\n    constwidehigh16,  # const-wide/high16\n    conststring,  # const-string\n    conststringjumbo,  # const-string/jumbo\n    constclass,  # const-class\n    monitorenter,  # monitor-enter\n    monitorexit,  # monitor-exit\n    checkcast,  # check-cast\n    # 0x20\n    instanceof,  # instance-of\n    arraylength,  # array-length\n    newinstance,  # new-instance\n    newarray,  # new-array\n    fillednewarray,  # filled-new-array\n    fillednewarrayrange,  # filled-new-array/range\n    fillarraydata,  # fill-array-data\n    throw,  # throw\n    goto,  # goto\n    goto16,  # goto/16\n    goto32,  # goto/32\n    packedswitch,  # packed-switch\n    sparseswitch,  # sparse-switch\n    cmplfloat,  # cmpl-float\n    cmpgfloat,  # cmpg-float\n    cmpldouble,  # cmpl-double\n    # 0x30\n    cmpgdouble,  # cmpg-double\n    cmplong,  # cmp-long\n    ifeq,  # if-eq\n    ifne,  # if-ne\n    iflt,  # if-lt\n    ifge,  # if-ge\n    ifgt,  # if-gt\n    ifle,  # if-le\n    ifeqz,  # if-eqz\n    ifnez,  # if-nez\n    ifltz,  # if-ltz\n    ifgez,  # if-gez\n    ifgtz,  # if-gtz\n    iflez,  # if-l\n    nop,  # unused\n    nop,  # unused\n    # 0x40\n    nop,  # unused\n    nop,  # unused\n    nop,  # unused\n    nop,  # unused\n    aget,  # aget\n    agetwide,  # aget-wide\n    agetobject,  # aget-object\n    agetboolean,  # aget-boolean\n    agetbyte,  # aget-byte\n    agetchar,  # aget-char\n    agetshort,  # aget-short\n    aput,  # aput\n    aputwide,  # aput-wide\n    aputobject,  # aput-object\n    aputboolean,  # aput-boolean\n    aputbyte,  # aput-byte\n    # 0x50\n    aputchar,  # aput-char\n    aputshort,  # aput-short\n    iget,  # iget\n    igetwide,  # iget-wide\n    igetobject,  # iget-object\n    igetboolean,  # iget-boolean\n    igetbyte,  # iget-byte\n    igetchar,  # iget-char\n    igetshort,  # iget-short\n    iput,  # iput\n    iputwide,  # iput-wide\n    iputobject,  # iput-object\n    iputboolean,  # iput-boolean\n    iputbyte,  # iput-byte\n    iputchar,  # iput-char\n    iputshort,  # iput-short\n    # 0x60\n    sget,  # sget\n    sgetwide,  # sget-wide\n    sgetobject,  # sget-object\n    sgetboolean,  # sget-boolean\n    sgetbyte,  # sget-byte\n    sgetchar,  # sget-char\n    sgetshort,  # sget-short\n    sput,  # sput\n    sputwide,  # sput-wide\n    sputobject,  # sput-object\n    sputboolean,  # sput-boolean\n    sputbyte,  # sput-byte\n    sputchar,  # sput-char\n    sputshort,  # sput-short\n    invokevirtual,  # invoke-virtual\n    invokesuper,  # invoke-super\n    # 0x70\n    invokedirect,  # invoke-direct\n    invokestatic,  # invoke-static\n    invokeinterface,  # invoke-interface\n    nop,  # unused\n    invokevirtualrange,  # invoke-virtual/range\n    invokesuperrange,  # invoke-super/range\n    invokedirectrange,  # invoke-direct/range\n    invokestaticrange,  # invoke-static/range\n    invokeinterfacerange,  # invoke-interface/range\n    nop,  # unused\n    nop,  # unused\n    negint,  # neg-int\n    notint,  # not-int\n    neglong,  # neg-long\n    notlong,  # not-long\n    negfloat,  # neg-float\n    # 0x80\n    negdouble,  # neg-double\n    inttolong,  # int-to-long\n    inttofloat,  # int-to-float\n    inttodouble,  # int-to-double\n    longtoint,  # long-to-int\n    longtofloat,  # long-to-float\n    longtodouble,  # long-to-double\n    floattoint,  # float-to-int\n    floattolong,  # float-to-long\n    floattodouble,  # float-to-double\n    doubletoint,  # double-to-int\n    doubletolong,  # double-to-long\n    doubletofloat,  # double-to-float\n    inttobyte,  # int-to-byte\n    inttochar,  # int-to-char\n    inttoshort,  # int-to-short\n    # 0x90\n    addint,  # add-int\n    subint,  # sub-int\n    mulint,  # mul-int\n    divint,  # div-int\n    remint,  # rem-int\n    andint,  # and-int\n    orint,  # or-int\n    xorint,  # xor-int\n    shlint,  # shl-int\n    shrint,  # shr-int\n    ushrint,  # ushr-int\n    addlong,  # add-long\n    sublong,  # sub-long\n    mullong,  # mul-long\n    divlong,  # div-long\n    remlong,  # rem-long\n    # 0xa0\n    andlong,  # and-long\n    orlong,  # or-long\n    xorlong,  # xor-long\n    shllong,  # shl-long\n    shrlong,  # shr-long\n    ushrlong,  # ushr-long\n    addfloat,  # add-float\n    subfloat,  # sub-float\n    mulfloat,  # mul-float\n    divfloat,  # div-float\n    remfloat,  # rem-float\n    adddouble,  # add-double\n    subdouble,  # sub-double\n    muldouble,  # mul-double\n    divdouble,  # div-double\n    remdouble,  # rem-double\n    # 0xb0\n    addint2addr,  # add-int/2addr\n    subint2addr,  # sub-int/2addr\n    mulint2addr,  # mul-int/2addr\n    divint2addr,  # div-int/2addr\n    remint2addr,  # rem-int/2addr\n    andint2addr,  # and-int/2addr\n    orint2addr,  # or-int/2addr\n    xorint2addr,  # xor-int/2addr\n    shlint2addr,  # shl-int/2addr\n    shrint2addr,  # shr-int/2addr\n    ushrint2addr,  # ushr-int/2addr\n    addlong2addr,  # add-long/2addr\n    sublong2addr,  # sub-long/2addr\n    mullong2addr,  # mul-long/2addr\n    divlong2addr,  # div-long/2addr\n    remlong2addr,  # rem-long/2addr\n    # 0xc0\n    andlong2addr,  # and-long/2addr\n    orlong2addr,  # or-long/2addr\n    xorlong2addr,  # xor-long/2addr\n    shllong2addr,  # shl-long/2addr\n    shrlong2addr,  # shr-long/2addr\n    ushrlong2addr,  # ushr-long/2addr\n    addfloat2addr,  # add-float/2addr\n    subfloat2addr,  # sub-float/2addr\n    mulfloat2addr,  # mul-float/2addr\n    divfloat2addr,  # div-float/2addr\n    remfloat2addr,  # rem-float/2addr\n    adddouble2addr,  # add-double/2addr\n    subdouble2addr,  # sub-double/2addr\n    muldouble2addr,  # mul-double/2addr\n    divdouble2addr,  # div-double/2addr\n    remdouble2addr,  # rem-double/2addr\n    # 0xd0\n    addintlit16,  # add-int/lit16\n    rsubint,  # rsub-int\n    mulintlit16,  # mul-int/lit16\n    divintlit16,  # div-int/lit16\n    remintlit16,  # rem-int/lit16\n    andintlit16,  # and-int/lit16\n    orintlit16,  # or-int/lit16\n    xorintlit16,  # xor-int/lit16\n    addintlit8,  # add-int/lit8\n    rsubintlit8,  # rsub-int/lit8\n    mulintlit8,  # mul-int/lit8\n    divintlit8,  # div-int/lit8\n    remintlit8,  # rem-int/lit8\n    andintlit8,  # and-int/lit8\n    orintlit8,  # or-int/lit8\n    xorintlit8,  # xor-int/lit8\n    # 0xe0\n    shlintlit8,  # shl-int/lit8\n    shrintlit8,  # shr-int/lit8\n    ushrintlit8,  # ushr-int/lit8\n]\n"
  },
  {
    "path": "libs/androguard/decompiler/util.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (c) 2012 Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    from androguard.decompiler.graph import Graph\n\nfrom loguru import logger\n\nTYPE_DESCRIPTOR = {\n    'V': 'void',\n    'Z': 'boolean',\n    'B': 'byte',\n    'S': 'short',\n    'C': 'char',\n    'I': 'int',\n    'J': 'long',\n    'F': 'float',\n    'D': 'double',\n}\n\nACCESS_FLAGS_CLASSES = {\n    0x1: 'public',\n    0x2: 'private',\n    0x4: 'protected',\n    0x8: 'static',\n    0x10: 'final',\n    0x200: 'interface',\n    0x400: 'abstract',\n    0x1000: 'synthetic',\n    0x2000: 'annotation',\n    0x4000: 'enum',\n}\n\nACCESS_FLAGS_FIELDS = {\n    0x1: 'public',\n    0x2: 'private',\n    0x4: 'protected',\n    0x8: 'static',\n    0x10: 'final',\n    0x40: 'volatile',\n    0x80: 'transient',\n    0x1000: 'synthetic',\n    0x4000: 'enum',\n}\n\nACCESS_FLAGS_METHODS = {\n    0x1: 'public',\n    0x2: 'private',\n    0x4: 'protected',\n    0x8: 'static',\n    0x10: 'final',\n    0x20: 'synchronized',\n    0x40: 'bridge',\n    0x80: 'varargs',\n    0x100: 'native',\n    0x400: 'abstract',\n    0x800: 'strictfp',\n    0x1000: 'synthetic',\n    0x10000: 'constructor',\n    0x20000: 'declared_synchronized',\n}\n\nACCESS_ORDER = [\n    0x1,\n    0x4,\n    0x2,\n    0x400,\n    0x8,\n    0x10,\n    0x80,\n    0x40,\n    0x20,\n    0x100,\n    0x800,\n    0x200,\n    0x1000,\n    0x2000,\n    0x4000,\n    0x10000,\n    0x20000,\n]\n\nTYPE_LEN = {\n    'J': 2,\n    'D': 2,\n}\n\n\ndef get_access_class(access: int) -> list[str]:\n    sorted_access = [i for i in ACCESS_ORDER if i & access]\n    return [\n        ACCESS_FLAGS_CLASSES.get(flag, 'unkn_%d' % flag)\n        for flag in sorted_access\n    ]\n\n\ndef get_access_method(access: int) -> list[str]:\n    sorted_access = [i for i in ACCESS_ORDER if i & access]\n    return [\n        ACCESS_FLAGS_METHODS.get(flag, 'unkn_%d' % flag)\n        for flag in sorted_access\n    ]\n\n\ndef get_access_field(access: int) -> list[str]:\n    sorted_access = [i for i in ACCESS_ORDER if i & access]\n    return [\n        ACCESS_FLAGS_FIELDS.get(flag, 'unkn_%d' % flag)\n        for flag in sorted_access\n    ]\n\n\ndef build_path(graph, node1, node2, path=None):\n    \"\"\"\n    Build the path from node1 to node2.\n    The path is composed of all the nodes between node1 and node2,\n    node1 excluded. Although if there is a loop starting from node1, it will be\n    included in the path.\n    \"\"\"\n    if path is None:\n        path = []\n    if node1 is node2:\n        return path\n    path.append(node2)\n    for pred in graph.all_preds(node2):\n        if pred in path:\n            continue\n        build_path(graph, node1, pred, path)\n    return path\n\n\ndef common_dom(idom, cur, pred):\n    if not (cur and pred):\n        return cur or pred\n    while cur is not pred:\n        while cur.num < pred.num:\n            pred = idom[pred]\n        while cur.num > pred.num:\n            cur = idom[cur]\n    return cur\n\n\ndef merge_inner(clsdict):\n    \"\"\"\n    Merge the inner class(es) of a class:\n    e.g class A { ... } class A$foo{ ... } class A$bar{ ... }\n    ==> class A { class foo{...} class bar{...} ... }\n    \"\"\"\n    samelist = False\n    done = {}\n    while not samelist:\n        samelist = True\n        classlist = list(clsdict.keys())\n        for classname in classlist:\n            parts_name = classname.rsplit('$', 1)\n            if len(parts_name) > 1:\n                mainclass, innerclass = parts_name\n                innerclass = innerclass[:-1]  # remove ';' of the name\n                mainclass += ';'\n                if mainclass in clsdict:\n                    clsdict[mainclass].add_subclass(\n                        innerclass, clsdict[classname]\n                    )\n                    clsdict[classname].name = innerclass\n                    done[classname] = clsdict[classname]\n                    del clsdict[classname]\n                    samelist = False\n                elif mainclass in done:\n                    cls = done[mainclass]\n                    cls.add_subclass(innerclass, clsdict[classname])\n                    clsdict[classname].name = innerclass\n                    done[classname] = done[mainclass]\n                    del clsdict[classname]\n                    samelist = False\n\n\ndef get_type_size(param):\n    \"\"\"\n    Return the number of register needed by the type @param\n    \"\"\"\n    return TYPE_LEN.get(param, 1)\n\n\ndef get_type(atype: str, size: int = None) -> str:\n    \"\"\"\n    Retrieve the java type of a descriptor (e.g : I)\n    \"\"\"\n    res = TYPE_DESCRIPTOR.get(atype)\n    if res is None:\n        if atype[0] == 'L':\n            if atype.startswith('Ljava/lang'):\n                res = atype[1:-1].lstrip('java/lang/').replace('/', '.')\n            else:\n                res = atype[1:-1].replace('/', '.')\n        elif atype[0] == '[':\n            if size is None:\n                res = '%s[]' % get_type(atype[1:])\n            else:\n                res = '{}[{}]'.format(get_type(atype[1:]), size)\n        else:\n            res = atype\n            logger.debug('Unknown descriptor: \"%s\".', atype)\n    return res\n\n\ndef get_params_type(descriptor: str) -> list[str]:\n    \"\"\"\n    Return the parameters type of a descriptor (e.g (IC)V)\n    \"\"\"\n    params = descriptor.split(')')[0][1:].split()\n    if params:\n        return [param for param in params]\n    return []\n\n\ndef create_png(\n    cls_name: str, meth_name: str, graph: Graph, dir_name: str = 'graphs2'\n) -> None:\n    \"\"\"\n    Creates a PNG from a given :class:`~androguard.decompiler.graph.Graph`.\n\n    :param str cls_name: name of the class\n    :param str meth_name: name of the method\n    :param androguard.decompiler.graph.Graph graph:\n    :param str dir_name: output directory\n    \"\"\"\n    m_name = ''.join(x for x in meth_name if x.isalnum())\n    name = ''.join((cls_name.split('/')[-1][:-1], '#', m_name))\n    graph.draw(name, dir_name)\n"
  },
  {
    "path": "libs/androguard/decompiler/writer.py",
    "content": "# This file is part of Androguard.\n#\n# Copyright (c) 2012 Geoffroy Gueguen <geoffroy.gueguen@gmail.com>\n# All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS-IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom struct import unpack\n\nfrom loguru import logger\n\nfrom androguard.core import mutf8\nfrom androguard.decompiler.instruction import (\n    BaseClass,\n    BinaryCompExpression,\n    BinaryExpression,\n    Constant,\n    InstanceExpression,\n    NewInstance,\n    ThisParam,\n    Variable,\n)\nfrom androguard.decompiler.opcode_ins import Op\nfrom androguard.decompiler.util import get_type\n\n\nclass Writer:\n    \"\"\"\n    Transforms a method into Java code.\n\n    \"\"\"\n\n    def __init__(self, graph, method):\n        self.graph = graph\n        self.method = method\n        self.visited_nodes = set()\n        self.ind = 4\n        self.buffer = []\n        self.buffer2 = []\n        self.loop_follow = [None]\n        self.if_follow = [None]\n        self.switch_follow = [None]\n        self.latch_node = [None]\n        self.try_follow = [None]\n        self.next_case = None\n        self.skip = False\n        self.need_break = True\n\n    def __str__(self):\n        return ''.join([str(i) for i in self.buffer])\n\n    def str_ext(self) -> list[tuple]:\n        return self.buffer2\n\n    def inc_ind(self, i=1):\n        self.ind += 4 * i\n\n    def dec_ind(self, i=1):\n        self.ind -= 4 * i\n\n    def space(self):\n        if self.skip:\n            self.skip = False\n            return ''\n        return ' ' * self.ind\n\n    def write_ind(self):\n        if self.skip:\n            self.skip = False\n        else:\n            self.write(self.space())\n            self.write_ext(('INDENTATION', self.space()))\n\n    def write(self, s, data=None):\n        self.buffer.append(s)\n        # old method, still used\n        # TODO: clean?\n        if data:\n            self.buffer2.append((data, s))\n\n    # at minimum, we have t as a tuple of the form:\n    # (TYPE_STR, MY_STR) such as ('THIS', 'this')\n    # where the 2nd field is the actual generated source code\n    # We can have more fields, for example:\n    # ('METHOD', 'sendToServer', 'this -> sendToServer', <androguard.decompiler.instruction.ThisParam>)\n    def write_ext(self, t):\n        if not isinstance(t, tuple):\n            raise \"Error in write_ext: %s not a tuple\" % str(t)\n        self.buffer2.append(t)\n\n    def end_ins(self):\n        self.write(';\\n')\n        self.write_ext(('END_INSTRUCTION', ';\\n'))\n\n    def write_ind_visit_end(self, lhs, s, rhs=None, data=None):\n        self.write_ind()\n        lhs.visit(self)\n        self.write(s)\n        self.write_ext(('TODO_4343', s, data))\n        if rhs is not None:\n            rhs.visit(self)\n        self.end_ins()\n\n    # TODO: prefer this class as write_ind_visit_end that should be deprecated\n    # at the end\n    def write_ind_visit_end_ext(\n        self,\n        lhs,\n        before,\n        s,\n        after,\n        rhs=None,\n        data=None,\n        subsection='UNKNOWN_SUBSECTION',\n    ):\n        self.write_ind()\n        lhs.visit(self)\n        self.write(before + s + after)\n        self.write_ext(('BEFORE', before))\n        self.write_ext((subsection, s, data))\n        self.write_ext(('AFTER', after))\n        if rhs is not None:\n            rhs.visit(self)\n        self.end_ins()\n\n    def write_inplace_if_possible(self, lhs, rhs):\n        if isinstance(rhs, BinaryExpression) and lhs == rhs.var_map[rhs.arg1]:\n            exp_rhs = rhs.var_map[rhs.arg2]\n            if (\n                rhs.op in '+-'\n                and isinstance(exp_rhs, Constant)\n                and exp_rhs.get_int_value() == 1\n            ):\n                return self.write_ind_visit_end(lhs, rhs.op * 2, data=rhs)\n            return self.write_ind_visit_end(\n                lhs, ' %s= ' % rhs.op, exp_rhs, data=rhs\n            )\n        return self.write_ind_visit_end(lhs, ' = ', rhs, data=rhs)\n\n    def visit_ins(self, ins):\n        ins.visit(self)\n\n    def write_method(self):\n        acc = []\n        access = self.method.access\n        self.constructor = False\n        for modifier in access:\n            if modifier == 'constructor':\n                self.constructor = True\n                continue\n            acc.append(modifier)\n        self.write('\\n%s' % self.space())\n        self.write_ext(('NEWLINE', '\\n%s' % (self.space())))\n        if acc:\n            self.write('%s ' % ' '.join(acc))\n            self.write_ext(('PROTOTYPE_ACCESS', '%s ' % ' '.join(acc)))\n        if self.constructor:\n            name = get_type(self.method.cls_name).split('.')[-1]\n            self.write(name)\n            self.write_ext(('NAME_METHOD_PROTOTYPE', '%s' % name, self.method))\n        else:\n            self.write(\n                '{} {}'.format(get_type(self.method.type), self.method.name)\n            )\n            self.write_ext(\n                ('PROTOTYPE_TYPE', '%s' % get_type(self.method.type))\n            )\n            self.write_ext(('SPACE', ' '))\n            self.write_ext(\n                ('NAME_METHOD_PROTOTYPE', '%s' % self.method.name, self.method)\n            )\n        params = self.method.lparams\n        if 'static' not in access:\n            params = params[1:]\n        proto = ''\n        self.write_ext(('PARENTHESIS_START', '('))\n        if self.method.params_type:\n            proto = ', '.join(\n                [\n                    '{} p{}'.format(get_type(p_type), param)\n                    for p_type, param in zip(self.method.params_type, params)\n                ]\n            )\n            first = True\n            for p_type, param in zip(self.method.params_type, params):\n                if not first:\n                    self.write_ext(('COMMA', ', '))\n                else:\n                    first = False\n                self.write_ext(('ARG_TYPE', '%s' % get_type(p_type)))\n                self.write_ext(('SPACE', ' '))\n                self.write_ext(\n                    ('NAME_ARG', 'p%s' % param, p_type, self.method)\n                )\n        self.write_ext(('PARENTHESIS_END', ')'))\n        self.write('(%s)' % proto)\n        if self.graph is None:\n            self.write(';\\n')\n            self.write_ext(('METHOD_END_NO_CONTENT', ';\\n'))\n            return\n        self.write('\\n%s{\\n' % self.space())\n        self.write_ext(('METHOD_START', '\\n%s{\\n' % self.space()))\n        self.inc_ind()\n        self.visit_node(self.graph.entry)\n        self.dec_ind()\n        self.write('%s}\\n' % self.space())\n        self.write_ext(('METHOD_END', '%s}\\n' % self.space()))\n\n    def visit_node(self, node):\n        if node in (\n            self.if_follow[-1],\n            self.switch_follow[-1],\n            self.loop_follow[-1],\n            self.latch_node[-1],\n            self.try_follow[-1],\n        ):\n            return\n        if not node.type.is_return and node in self.visited_nodes:\n            return\n        self.visited_nodes.add(node)\n        for var in node.var_to_declare:\n            var.visit_decl(self)\n            var.declared = True\n        node.visit(self)\n\n    def visit_loop_node(self, loop):\n        follow = loop.follow['loop']\n        if follow is None and not loop.looptype.is_endless:\n            logger.error('Loop has no follow !')\n        if loop.looptype.is_pretest:\n            if loop.true is follow:\n                loop.neg()\n                loop.true, loop.false = loop.false, loop.true\n            self.write('%swhile (' % self.space())\n            self.write_ext(('WHILE', '%swhile (' % self.space()))\n            loop.visit_cond(self)\n            self.write(') {\\n')\n            self.write_ext(('WHILE_START', ') {\\n'))\n        elif loop.looptype.is_posttest:\n            self.write('%sdo {\\n' % self.space())\n            self.write_ext(('DO', '%sdo {\\n' % self.space()))\n            self.latch_node.append(loop.latch)\n        elif loop.looptype.is_endless:\n            self.write('%swhile(true) {\\n' % self.space())\n            self.write_ext(('WHILE_TRUE', '%swhile(true) {\\n' % self.space()))\n        self.inc_ind()\n        self.loop_follow.append(follow)\n        if loop.looptype.is_pretest:\n            self.visit_node(loop.true)\n        else:\n            self.visit_node(loop.cond)\n        self.loop_follow.pop()\n        self.dec_ind()\n        if loop.looptype.is_pretest:\n            self.write('%s}\\n' % self.space())\n            self.write_ext(('END_PRETEST', '%s}\\n' % self.space()))\n        elif loop.looptype.is_posttest:\n            self.latch_node.pop()\n            self.write('%s} while(' % self.space())\n            self.write_ext(('WHILE_POSTTEST', '%s} while(' % self.space()))\n            loop.latch.visit_cond(self)\n            self.write(');\\n')\n            self.write_ext(('POSTTEST_END', ');\\n'))\n        else:\n            self.inc_ind()\n            self.visit_node(loop.latch)\n            self.dec_ind()\n            self.write('%s}\\n' % self.space())\n            self.write_ext(('END_LOOP', '%s}\\n' % self.space()))\n        if follow is not None:\n            self.visit_node(follow)\n\n    def visit_cond_node(self, cond):\n        follow = cond.follow['if']\n        if cond.false is cond.true:\n            self.write(\n                '%s// Both branches of the condition point to the same'\n                ' code.\\n' % self.space()\n            )\n            self.write_ext(\n                (\n                    'COMMENT_ERROR_MSG',\n                    '%s// Both branches of the condition point to the same'\n                    ' code.\\n' % self.space(),\n                )\n            )\n            self.write('%s// if (' % self.space())\n            self.write_ext(('COMMENT_IF', '%s// if (' % self.space()))\n            cond.visit_cond(self)\n            self.write(') {\\n')\n            self.write_ext(('COMMENT_COND_END', ') {\\n'))\n            self.inc_ind()\n            self.visit_node(cond.true)\n            self.dec_ind()\n            self.write('%s// }\\n' % self.space(), data=\"COMMENT_IF_COND_END\")\n            return\n        if cond.false is self.loop_follow[-1]:\n            cond.neg()\n            cond.true, cond.false = cond.false, cond.true\n        if self.loop_follow[-1] in (cond.true, cond.false):\n            self.write('%sif (' % self.space(), data=\"IF_2\")\n            cond.visit_cond(self)\n            self.write(') {\\n', data=\"IF_TRUE_2\")\n            self.inc_ind()\n            self.write('%sbreak;\\n' % self.space(), data=\"BREAK\")\n            self.dec_ind()\n            self.write('%s}\\n' % self.space(), data=\"IF_END_2\")\n            self.visit_node(cond.false)\n        elif follow is not None:\n            if (\n                cond.true in (follow, self.next_case)\n                or cond.num > cond.true.num\n            ):\n                # or cond.true.num > cond.false.num:\n                cond.neg()\n                cond.true, cond.false = cond.false, cond.true\n            self.if_follow.append(follow)\n            if cond.true:  # in self.visited_nodes:\n                self.write('%sif (' % self.space(), data=\"IF\")\n                cond.visit_cond(self)\n                self.write(') {\\n', data=\"IF_TRUE\")\n                self.inc_ind()\n                self.visit_node(cond.true)\n                self.dec_ind()\n            is_else = not (follow in (cond.true, cond.false))\n            if is_else and not cond.false in self.visited_nodes:\n                self.write('%s} else {\\n' % self.space(), data=\"IF_FALSE\")\n                self.inc_ind()\n                self.visit_node(cond.false)\n                self.dec_ind()\n            self.if_follow.pop()\n            self.write('%s}\\n' % self.space(), data=\"IF_END\")\n            self.visit_node(follow)\n        else:\n            self.write('%sif (' % self.space(), data=\"IF_3\")\n            cond.visit_cond(self)\n            self.write(') {\\n', data=\"IF_COND_3\")\n            self.inc_ind()\n            self.visit_node(cond.true)\n            self.dec_ind()\n            self.write('%s} else {\\n' % self.space(), data=\"ELSE_3\")\n            self.inc_ind()\n            self.visit_node(cond.false)\n            self.dec_ind()\n            self.write('%s}\\n' % self.space(), data=\"IF_END_3\")\n\n    def visit_short_circuit_condition(self, nnot, aand, cond1, cond2):\n        if nnot:\n            cond1.neg()\n        self.write('(', data=\"TODO24\")\n        cond1.visit_cond(self)\n        self.write(') %s (' % ['||', '&&'][aand], data=\"TODO25\")\n        cond2.visit_cond(self)\n        self.write(')', data=\"TODO26\")\n\n    def visit_switch_node(self, switch):\n        lins = switch.get_ins()\n        for ins in lins[:-1]:\n            self.visit_ins(ins)\n        switch_ins = switch.get_ins()[-1]\n        self.write('%sswitch (' % self.space(), data=\"SWITCH\")\n        self.visit_ins(switch_ins)\n        self.write(') {\\n', data=\"SWITCH_END\")\n        follow = switch.follow['switch']\n        cases = switch.cases\n        self.switch_follow.append(follow)\n        default = switch.default\n        for i, node in enumerate(cases):\n            if node in self.visited_nodes:\n                continue\n            self.inc_ind()\n            for case in switch.node_to_case[node]:\n                self.write(\n                    '%scase %d:\\n' % (self.space(), case), data=\"CASE_XX\"\n                )\n            if i + 1 < len(cases):\n                self.next_case = cases[i + 1]\n            else:\n                self.next_case = None\n            if node is default:\n                self.write('%sdefault:\\n' % self.space(), data=\"CASE_DEFAULT\")\n                default = None\n            self.inc_ind()\n            self.visit_node(node)\n            if self.need_break:\n                self.write('%sbreak;\\n' % self.space(), data=\"CASE_BREAK\")\n            else:\n                self.need_break = True\n            self.dec_ind(2)\n        if default not in (None, follow):\n            self.inc_ind()\n            self.write('%sdefault:\\n' % self.space(), data=\"CASE_DEFAULT_2\")\n            self.inc_ind()\n            self.visit_node(default)\n            self.dec_ind(2)\n        self.write('%s}\\n' % self.space(), data=\"CASE_END\")\n        self.switch_follow.pop()\n        self.visit_node(follow)\n\n    def visit_statement_node(self, stmt):\n        sucs = self.graph.sucs(stmt)\n        for ins in stmt.get_ins():\n            self.visit_ins(ins)\n        if len(sucs) == 1:\n            if sucs[0] is self.loop_follow[-1]:\n                self.write('%sbreak;\\n' % self.space(), data=\"BREAK_2\")\n            elif sucs[0] is self.next_case:\n                self.need_break = False\n            else:\n                self.visit_node(sucs[0])\n\n    def visit_try_node(self, try_node):\n        self.write('%stry {\\n' % self.space(), data=\"TRY_START\")\n        self.inc_ind()\n        self.try_follow.append(try_node.follow)\n        self.visit_node(try_node.try_start)\n        self.dec_ind()\n        self.write('%s}' % self.space(), data=\"TRY_START_END\")\n        for catch in try_node.catch:\n            self.visit_node(catch)\n        self.write('\\n', data=\"NEWLINE_END_TRY\")\n        self.visit_node(self.try_follow.pop())\n\n    def visit_catch_node(self, catch_node):\n        self.write(' catch (', data=\"CATCH\")\n        catch_node.visit_exception(self)\n        self.write(') {\\n', data=\"CATCH_START\")\n        self.inc_ind()\n        self.visit_node(catch_node.catch_start)\n        self.dec_ind()\n        self.write('%s}' % self.space(), data=\"CATCH_END\")\n\n    def visit_return_node(self, ret):\n        self.need_break = False\n        for ins in ret.get_ins():\n            self.visit_ins(ins)\n\n    def visit_throw_node(self, throw):\n        for ins in throw.get_ins():\n            self.visit_ins(ins)\n\n    def visit_decl(self, var):\n        if not var.declared:\n            var_type = var.get_type() or 'unknownType'\n            self.write(\n                '{}{} v{}'.format(self.space(), get_type(var_type), var.name),\n                data=\"DECLARATION\",\n            )\n            self.end_ins()\n\n    def visit_constant(self, cst):\n        if isinstance(cst, str):\n            return self.write(string(cst), data=\"CONSTANT_STRING\")\n        self.write(\n            '%r' % cst, data=\"CONSTANT_INTEGER\"\n        )  # INTEGER or also others?\n\n    def visit_base_class(self, cls, data=None):\n        self.write(cls)\n        self.write_ext(('NAME_BASE_CLASS', cls, data))\n\n    def visit_variable(self, var):\n        var_type = var.get_type() or 'unknownType'\n        if not var.declared:\n            self.write('%s ' % get_type(var_type))\n            self.write_ext(\n                ('VARIABLE_TYPE', '%s' % get_type(var_type), var_type)\n            )\n            self.write_ext(('SPACE', ' '))\n            var.declared = True\n        self.write('v%s' % var.name)\n        self.write_ext(('NAME_VARIABLE', 'v%s' % var.name, var, var_type))\n\n    def visit_param(self, param, data=None):\n        self.write('p%s' % param)\n        self.write_ext(('NAME_PARAM', 'p%s' % param, data))\n\n    def visit_this(self):\n        self.write('this', data=\"THIS\")\n\n    def visit_super(self):\n        self.write('super')\n\n    def visit_assign(self, lhs, rhs):\n        if lhs is not None:\n            return self.write_inplace_if_possible(lhs, rhs)\n        self.write_ind()\n        rhs.visit(self)\n        if not self.skip:\n            self.end_ins()\n\n    def visit_move_result(self, lhs, rhs):\n        self.write_ind_visit_end(lhs, ' = ', rhs)\n\n    def visit_move(self, lhs, rhs):\n        if lhs is not rhs:\n            self.write_inplace_if_possible(lhs, rhs)\n\n    def visit_astore(self, array, index, rhs, data=None):\n        self.write_ind()\n        array.visit(self)\n        self.write('[', data=(\"ASTORE_START\", data))\n        index.visit(self)\n        self.write('] = ', data=\"ASTORE_END\")\n        rhs.visit(self)\n        self.end_ins()\n\n    def visit_put_static(self, cls, name, rhs):\n        self.write_ind()\n        self.write('{}.{} = '.format(cls, name), data=\"STATIC_PUT\")\n        rhs.visit(self)\n        self.end_ins()\n\n    def visit_put_instance(self, lhs, name, rhs, data=None):\n        self.write_ind_visit_end_ext(\n            lhs,\n            '.',\n            '%s' % name,\n            ' = ',\n            rhs,\n            data=data,\n            subsection='NAME_CLASS_ASSIGNMENT',\n        )\n\n    def visit_new(self, atype, data=None):\n        self.write('new %s' % get_type(atype))\n        self.write_ext(('NEW', 'new '))\n        self.write_ext(\n            ('NAME_CLASS_NEW', '%s' % get_type(atype), data.type, data)\n        )\n\n    def visit_invoke(self, name, base, ptype, rtype, args, invokeInstr):\n        if isinstance(base, ThisParam):\n            if name == '<init>':\n                if self.constructor and len(args) == 0:\n                    self.skip = True\n                    return\n                if (\n                    invokeInstr\n                    and base.type[1:-1].replace('/', '.') != invokeInstr.cls\n                ):\n                    base.super = True\n        base.visit(self)\n        if name != '<init>':\n            if isinstance(base, BaseClass):\n                call_name = \"{} -> {}\".format(base.cls, name)\n            elif isinstance(base, InstanceExpression):\n                call_name = \"{} -> {}\".format(base.ftype, name)\n            elif hasattr(base, \"base\") and hasattr(base, \"var_map\"):\n                base2base = base\n                while True:\n                    base2base = base2base.var_map[base2base.base]\n                    if isinstance(base2base, NewInstance):\n                        call_name = \"{} -> {}\".format(base2base.type, name)\n                        break\n                    elif hasattr(base2base, \"base\") and hasattr(\n                        base2base, \"var_map\"\n                    ):\n                        continue\n                    else:\n                        call_name = \"UNKNOWN_TODO\"\n                        break\n            elif isinstance(base, ThisParam):\n                call_name = \"this -> %s\" % name\n            elif isinstance(base, Variable):\n                call_name = \"{} -> {}\".format(base.type, name)\n            else:\n                call_name = \"UNKNOWN_TODO2\"\n            self.write('.%s' % name)\n            self.write_ext(('INVOKE', '.'))\n            self.write_ext(\n                (\n                    'NAME_METHOD_INVOKE',\n                    '%s' % name,\n                    call_name,\n                    ptype,\n                    rtype,\n                    base,\n                    invokeInstr,\n                )\n            )\n        self.write('(', data=\"PARAM_START\")\n        comma = False\n        for arg in args:\n            if comma:\n                self.write(', ', data=\"PARAM_SEPARATOR\")\n            comma = True\n            arg.visit(self)\n        self.write(')', data=\"PARAM_END\")\n\n    def visit_return_void(self):\n        self.write_ind()\n        self.write('return', data=\"RETURN\")\n        self.end_ins()\n\n    def visit_return(self, arg):\n        self.write_ind()\n        self.write('return ', data=\"RETURN\")\n        arg.visit(self)\n        self.end_ins()\n\n    def visit_nop(self):\n        pass\n\n    def visit_switch(self, arg):\n        arg.visit(self)\n\n    def visit_check_cast(self, arg, atype):\n        self.write('((%s) ' % atype, data=\"CHECKCAST\")\n        arg.visit(self)\n        self.write(')')\n\n    def visit_aload(self, array, index):\n        array.visit(self)\n        self.write('[', data=\"ALOAD_START\")\n        index.visit(self)\n        self.write(']', data=\"ALOAD_END\")\n\n    def visit_alength(self, array):\n        array.visit(self)\n        self.write('.length', data=\"ARRAY_LENGTH\")\n\n    def visit_new_array(self, atype, size):\n        self.write('new %s[' % get_type(atype[1:]), data=\"NEW_ARRAY\")\n        size.visit(self)\n        self.write(']', data=\"NEW_ARRAY_END\")\n\n    def visit_filled_new_array(self, atype, size, args):\n        self.write('new %s {' % get_type(atype), data=\"NEW_ARRAY_FILLED\")\n        for idx, arg in enumerate(args):\n            arg.visit(self)\n            if idx + 1 < len(args):\n                self.write(', ', data=\"COMMA\")\n        self.write('})', data=\"NEW_ARRAY_FILLED_END\")\n\n    def visit_fill_array(self, array, value):\n        self.write_ind()\n        array.visit(self)\n        self.write(' = {', data=\"ARRAY_FILLED\")\n        data = value.get_data()\n        tab = []\n        elem_size = value.element_width\n\n        # Set type depending on size of elements\n        data_types = {1: 'b', 2: 'h', 4: 'i', 8: 'd'}\n\n        if elem_size in data_types:\n            elem_id = data_types[elem_size]\n        else:\n            # FIXME for other types we just assume bytes...\n            logger.warning(\n                \"Unknown element size {} for array. Assume bytes.\".format(\n                    elem_size\n                )\n            )\n            elem_id = 'b'\n            elem_size = 1\n\n        for i in range(0, value.size * elem_size, elem_size):\n            tab.append('%s' % unpack(elem_id, data[i : i + elem_size])[0])\n        self.write(', '.join(tab), data=\"COMMA\")\n        self.write('}', data=\"ARRAY_FILLED_END\")\n        self.end_ins()\n\n    def visit_move_exception(self, var, data=None):\n        var.declared = True\n        var_type = var.get_type() or 'unknownType'\n        self.write('{} v{}'.format(get_type(var_type), var.name))\n        self.write_ext(\n            ('EXCEPTION_TYPE', '%s' % get_type(var_type), data.type)\n        )\n        self.write_ext(('SPACE', ' '))\n        self.write_ext(\n            ('NAME_CLASS_EXCEPTION', 'v%s' % var.value(), data.type, data)\n        )\n\n    def visit_monitor_enter(self, ref):\n        self.write_ind()\n        self.write('synchronized(', data=\"SYNCHRONIZED\")\n        ref.visit(self)\n        self.write(') {\\n', data=\"SYNCHRONIZED_END\")\n        self.inc_ind()\n\n    def visit_monitor_exit(self, ref):\n        self.dec_ind()\n        self.write_ind()\n        self.write('}\\n', data=\"MONITOR_EXIT\")\n\n    def visit_throw(self, ref):\n        self.write_ind()\n        self.write('throw ', data=\"THROW\")\n        ref.visit(self)\n        self.end_ins()\n\n    def visit_binary_expression(self, op, arg1, arg2):\n        self.write('(', data=\"BINARY_EXPRESSION_START\")\n        arg1.visit(self)\n        self.write(' %s ' % op, data=\"TODO58\")\n        arg2.visit(self)\n        self.write(')', data=\"BINARY_EXPRESSION_END\")\n\n    def visit_unary_expression(self, op, arg):\n        self.write('(%s ' % op, data=\"UNARY_EXPRESSION_START\")\n        arg.visit(self)\n        self.write(')', data=\"UNARY_EXPRESSION_END\")\n\n    def visit_cast(self, op, arg):\n        self.write('(%s ' % op, data=\"CAST_START\")\n        arg.visit(self)\n        self.write(')', data=\"CAST_END\")\n\n    def visit_cond_expression(self, op, arg1, arg2):\n        arg1.visit(self)\n        self.write(' %s ' % op, data=\"COND_EXPRESSION\")\n        arg2.visit(self)\n\n    def visit_condz_expression(self, op, arg):\n        if isinstance(arg, BinaryCompExpression):\n            arg.op = op\n            return arg.visit(self)\n        atype = str(arg.get_type())\n        if atype == 'Z':\n            if op == Op.EQUAL:\n                self.write('!', data=\"NEGATE\")\n            arg.visit(self)\n        else:\n            arg.visit(self)\n            try:\n                atype = atype.string\n            except AttributeError:\n                pass\n            if atype in 'VBSCIJFD':\n                self.write(' %s 0' % op, data=\"TODO64\")\n            else:\n                self.write(' %s null' % op, data=\"TODO65\")\n\n    def visit_get_instance(self, arg, name, data=None):\n        arg.visit(self)\n        self.write('.%s' % name)\n        self.write_ext(('GET_INSTANCE', '.'))\n        self.write_ext(('NAME_CLASS_INSTANCE', '%s' % name, data))\n\n    def visit_get_static(self, cls, name):\n        self.write('{}.{}'.format(cls, name), data=\"GET_STATIC\")\n\n\ndef string(s):\n    \"\"\"\n    Convert a string to a escaped ASCII representation including quotation marks\n    :param s: a string\n    :return: ASCII escaped string\n    \"\"\"\n    ret = ['\"']\n    for c in s:\n        if ' ' <= c < '\\x7f':\n            if c == \"'\" or c == '\"' or c == '\\\\':\n                ret.append('\\\\')\n            ret.append(c)\n            continue\n        elif c <= '\\x7f':\n            if c in ('\\r', '\\n', '\\t'):\n                # unicode-escape produces bytes\n                ret.append(c.encode('unicode-escape').decode(\"ascii\"))\n                continue\n        i = ord(c)\n        ret.append('\\\\u')\n        ret.append('%x' % (i >> 12))\n        ret.append('%x' % ((i >> 8) & 0x0F))\n        ret.append('%x' % ((i >> 4) & 0x0F))\n        ret.append('%x' % (i & 0x0F))\n    ret.append('\"')\n    return ''.join(ret)\n"
  },
  {
    "path": "libs/androguard/misc.py",
    "content": "# Allows type hinting of types not-yet-declared\n# in Python >= 3.7\n# see https://peps.python.org/pep-0563/\nfrom __future__ import annotations\n\nimport hashlib\nimport os\nimport re\nfrom typing import Union\n\nfrom loguru import logger\n\nfrom androguard.core import androconf, apk, dex\nfrom androguard.core.analysis.analysis import Analysis\nfrom androguard.decompiler import decompiler\nfrom androguard.session import Session\n\n\ndef get_default_session() -> Session:\n    \"\"\"\n    Return the default [Session][androguard.session.Session] from the configuration\n    or create a new one, if the session in the configuration is `None`.\n\n    :returns: `androguard.session.Session` object\n    \"\"\"\n    if androconf.CONF[\"SESSION\"] is None:\n        androconf.CONF[\"SESSION\"] = Session()\n    return androconf.CONF[\"SESSION\"]\n\n\ndef AnalyzeAPK(\n    _file: Union[str, bytes],\n    session: Union[Session, None] = None,\n    raw: bool = False,\n) -> tuple[apk.APK, list[dex.DEX], Analysis]:\n    \"\"\"\n    Analyze an android application and setup all stuff for a more quickly\n    analysis!\n    If session is `None`, no session is used at all. This is the default\n    behaviour.\n    If you like to continue your work later, it might be a good idea to use a\n    session.\n    A default session can be created by using [get_default_session][androguard.misc.get_default_session].\n\n    :param _file: the filename of the android application or a buffer which represents the application\n    :param session: A session (default: None)\n    :param raw: boolean if raw bytes are supplied instead of a filename\n    :returns: the `androguard.core.apk.APK`, list of `androguard.core.dex.DEX`, and `androguard.core.analysis.analysis.Analysis` objects\n    \"\"\"\n    logger.debug(\"AnalyzeAPK\")\n\n    if session:\n        logger.debug(\"Using existing session {}\".format(session))\n        if raw:\n            data = _file\n            filename = hashlib.md5(_file).hexdigest()\n        else:\n            with open(_file, \"rb\") as fd:\n                data = fd.read()\n                filename = _file\n\n        digest = session.add(filename, data)\n        return session.get_objects_apk(filename, digest)\n    else:\n        logger.debug(\"Analysing without session\")\n        a = apk.APK(_file, raw=raw)\n        # FIXME: probably it is not necessary to keep all DEXs, as\n        # they are already part of Analysis. But when using sessions, it works\n        # this way...\n        d = []\n        dx = Analysis()\n        for dex_bytes in a.get_all_dex():\n            df = dex.DEX(dex_bytes, using_api=a.get_target_sdk_version())\n            dx.add(df)\n            d.append(df)\n            df.set_decompiler(decompiler.DecompilerDAD(df, dx))\n\n        dx.create_xref()\n\n        return a, d, dx\n\n\ndef AnalyzeDex(\n    filename: str, session: Session = None, raw: bool = False\n) -> tuple[str, dex.DEX, Analysis]:\n    \"\"\"\n    Analyze an android dex file and setup all stuff for a more quickly analysis !\n\n    :param filename: the filename of the android dex file or a buffer which represents the dex file\n    :param session: A session (Default `None`)\n    :param raw: If set, `filenam`` will be used as the odex's data (bytes). Defaults to `False`\n\n    :returns: a tuple of (sha256hash, `DEX`, `Analysis`)\n    \"\"\"\n    logger.debug(\"AnalyzeDex\")\n\n    if not session:\n        session = get_default_session()\n\n    if raw:\n        data = filename\n    else:\n        with open(filename, \"rb\") as fd:\n            data = fd.read()\n\n    return session.addDEX(filename, data)\n\n\n# def AnalyzeODex(filename: str, session:Session=None, raw:bool=False):\n#     \"\"\"\n#     Analyze an android odex file and setup all stuff for a more quickly analysis !\n\n#     :param filename: the filename of the android dex file or a buffer which represents the dex file\n#     :type filename: string\n#     :param session: The Androguard Session to add the ODex to (default: None)\n#     :param raw: If set, ``filename`` will be used as the odex's data (bytes). Defaults to ``False``\n\n#     :rtype: return a tuple of (sha256hash, :class:`DalvikOdexVMFormat`, :class:`Analysis`)\n#     \"\"\"\n#     logger.debug(\"AnalyzeODex\")\n\n#     if not session:\n#         session = get_default_session()\n\n#     if raw:\n#         data = filename\n#     else:\n#         with open(filename, \"rb\") as fd:\n#             data = fd.read()\n\n#     return session.addDEY(filename, data) # <- this function is missing\n\n\ndef clean_file_name(\n    filename: str,\n    unique: bool = True,\n    replace: str = \"_\",\n    force_nt: bool = False,\n) -> str:\n    \"\"\"\n    Return a filename version, which has no characters in it which are forbidden.\n    On Windows these are for example <, /, ?, ...\n\n    The intention of this function is to allow distribution of files to different OSes.\n\n    :param filename: string to clean\n    :param unique: check if the filename is already taken and append an integer to be unique (default: `True`)\n    :param replace: replacement character. (default: '_')\n    :param force_nt: Force shortening of paths like on NT systems (default: `False`)\n    :returns: clean string\n    \"\"\"\n\n    if re.match(r'[<>:\"/\\\\|?* .\\x00-\\x1f]', replace):\n        raise ValueError(\"replacement character is not allowed!\")\n\n    path, fname = os.path.split(filename)\n    # For Windows see: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx\n    # Other operating systems seems to be more tolerant...\n\n    # Not allowed filenames, attach replace character if necessary\n    if re.match(r'(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])', fname):\n        fname += replace\n\n    # reserved characters\n    fname = re.sub(r'[<>:\"/\\\\|?*\\x00-\\x1f]', replace, fname)\n    # Do not end with dot or space\n    fname = re.sub(r'[ .]$', replace, fname)\n\n    # It is a sensible default, to assume that there is a hard 255 char limit per filename\n    # See https://en.wikipedia.org/wiki/Comparison_of_file_systems\n    # If you are using a filesystem with less, you have other problems ;)\n    #\n    # We simply make a hard cut after 255 chars. To leave some space for an extension, which might get added later,\n    # There is room for improvement here, so feel free to implement a better method!\n    PATH_MAX_LENGTH = 230  # give extra space for other stuff...\n    # Check filename length limit, usually a problem on older Windows versions\n    if len(fname) > PATH_MAX_LENGTH:\n        if \".\" in fname:\n            f, ext = fname.rsplit(\".\", 1)\n            fname = \"{}.{}\".format(f[: PATH_MAX_LENGTH - (len(ext) + 1)], ext)\n        else:\n            fname = fname[:PATH_MAX_LENGTH]\n\n    if force_nt or os.name == 'nt':\n        # Special behaviour... On Windows, there is also a problem with the maximum path length in explorer.exe\n        # maximum length is limited to 260 chars, so use 250 to have room for other stuff\n        if len(os.path.abspath(os.path.join(path, fname))) > 250:\n            fname = fname[: 250 - (len(os.path.abspath(path)) + 1)]\n\n    if unique:\n        counter = 0\n        origname = fname\n        while os.path.isfile(os.path.join(path, fname)):\n            if \".\" in fname:\n                # assume extension\n                f, ext = origname.rsplit(\".\", 1)\n                fname = \"{}_{}.{}\".format(f, counter, ext)\n            else:\n                fname = \"{}_{}\".format(origname, counter)\n            counter += 1\n\n    return os.path.join(path, fname)\n"
  },
  {
    "path": "libs/androguard/pentest/__init__.py",
    "content": "import glob\nimport hashlib\nimport json\nimport os\nimport queue\nimport threading\n\nimport frida\n\nfrom . import adb\n\nmd5 = lambda bs: hashlib.md5(bs).hexdigest()\n\nfrom loguru import logger\n\n\nclass Message:\n    pass\n\n\nclass MessageEvent(Message):\n    def __init__(\n        self, index, function_callee, function_call, params, ret_value\n    ):\n        self.index = index\n        self.from_method = function_call\n        self.to_method = function_callee\n        self.params = params\n        self.ret_value = ret_value\n\n\nclass MessageSystem(Message):\n    def __init__(\n        self, index, function_callee, function_call, params, information\n    ):\n        self.index = index\n        self.from_method = function_call\n        self.to_method = function_callee\n        self.params = params\n        self.ret_value = information\n\n\nclass Pentest:\n    def __init__(self):\n        self.ag_session = None\n        self.package_name = None\n        self.device = None\n        self.frida_session = None\n        self.pid = -1\n        self.detached = False\n        self.scripts = []\n        self.pending = []\n        self.list_file_scripts = []\n        self.ag_scripts = ['androguard/pentest/internal/utils.js']\n        self.idx = 0\n        self.message_queue = queue.Queue()\n\n    def is_detached(self):\n        return self.detached\n\n    def disconnect(self):\n        logger.info(\"Disconnected from frida server\")\n\n        if self.scripts:\n            for script in self.scripts:\n                try:\n                    script.unload()\n                except frida.InvalidOperationError as e:\n                    logger.error(e)\n\n        self.frida_session.detach()\n\n        self.package_name = None\n        self.device = None\n        self.frida_session = None\n        self.pid = -1\n        self.scripts = []\n        self.pending = []\n        self.list_file_scripts = []\n\n    def print_devices(self):\n        logger.info(\"List of devices\")\n        devices = frida.enumerate_devices()\n        for i in range(len(devices)):\n            logger.info('{}) {}'.format(i, devices[i]))\n\n    def connect_default_usb(self):\n        self.device = frida.get_usb_device()\n        logger.info(\"Connected to device {}\".format(self.device))\n\n    def _read_scripts(self, scripts):\n        data_scripts = \"\"\n\n        for script_file in scripts:\n            with open(script_file, 'r') as file:\n                data_scripts += file.read()\n                data_scripts += '\\n\\n'\n\n        return data_scripts\n\n    def read_scripts(self, scripts):\n        return (\n            \"Java.perform(function () {\\n\"\n            + self._read_scripts(self.ag_scripts + scripts)\n            + \"\\n\"\n            + \"});\"\n        )\n\n    def install_apk(self, filename):\n        adb.adb(self.device.id, \"install {}\".format(filename))\n\n    def attach_package(self, package_name, list_file_scripts, pid=None):\n        self.package_name = package_name\n\n        logger.info(\n            \"Starting package {} {} {}\".format(\n                package_name, list_file_scripts, pid\n            )\n        )\n\n        self.list_file_scripts = list_file_scripts\n\n        self.device.on('spawn-added', self.spawn_added)\n        self.device.on('spawn-removed', self.spawn_removed)\n        self.device.on('child-added', self.child_added)\n        self.device.on('child-removed', self.on_spawned)\n        self.device.on('process-crashed', self.on_spawned)\n        self.device.on('output', self.on_spawned)\n        self.device.on('uninjected', self.on_spawned)\n        self.device.on('lost', self.on_spawned)\n        self.device.enable_spawn_gating()\n        self.event = threading.Event()\n        logger.info('Enabled spawn gating')\n\n        try:\n            # It is not an existing process, spawn a new one\n            if not pid:\n                pid = self.device.spawn([package_name])\n\n            self.pid = pid\n\n            self.frida_session = self.device.attach(self.pid)\n            self.load_scripts(self.frida_session, list_file_scripts)\n            self.frida_session.on('detached', self.on_detached)\n        except frida.NotSupportedError as e:\n            logger.error(e)\n\n    def load_scripts(self, current_session, scripts):\n        try:\n            logger.info('Loading scripts {}'.format(scripts))\n            script = current_session.create_script(self.read_scripts(scripts))\n\n            script.on(\"message\", self.androguard_message_handler)\n            script.load()\n            self.scripts.append(script)\n        except Exception as e:\n            logger.error(e)\n\n    def run_frida(self):\n        logger.info(\"Running frida ! Resuming the PID {}\".format(self.pid))\n        self.device.resume(self.pid)\n\n    def androguard_message_handler(self, message, payload):\n        # use for system event\n        previous_stacktrace = None\n\n        logger.debug(\"MESSAGE {} {}\".format(message, payload))\n\n        if message[\"type\"] == \"send\":\n            msg_payload = json.loads(message[\"payload\"])\n            params = {}\n\n            if msg_payload[\"id\"] == \"AG-EVENT\":\n                for i in msg_payload:\n                    if i not in [\"id\", \"ret\", \"timestamp\", \"stacktrace\"]:\n                        params[i] = msg_payload[i]\n\n                function_call = msg_payload[\"stacktrace\"][0]\n                function_callee = msg_payload[\"stacktrace\"][1]\n                ret_value = json.dumps(msg_payload.get(\"ret\"))\n\n                logger.info(\n                    \"{} - [{}:{}] [{}] -> [{}]\".format(\n                        msg_payload[\"timestamp\"],\n                        function_call,\n                        function_callee,\n                        params,\n                        ret_value,\n                    )\n                )\n                self.message_queue.put(\n                    MessageEvent(\n                        self.idx,\n                        function_call,\n                        function_callee,\n                        params,\n                        ret_value,\n                    )\n                )\n                self.ag_session.insert_event(\n                    call=function_call,\n                    callee=function_callee,\n                    params=params,\n                    ret=ret_value,\n                )\n                previous_stacktrace = msg_payload[\"stacktrace\"]\n\n                self.idx += 1\n            elif msg_payload[\"id\"] == \"AG-SYSTEM\":\n                for i in msg_payload:\n                    if i not in [\n                        \"id\",\n                        \"information\",\n                        \"timestamp\",\n                        \"stacktrace\",\n                    ]:\n                        params[i] = msg_payload[i]\n\n                function_call = None\n                function_callee = None\n                information = msg_payload[\"information\"]\n\n                if previous_stacktrace:\n                    function_call = previous_stacktrace[0]\n                    function_callee = previous_stacktrace[1]\n                else:\n                    function_callee = information\n\n                logger.warning(\n                    \"{} - [{}:{}] [{}] -> [{}]\".format(\n                        msg_payload[\"timestamp\"],\n                        function_call,\n                        function_callee,\n                        information,\n                        params,\n                    )\n                )\n                self.message_queue.put(\n                    MessageSystem(\n                        self.idx,\n                        function_call,\n                        function_callee,\n                        params,\n                        information,\n                    )\n                )\n                self.ag_session.insert_system_event(\n                    call=function_call,\n                    callee=function_callee,\n                    params=params,\n                    information=information,\n                )\n\n                if not previous_stacktrace:\n                    self.idx += 1\n            elif msg_payload[\"id\"] == \"AG-BINDER\":\n                logger.info(\"BINDER {} {}\".format(message, payload))\n                self.idx += 1\n\n    def dump(self, package_name):\n        api = self.scripts[0].exports\n\n        matches = api.scandex()\n        mds = []\n\n        for info in matches:\n            try:\n\n                bs = api.memorydump(info['addr'], info['size'])\n                md = md5(bs)\n                if md in mds:\n                    logger.warning(\n                        \"[DEXDump]: Skip duplicate dex {}<{}>\".format(\n                            info['addr'], md\n                        ),\n                        fg=\"blue\",\n                    )\n                    continue\n                mds.append(md)\n\n                if not os.path.exists(\"./\" + package_name + \"/\"):\n                    os.mkdir(\"./\" + package_name + \"/\")\n                if bs[:4] != \"dex\\n\":\n                    bs = b\"dex\\n035\\x00\" + bs[8:]\n                readable_hash = hashlib.sha256(bs).hexdigest()\n                with open(\n                    package_name + \"/\" + readable_hash + \".dex\", 'wb'\n                ) as out:\n                    out.write(bs)\n                logger.info(\n                    \"[DEXDump]: DexSize={}, SavePath={}/{}/{}.dex\".format(\n                        hex(info['size']),\n                        os.getcwd(),\n                        package_name,\n                        readable_hash,\n                    ),\n                    fg='green',\n                )\n            except Exception as e:\n                logger.error(\"[Except] - {}: {}\".format(e, info), bg='yellow')\n\n    def on_detached(self, reason):\n        logger.info(\"Session is detached due to: {}\".format(reason))\n        self.detached = True\n\n    def on_spawned(self, spawn):\n        # logger.info('on_spawned: {}'.format(spawn))\n        self.pending.append(spawn)\n        self.event.set()\n\n    def spawn_added(self, spawn):\n        # logger.info('spawn_added: {}'.format(spawn))\n\n        self.event.set()\n\n        if spawn.identifier.startswith(self.package_name):\n            # logger.info('added tace: {}'.format(spawn))\n\n            session = self.device.attach(spawn.pid)\n            self.load_scripts(session, self.list_file_scripts)\n        self.device.resume(spawn.pid)\n        # logger.info('Resumed')\n\n    def spawn_removed(self, spawn):\n        logger.info('spawn_removed: {}'.format(spawn))\n        self.event.set()\n\n    def child_added(self, spawn):\n        logger.info('child_added: {}'.format(spawn))\n\n    def start_trace(\n        self,\n        filename,\n        session,\n        list_modules,\n        live=False,\n        noapk=False,\n        dump=False,\n    ):\n        self.ag_session = session\n\n        logger.info(\"Start to trace {} {}\".format(filename, list_modules))\n\n        if not live:\n            apk_obj, dex_objs, dx_obj = session.get_objects_apk(filename)\n            if not apk_obj:\n                logger.error(\"Can't find any APK object associated\")\n                return\n\n        if not self.device:\n            logger.error(\"Not connected to any device yet\")\n            return\n\n        list_scripts_to_load = []\n        for new_module in list_modules:\n            if '*' in new_module:\n                for i_module in glob.iglob(new_module, recursive=True):\n                    if os.path.isfile(i_module):\n                        if \"disable_\" not in i_module:\n                            list_scripts_to_load.append(i_module)\n            else:\n                list_scripts_to_load.append(new_module)\n\n        package_name = \"\"\n        pid = None\n        if not live:\n            self.install_apk(filename)\n            package_name = apk_obj.get_package()\n        else:\n            package_name = filename\n            pid_value = (\n                os.popen(\n                    \"adb -s {} shell pidof {}\".format(\n                        self.device.id, package_name\n                    )\n                )\n                .read()\n                .strip()\n            )\n            if pid_value:\n                pid = int(pid_value)\n\n        self.attach_package(package_name, list_scripts_to_load, pid)\n\n        if not dump:\n            self.run_frida()\n        else:\n            self.dump(package_name)\n"
  },
  {
    "path": "libs/androguard/pentest/adb.py",
    "content": "import subprocess\n\nfrom loguru import logger\n\n\ndef adb(device_id, cmd=None):\n    logger.info(\"ADB: Running on {}:{}\".format(device_id, cmd))\n    subprocess.run('adb -s {} {}'.format(device_id, cmd), shell=True)\n"
  },
  {
    "path": "libs/androguard/pentest/internal/utils.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\nconsole.log(\"[+] LOADING INTERNAL/UTILS.JS\");\n\n(\"use strict\");\n\nvar FLAG_SECURE_VALUE = \"\";\nvar mode = \"\";\nvar methodURL = \"\";\nvar requestHeaders = \"\";\nvar requestBody = \"\";\nvar responseHeaders = \"\";\nvar responseBody = \"\";\n\nconst java_lang_threadObj = Java.use(\"java.lang.Thread\").$new();\n\nfunction getStackTrace() {\n    const stack = java_lang_threadObj.currentThread().getStackTrace();\n    var buff = [];\n    //for (var i = 2; i < stack.length; i++) {\n    for (var i = 2; i < 4; i++) {\n        buff.push(stack[i].toString());\n    }\n    return buff;\n}\n\nfunction flatten(obj) {\n    var ret = {};\n    for (var i in obj) {\n        ret[i] = obj[i];\n    }\n    return ret;\n}\n\nconst Packet = {\n    id: \"AG-EVENT\",\n    payload: \"\",\n\n    toString() {\n        return JSON.stringify(flatten(this));\n    },\n\n    send() {\n        send(this.toString(), this.payload);\n    },\n};\n\n// Create a new Androguard Packet\nfunction agPacket(source) {\n    const obj = Object.create(Packet);\n\n    obj.timestamp = Date.now();\n    obj.stacktrace = getStackTrace();\n\n    // Assign dynamic data from hooks to the packet\n    Object.assign(obj, source);\n\n    return obj;\n}\n\n// Create a new Androguard System Packet\nfunction agSysPacket(source) {\n    const obj = Object.create(Packet);\n    obj.id = \"AG-SYSTEM\";\n    obj.timestamp = Date.now();\n\n    // Assign dynamic data from hooks to the packet\n    Object.assign(obj, source);\n\n    return obj;\n}\n\n// Create a new Androguard Binder Packet\nfunction agBinderPacket(source, payload) {\n    const obj = Object.create(Packet);\n    obj.id = \"AG-BINDER\";\n    obj.timestamp = Date.now();\n    obj.payload = payload;\n\n    // Assign dynamic data from hooks to the packet\n    Object.assign(obj, source);\n\n    return obj;\n}\n\nfunction dumpIntent(intent) {\n    var cmp = \"\";\n    if (intent.getComponent()) {\n        cmp = intent.getComponent().getClassName();\n    }\n\n    return { action: intent.getAction(), cmp: cmp, flags: intent.getFlags() };\n}\n\nfunction dumpReceiver(receiver) {\n    if (receiver != null) {\n        return { name: receiver.getClass().toString() };\n    }\n\n    return {};\n}\n\nfunction dumpFilter(filter) {\n    if (filter != null) {\n        actions_list = [];\n        categories_list = [];\n\n        for (iAction = 0; iAction < filter.countActions(); iAction++) {\n            actions_list.push(filter.getAction(iAction));\n        }\n\n        for (iCategory = 0; iCategory < filter.countCategories(); iCategory++) {\n            categories_list.push(filter.getCategory(iCategory));\n        }\n\n        return { actions: actions_list, categories: categories_list };\n    }\n\n    return {};\n}\n\nfunction dumpWebview(wv) {\n    return {\n        getAllowContentAccess: wv.getSettings().getAllowContentAccess(),\n        getJavaScriptEnabled: wv.getSettings().getJavaScriptEnabled(),\n        getAllowFileAccess: wv.getSettings().getAllowFileAccess(),\n        getAllowFileAccessFromFileURLs: wv\n            .getSettings()\n            .getAllowFileAccessFromFileURLs(),\n        getAllowUniversalAccessFromFileURLs: wv\n            .getSettings()\n            .getAllowUniversalAccessFromFileURLs(),\n    };\n}\n\nvar Color = {\n    RESET: \"\\x1b[39;49;00m\",\n    Black: \"0;01\",\n    Blue: \"4;01\",\n    Cyan: \"6;01\",\n    Gray: \"7;11\",\n    Green: \"2;01\",\n    Purple: \"5;01\",\n    Red: \"1;01\",\n    Yellow: \"3;01\",\n    Light: {\n        Black: \"0;11\",\n        Blue: \"4;11\",\n        Cyan: \"6;11\",\n        Gray: \"7;01\",\n        Green: \"2;11\",\n        Purple: \"5;11\",\n        Red: \"1;11\",\n        Yellow: \"3;11\",\n    },\n};\n\nfunction enumerateModules() {\n    var modules = Process.enumerateModules();\n    colorLog(\"[+] Enumerating loaded modules:\", { c: Color.Blue });\n\n    for (var i = 0; i < modules.length; i++)\n        console.log(modules[i].path + modules[i].name);\n}\n\nfunction getApplicationContext() {\n    return Java.use(\"android.app.ActivityThread\")\n        .currentApplication()\n        .getApplicationContext();\n}\n\nfunction traceClass(targetClass) {\n    colorLog(\"[+] entering traceClass\", { c: Color.Red });\n\n    var hook = Java.use(targetClass);\n    var methods = hook.class.getDeclaredMethods();\n    hook.$dispose();\n\n    colorLog(\"[+] entering parsedMethods\", { c: Color.Blue });\n\n    var parsedMethods = [];\n    methods.forEach(function (method) {\n        try {\n            parsedMethods.push(\n                method\n                    .toString()\n                    .replace(targetClass + \".\", \"TOKEN\")\n                    .match(/\\sTOKEN(.*)\\(/)[1],\n            );\n        } catch (err) {}\n    });\n\n    colorLog(\"[+] entering traceMethods\", { c: Color.Blue });\n\n    var targets = uniqBy(parsedMethods, JSON.stringify);\n    targets.forEach(function (targetMethod) {\n        try {\n            traceMethod(targetClass + \".\" + targetMethod);\n        } catch (err) {}\n    });\n}\n\nfunction uniqBy(array, key) {\n    var seen = {};\n    return array.filter(function (item) {\n        var k = key(item);\n        return seen.hasOwnProperty(k) ? false : (seen[k] = true);\n    });\n}\n\nfunction traceMethod(targetClassMethod) {\n    var delim = targetClassMethod.lastIndexOf(\".\");\n    if (delim === -1) return;\n\n    var targetClass = targetClassMethod.slice(0, delim);\n    var targetMethod = targetClassMethod.slice(\n        delim + 1,\n        targetClassMethod.length,\n    );\n\n    var hook = Java.use(targetClass);\n    var overloadCount = hook[targetMethod].overloads.length;\n\n    colorLog(\n        \"Tracing \" + targetClassMethod + \" [\" + overloadCount + \" overload(s)]\",\n        { c: Color.Green },\n    );\n\n    for (var i = 0; i < overloadCount; i++) {\n        hook[targetMethod].overloads[i].implementation = function () {\n            colorLog(\"\\n[+] Entering: \" + targetClassMethod, {\n                c: Color.Yellow,\n            });\n\n            if (arguments.length) console.log();\n            for (var j = 0; j < arguments.length; j++) {\n                agPacket({ arg: arguments[j] }).send();\n            }\n\n            var retval = this[targetMethod].apply(this, arguments);\n            agPacket({ ret: retval }).send();\n            colorLog(\"\\n[-] Exiting \" + targetClassMethod);\n            return retval;\n        };\n    }\n}\n\nvar Utf8 = {\n    encode: function (string) {\n        string = string.replace(/\\r\\n/g, \"\\n\");\n        var utftext = \"\";\n        for (var n = 0; n < string.length; n++) {\n            var c = string.charCodeAt(n);\n            if (c < 128) {\n                utftext += String.fromCharCode(c);\n            } else if (c > 127 && c < 2048) {\n                utftext += String.fromCharCode((c >> 6) | 192);\n                utftext += String.fromCharCode((c & 63) | 128);\n            } else {\n                utftext += String.fromCharCode((c >> 12) | 224);\n                utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n                utftext += String.fromCharCode((c & 63) | 128);\n            }\n        }\n        return utftext;\n    },\n    // publi\n    decode: function (utftext) {\n        var string = \"\";\n        var i = 0;\n        var c = (c1 = c2 = 0);\n        while (i < utftext.length) {\n            c = utftext.charCodeAt(i);\n            if (c < 128) {\n                string += String.fromCharCode(c);\n                i++;\n            } else if (c > 191 && c < 224) {\n                c2 = utftext.charCodeAt(i + 1);\n                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n                i += 2;\n            } else {\n                c2 = utftext.charCodeAt(i + 1);\n                c3 = utftext.charCodeAt(i + 2);\n                string += String.fromCharCode(\n                    ((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63),\n                );\n                i += 3;\n            }\n        }\n        return string;\n    },\n};\n\nfunction describeJavaClass(className) {\n    var jClass = Java.use(className);\n    console.log(\n        JSON.stringify(\n            {\n                _name: className,\n                _methods: Object.getOwnPropertyNames(jClass.__proto__).filter(\n                    function (m) {\n                        return (\n                            !m.startsWith(\"$\") || // filter out Frida related special properties\n                            m == \"class\" ||\n                            m == \"constructor\"\n                        ); // optional\n                    },\n                ),\n                _fields: jClass.class.getFields().map(function (f) {\n                    return f.toString();\n                }),\n            },\n            null,\n            2,\n        ),\n    );\n}\n\nvar colorLog = function (input, kwargs) {\n    kwargs = kwargs || {};\n    var logLevel = kwargs[\"l\"] || \"log\",\n        colorPrefix = \"\\x1b[3\",\n        colorSuffix = \"m\";\n    if (typeof input === \"object\")\n        input = JSON.stringify(input, null, kwargs[\"i\"] ? 2 : null);\n    if (kwargs[\"c\"])\n        input = colorPrefix + kwargs[\"c\"] + colorSuffix + input + Color.RESET;\n    console[logLevel](input);\n};\n\nvar processArgs = function (command, envp, dir) {\n    var output = {};\n    if (command) {\n        console.log(\"Command: \" + command);\n        //   output.command = command;\n    }\n    if (envp) {\n        console.log(\"Environment: \" + envp);\n        //   output.envp = envp;\n    }\n    if (dir) {\n        console.log(\"Working Directory: \" + dir);\n        //   output.dir = dir;\n    }\n    // return output;\n};\n\nvar _byteArraytoHexString = function (byteArray) {\n    if (!byteArray) {\n        return \"null\";\n    }\n    if (byteArray.map) {\n        return byteArray\n            .map(function (byte) {\n                return (\"0\" + (byte & 0xff).toString(16)).slice(-2);\n            })\n            .join(\"\");\n    } else {\n        return byteArray + \"\";\n    }\n};\n\nvar updateInput = function (input) {\n    if (input.length && input.length > 0) {\n        var normalized = byteArraytoHexString(input);\n    } else if (input.array) {\n        var normalized = byteArraytoHexString(input.array());\n    } else {\n        var normalized = input.toString();\n    }\n    return normalized;\n};\n\nvar byteArraytoHexString = function (byteArray) {\n    if (byteArray && byteArray.map) {\n        return byteArray\n            .map(function (byte) {\n                return (\"0\" + (byte & 0xff).toString(16)).slice(-2);\n            })\n            .join(\"\");\n    } else {\n        return JSON.stringify(byteArray);\n    }\n};\n\nvar hexToAscii = function (input) {\n    var hex = input.toString();\n    var str = \"\";\n    for (var i = 0; i < hex.length; i += 2)\n        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));\n    return str;\n};\n\nvar displayString = function (input) {\n    var str = input.replace(\"[\", \"\");\n    var str1 = str.replace(\"]\", \"\");\n    var res = str1.split(\",\");\n    var ret = \"\";\n    for (var i = 0; i < res.length; i++) {\n        if (res[i] > 31 && res[i] < 127) ret += String.fromCharCode(res[i]);\n        else ret += \" \";\n    }\n\n    colorLog(\"[+] PARSING TO STRING: \" + ret, { c: Color.Green });\n    colorLog(\"\", { c: Color.RESET });\n};\nvar normalize = function (input) {\n    if (input.length && input.length > 0) {\n        var normalized = byteArraytoHexString(input);\n    } else if (input.array) {\n        var normalized = byteArraytoHexString(input.array());\n    } else {\n        var normalized = input.toString();\n    }\n    return normalized;\n};\n\nvar normalizeInput = function (input) {\n    if (input.array) {\n        var normalized = byteArraytoHexString(input.array());\n    } else if (input.length && input.length > 0) {\n        var normalized = byteArraytoHexString(input);\n    } else {\n        var normalized = JSON.stringify(input);\n    }\n    return normalized;\n};\n\nvar getMode = function (Cipher, mode) {\n    if (mode === 2) {\n        mode = \"DECRYPT\";\n    } else if (mode === 1) {\n        mode = \"ENCRYPT\";\n    }\n    return mode;\n};\n\nvar getRandomValue = function (arg) {\n    if (!arg) {\n        return \"null\";\n    }\n    var type = arg.toString().split(\"@\")[0].split(\".\");\n    type = type[type.length - 1];\n    if (type === \"SecureRandom\") {\n        if (arg.getSeed) {\n            return byteArraytoHexString(arg.getSeed(10));\n        }\n    }\n};\n\nvar normalizeKey = function (cert_or_key) {\n    var type = cert_or_key.toString().split(\"@\")[0].split(\".\");\n    type = type[type.length - 1];\n    if (type === \"SecretKeySpec\") {\n        return byteArraytoHexString(cert_or_key.getEncoded());\n    } else {\n        return (\n            \"non-SecretKeySpec: \" +\n            cert_or_key.toString() +\n            \", encoded: \" +\n            byteArraytoHexString(cert_or_key.getEncoded()) +\n            \", object: \" +\n            JSON.stringify(cert_or_key)\n        );\n    }\n};\nvar byteArrayToString = function (input) {\n    var buffer = Java.array(\"byte\", input);\n\n    var result = \"\";\n\n    for (var i = 0; i < buffer.length; i++) {\n        if (buffer[i] > 31 && buffer[i] < 127) {\n            result += String.fromCharCode(buffer[i]);\n        } else {\n            result += \" \";\n        }\n    }\n\n    return result;\n};\n\nvar byteArrayToStringE = function (input) {\n    var buffer = Java.array(\"byte\", input);\n    var result = \"\";\n    var unprintable = false;\n    for (var i = 0; i < buffer.length; ++i) {\n        if (buffer[i] > 31 && buffer[i] < 127)\n            result += String.fromCharCode(buffer[i]);\n        else {\n            unprintable = true;\n            result = \"Input cant be transformed to ascii string\";\n            break;\n        }\n    }\n    return result;\n};\n\nfunction readStreamToHex(stream) {\n    var data = [];\n    var byteRead = stream.read();\n    while (byteRead != -1) {\n        data.push((\"0\" + (byteRead & 0xff).toString(16)).slice(-2));\n        /* <---------------- binary to hex ---------------> */\n        byteRead = stream.read();\n    }\n    stream.close();\n    return data.join(\"\");\n}\n\nconst jni_struct_array = [\n    \"reserved0\",\n    \"reserved1\",\n    \"reserved2\",\n    \"reserved3\",\n    \"GetVersion\",\n    \"DefineClass\",\n    \"FindClass\",\n    \"FromReflectedMethod\",\n    \"FromReflectedField\",\n    \"ToReflectedMethod\",\n    \"GetSuperclass\",\n    \"IsAssignableFrom\",\n    \"ToReflectedField\",\n    \"Throw\",\n    \"ThrowNew\",\n    \"ExceptionOccurred\",\n    \"ExceptionDescribe\",\n    \"ExceptionClear\",\n    \"FatalError\",\n    \"PushLocalFrame\",\n    \"PopLocalFrame\",\n    \"NewGlobalRef\",\n    \"DeleteGlobalRef\",\n    \"DeleteLocalRef\",\n    \"IsSameObject\",\n    \"NewLocalRef\",\n    \"EnsureLocalCapacity\",\n    \"AllocObject\",\n    \"NewObject\",\n    \"NewObjectV\",\n    \"NewObjectA\",\n    \"GetObjectClass\",\n    \"IsInstanceOf\",\n    \"GetMethodID\",\n    \"CallObjectMethod\",\n    \"CallObjectMethodV\",\n    \"CallObjectMethodA\",\n    \"CallBooleanMethod\",\n    \"CallBooleanMethodV\",\n    \"CallBooleanMethodA\",\n    \"CallByteMethod\",\n    \"CallByteMethodV\",\n    \"CallByteMethodA\",\n    \"CallCharMethod\",\n    \"CallCharMethodV\",\n    \"CallCharMethodA\",\n    \"CallShortMethod\",\n    \"CallShortMethodV\",\n    \"CallShortMethodA\",\n    \"CallIntMethod\",\n    \"CallIntMethodV\",\n    \"CallIntMethodA\",\n    \"CallLongMethod\",\n    \"CallLongMethodV\",\n    \"CallLongMethodA\",\n    \"CallFloatMethod\",\n    \"CallFloatMethodV\",\n    \"CallFloatMethodA\",\n    \"CallDoubleMethod\",\n    \"CallDoubleMethodV\",\n    \"CallDoubleMethodA\",\n    \"CallVoidMethod\",\n    \"CallVoidMethodV\",\n    \"CallVoidMethodA\",\n    \"CallNonvirtualObjectMethod\",\n    \"CallNonvirtualObjectMethodV\",\n    \"CallNonvirtualObjectMethodA\",\n    \"CallNonvirtualBooleanMethod\",\n    \"CallNonvirtualBooleanMethodV\",\n    \"CallNonvirtualBooleanMethodA\",\n    \"CallNonvirtualByteMethod\",\n    \"CallNonvirtualByteMethodV\",\n    \"CallNonvirtualByteMethodA\",\n    \"CallNonvirtualCharMethod\",\n    \"CallNonvirtualCharMethodV\",\n    \"CallNonvirtualCharMethodA\",\n    \"CallNonvirtualShortMethod\",\n    \"CallNonvirtualShortMethodV\",\n    \"CallNonvirtualShortMethodA\",\n    \"CallNonvirtualIntMethod\",\n    \"CallNonvirtualIntMethodV\",\n    \"CallNonvirtualIntMethodA\",\n    \"CallNonvirtualLongMethod\",\n    \"CallNonvirtualLongMethodV\",\n    \"CallNonvirtualLongMethodA\",\n    \"CallNonvirtualFloatMethod\",\n    \"CallNonvirtualFloatMethodV\",\n    \"CallNonvirtualFloatMethodA\",\n    \"CallNonvirtualDoubleMethod\",\n    \"CallNonvirtualDoubleMethodV\",\n    \"CallNonvirtualDoubleMethodA\",\n    \"CallNonvirtualVoidMethod\",\n    \"CallNonvirtualVoidMethodV\",\n    \"CallNonvirtualVoidMethodA\",\n    \"GetFieldID\",\n    \"GetObjectField\",\n    \"GetBooleanField\",\n    \"GetByteField\",\n    \"GetCharField\",\n    \"GetShortField\",\n    \"GetIntField\",\n    \"GetLongField\",\n    \"GetFloatField\",\n    \"GetDoubleField\",\n    \"SetObjectField\",\n    \"SetBooleanField\",\n    \"SetByteField\",\n    \"SetCharField\",\n    \"SetShortField\",\n    \"SetIntField\",\n    \"SetLongField\",\n    \"SetFloatField\",\n    \"SetDoubleField\",\n    \"GetStaticMethodID\",\n    \"CallStaticObjectMethod\",\n    \"CallStaticObjectMethodV\",\n    \"CallStaticObjectMethodA\",\n    \"CallStaticBooleanMethod\",\n    \"CallStaticBooleanMethodV\",\n    \"CallStaticBooleanMethodA\",\n    \"CallStaticByteMethod\",\n    \"CallStaticByteMethodV\",\n    \"CallStaticByteMethodA\",\n    \"CallStaticCharMethod\",\n    \"CallStaticCharMethodV\",\n    \"CallStaticCharMethodA\",\n    \"CallStaticShortMethod\",\n    \"CallStaticShortMethodV\",\n    \"CallStaticShortMethodA\",\n    \"CallStaticIntMethod\",\n    \"CallStaticIntMethodV\",\n    \"CallStaticIntMethodA\",\n    \"CallStaticLongMethod\",\n    \"CallStaticLongMethodV\",\n    \"CallStaticLongMethodA\",\n    \"CallStaticFloatMethod\",\n    \"CallStaticFloatMethodV\",\n    \"CallStaticFloatMethodA\",\n    \"CallStaticDoubleMethod\",\n    \"CallStaticDoubleMethodV\",\n    \"CallStaticDoubleMethodA\",\n    \"CallStaticVoidMethod\",\n    \"CallStaticVoidMethodV\",\n    \"CallStaticVoidMethodA\",\n    \"GetStaticFieldID\",\n    \"GetStaticObjectField\",\n    \"GetStaticBooleanField\",\n    \"GetStaticByteField\",\n    \"GetStaticCharField\",\n    \"GetStaticShortField\",\n    \"GetStaticIntField\",\n    \"GetStaticLongField\",\n    \"GetStaticFloatField\",\n    \"GetStaticDoubleField\",\n    \"SetStaticObjectField\",\n    \"SetStaticBooleanField\",\n    \"SetStaticByteField\",\n    \"SetStaticCharField\",\n    \"SetStaticShortField\",\n    \"SetStaticIntField\",\n    \"SetStaticLongField\",\n    \"SetStaticFloatField\",\n    \"SetStaticDoubleField\",\n    \"NewString\",\n    \"GetStringLength\",\n    \"GetStringChars\",\n    \"ReleaseStringChars\",\n    \"NewStringUTF\",\n    \"GetStringUTFLength\",\n    \"GetStringUTFChars\",\n    \"ReleaseStringUTFChars\",\n    \"GetArrayLength\",\n    \"NewObjectArray\",\n    \"GetObjectArrayElement\",\n    \"SetObjectArrayElement\",\n    \"NewBooleanArray\",\n    \"NewByteArray\",\n    \"NewCharArray\",\n    \"NewShortArray\",\n    \"NewIntArray\",\n    \"NewLongArray\",\n    \"NewFloatArray\",\n    \"NewDoubleArray\",\n    \"GetBooleanArrayElements\",\n    \"GetByteArrayElements\",\n    \"GetCharArrayElements\",\n    \"GetShortArrayElements\",\n    \"GetIntArrayElements\",\n    \"GetLongArrayElements\",\n    \"GetFloatArrayElements\",\n    \"GetDoubleArrayElements\",\n    \"ReleaseBooleanArrayElements\",\n    \"ReleaseByteArrayElements\",\n    \"ReleaseCharArrayElements\",\n    \"ReleaseShortArrayElements\",\n    \"ReleaseIntArrayElements\",\n    \"ReleaseLongArrayElements\",\n    \"ReleaseFloatArrayElements\",\n    \"ReleaseDoubleArrayElements\",\n    \"GetBooleanArrayRegion\",\n    \"GetByteArrayRegion\",\n    \"GetCharArrayRegion\",\n    \"GetShortArrayRegion\",\n    \"GetIntArrayRegion\",\n    \"GetLongArrayRegion\",\n    \"GetFloatArrayRegion\",\n    \"GetDoubleArrayRegion\",\n    \"SetBooleanArrayRegion\",\n    \"SetByteArrayRegion\",\n    \"SetCharArrayRegion\",\n    \"SetShortArrayRegion\",\n    \"SetIntArrayRegion\",\n    \"SetLongArrayRegion\",\n    \"SetFloatArrayRegion\",\n    \"SetDoubleArrayRegion\",\n    \"RegisterNatives\",\n    \"UnregisterNatives\",\n    \"MonitorEnter\",\n    \"MonitorExit\",\n    \"GetJavaVM\",\n    \"GetStringRegion\",\n    \"GetStringUTFRegion\",\n    \"GetPrimitiveArrayCritical\",\n    \"ReleasePrimitiveArrayCritical\",\n    \"GetStringCritical\",\n    \"ReleaseStringCritical\",\n    \"NewWeakGlobalRef\",\n    \"DeleteWeakGlobalRef\",\n    \"ExceptionCheck\",\n    \"NewDirectByteBuffer\",\n    \"GetDirectBufferAddress\",\n    \"GetDirectBufferCapacity\",\n    \"GetObjectRefType\",\n];\n\n/*\nCalculate the given funcName address from the JNIEnv pointer\n*/\nfunction getJNIFunctionAdress(jnienv_addr, func_name) {\n    var offset = jni_struct_array.indexOf(func_name) * Process.pointerSize;\n\n    // console.log(\"offset : 0x\" + offset.toString(16))\n\n    return Memory.readPointer(jnienv_addr.add(offset));\n}\n\n// Hook all function to have an overview of the function called\nfunction hook_all(jnienv_addr) {\n    jni_struct_array.forEach(function (func_name) {\n        // Calculating the address of the function\n        if (!func_name.includes(\"reserved\")) {\n            var func_addr = getJNIFunctionAdress(jnienv_addr, func_name);\n            Interceptor.attach(func_addr, {\n                onEnter: function (args) {\n                    console.log(\"[+] Entered : \" + func_name);\n                },\n            });\n        }\n    });\n}\n\nfunction inspectObject(obj) {\n    const Class_X = Java.use(\"java.lang.Class\");\n\n    const obj_class = Java.cast(obj.getClass(), Class_X);\n    const fields = obj_class.getDeclaredFields();\n    const methods = obj_class.getMethods();\n    console.log(\"Inspecting \" + obj.getClass().toString());\n    console.log(\n        \"[+]------------------------------Fields------------------------------:\",\n    );\n    for (var i in fields) console.log(\"\\t\\t\" + fields[i].toString());\n    console.log(\n        \"[+]------------------------------Methods-----------------------------:\",\n    );\n    for (var i in methods) console.log(\"\\t\\t\" + methods[i].toString());\n}\n\n//------------------------https://github.com/CreditTone/hooker----------------------------\n\nfunction classExists(className) {\n    var exists = false;\n    try {\n        var clz = Java.use(className);\n        exists = true;\n    } catch (err) {\n        //console.log(err);\n    }\n    return exists;\n}\n\nfunction methodInBeat(invokeId, timestamp, methodName, executor) {\n    var startTime = timestamp;\n    var androidLogClz = Java.use(\"android.util.Log\");\n    var exceptionClz = Java.use(\"java.lang.Exception\");\n    var threadClz = Java.use(\"java.lang.Thread\");\n    var currentThread = threadClz.currentThread();\n    var stackInfo = androidLogClz.getStackTraceString(exceptionClz.$new());\n    var str =\n        \"------------startFlag:\" +\n        invokeId +\n        \",objectHash:\" +\n        executor +\n        \",thread(id:\" +\n        currentThread.getId() +\n        \",name:\" +\n        currentThread.getName() +\n        \"),timestamp:\" +\n        startTime +\n        \"---------------\\n\";\n    str += methodName + \"\\n\";\n    str += stackInfo.substring(20);\n    str +=\n        \"------------endFlag:\" +\n        invokeId +\n        \",usedtime:\" +\n        (new Date().getTime() - startTime) +\n        \"---------------\\n\";\n    console.log(str);\n}\n\nfunction log(str) {\n    console.log(str);\n}\n\nfunction tryGetClass(className) {\n    var clz = undefined;\n    try {\n        clz = Java.use(className);\n    } catch (e) {}\n    return clz;\n}\n\nvar containRegExps = new Array();\n\nvar notContainRegExps = new Array(RegExp(/\\.jpg/), RegExp(/\\.png/));\n\nfunction check(str) {\n    str = str.toString();\n    if (!(str && str.match)) {\n        return false;\n    }\n    for (var i = 0; i < containRegExps.length; i++) {\n        if (!str.match(containRegExps[i])) {\n            return false;\n        }\n    }\n    for (var i = 0; i < notContainRegExps.length; i++) {\n        if (str.match(notContainRegExps[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n//------------------------https://github.com/CreditTone/hooker EOF----------------------------\n\nfunction sendAppInfo() {\n    var context = null;\n    var ActivityThread = Java.use(\"android.app.ActivityThread\");\n    var app = ActivityThread.currentApplication();\n\n    if (app != null) {\n        context = app.getApplicationContext();\n        var app_classname = app.getClass().toString().split(\" \")[1];\n\n        var filesDirectory = context.getFilesDir().getAbsolutePath().toString();\n        var cacheDirectory = context.getCacheDir().getAbsolutePath().toString();\n        var externalCacheDirectory = context\n            .getExternalCacheDir()\n            .getAbsolutePath()\n            .toString();\n        var codeCacheDirectory =\n            \"getCodeCacheDir\" in context\n                ? context.getCodeCacheDir().getAbsolutePath().toString()\n                : \"N/A\";\n        var obbDir = context.getObbDir().getAbsolutePath().toString();\n        var packageCodePath = context.getPackageCodePath().toString();\n        var applicationName = app_classname;\n\n        var info = {};\n        info.applicationName = applicationName;\n        info.filesDirectory = filesDirectory;\n        info.cacheDirectory = cacheDirectory;\n        info.externalCacheDirectory = externalCacheDirectory;\n        info.codeCacheDirectory = codeCacheDirectory;\n        info.obbDir = obbDir;\n        info.packageCodePath = packageCodePath;\n\n        agSysPacket({ information: \"app\", info: info }).send();\n    } else {\n        console.log(\"No context yet!\");\n    }\n}\n\n//------------------------https://github.com/CreditTone/hooker EOF----------------------------\n\nfunction notifyNewSharedPreference(key, value) {\n    var k = key;\n    var v = value;\n    Java.use(\"android.app.SharedPreferencesImpl$EditorImpl\").putString.overload(\n        \"java.lang.String\",\n        \"java.lang.String\",\n    ).implementation = function (k, v) {\n        console.log(\"[SharedPreferencesImpl]\", k, \"=\", v);\n        return this.putString(k, v);\n    };\n}\n\n// Send some stuff about the app\nsetTimeout(function () {\n    sendAppInfo();\n}, 1000);\n"
  },
  {
    "path": "libs/androguard/pentest/modules/binder/intercept_binder.js",
    "content": "// Ripped from https://github.com/foundryzero/binder-trace and modified to fit Androguard packets\n\ncolorLog('[+] LOADING BINDER/INTERCEPT_BINDER.JS',{c: Color.Red});\n\n\nconst BINDER_WRITER_READ = 0xc0306201;\nconst BC_TRANSACTION = 0x40406300;\nconst BC_REPLY = 0x40406301;\n\nvar parameters = {};\n\n// Note: this filtering mechanism here doesn't actually get used - I moved to filtering displayed parcels rather than\n// filtering which parcels are captured.\nvar exclude_re = { test(i) { return false } };\nvar exclude_list = Array();\n\n// Special case: if there are no exclusions and any inclusions, this is set to true\n// to exclude everything by default instead of including everything.\nvar just_include = false;\n\nvar include_re = { test(i) { return false } };\nvar include_list = Array();\n\nvar verbosity = 0;\n\nvar silent = true;\n\nvar android_version = 11; // Default to android 11, but a different version can be provided through the options object.\n\nrpc.exports = {\n    init: function (stage, param) {\n        parameters = param;\n\n        if (!('exclude' in parameters || 'exclude_re' in parameters) && ('include' in parameters || 'include_re' in parameters)) {\n            just_include = true;\n        }\n\n        if ('exclude' in parameters) {\n            exclude_list = parameters.exclude\n        }\n\n        if ('exclude_re' in parameters) {\n            try {\n                exclude_re = new RegExp(parameters.exclude_re)\n            } catch (e) {\n                console.error(\"Invalid exclusion regex\")\n            }\n        }\n\n        if ('include' in parameters) {\n            just_include = true\n            include_list = parameters.include\n        }\n\n        if ('include_re' in parameters) {\n            try {\n                include_re = new RegExp(parameters.include_re)\n            } catch (e) {\n                console.error(\"Invalid inclusion regex\")\n            }\n        }\n\n        if ('verbosity' in parameters) {\n            switch (parameters.verbosity) {\n                case 0:\n                    verbosity = 0;\n                    break;\n                case 1:\n                    verbosity = 1;\n                    break;\n                case 2:\n                    verbosity = 2;\n                    break;\n\n                default:\n                    console.error(\"Invalid verbosity value\")\n            }\n        }\n\n        if ('connected' in parameters) {\n            silent = true;\n        }\n\n        if ('version' in parameters) {\n            android_version = parameters.version\n        }\n\n\n    }\n}\n\nfunction check_printable_descriptor(descriptor) {\n    var included = !just_include; // Usually set to true, false if there are only inclusion conditions. \n\n    //console.log(include_list)\n\n    if (exclude_list.includes(descriptor) || exclude_re.test(descriptor)) {\n        included = false;\n    }\n\n    if (include_list.includes(descriptor) || include_re.test(descriptor)) {\n        included = true;\n    }\n\n    return included\n}\n\nfunction binder_write_read(ptr) {\n    return {\n        ptr: ptr,\n        get write_size() { return this.ptr.readU64(); },\n        get write_consumed() { return this.ptr.add(8).readU64(); },\n        get write_buffer() { return this.ptr.add(16).readPointer(); },\n        get read_size() { return this.ptr.add(24).readU64(); },\n        get read_consumed() { return this.ptr.add(32).readU64(); },\n        get read_buffer() { return this.ptr.add(40).readPointer(); }\n    }\n}\n\nfunction interface_token(ptr) {\n    return {\n        ptr: ptr,\n        get strict_mode_policy() { return this.ptr.readU32(); },\n        get work_source_uid() { return this.ptr.add(4).readU32(); },\n        get version_header() { return this.ptr.add(8).readU32(); },\n        get descriptor_length() {\n            if (android_version >= 10) {\n                return this.ptr.add(12).readU32();\n            } else {\n                return this.ptr.add(4).readU32();\n            }\n        },\n        get descriptor() {\n            if (android_version >= 10) {\n                return this.ptr.add(16).readUtf16String(this.descriptor_length);\n            } else {\n                return this.ptr.add(8).readUtf16String(this.descriptor_length);\n            }\n        },\n    }\n}\n\nfunction parcel(ptr) {\n    if (Process.arch == \"ia32\" || Process.arch == \"arm\") {\n        // Return 32-bit parcel\n        return {\n            ptr: ptr,\n            get error() { return this.ptr.readU32() },\n            get data() { return this.ptr.add(4).readPointer() },\n            get data_size() { return this.ptr.add(8).readU32() },\n            get data_capacity() { return this.ptr.add(12).readU32() },\n            get data_pos() { return this.ptr.add(16).readU32() },\n            get objects() { return this.ptr.add(20).readPointer() },\n            get objects_size() { return this.ptr.add(24).readU32() },\n            get objects_capacity() { return this.ptr.add(28).readU32() },\n            get next_object_hint() { return this.ptr.add(32).readU32() },\n            get objects_sorted() { return this.ptr.add(36).readU8() } // TODO finish parsing this\n        }\n    } else {\n        // Return 64-bit parcel\n        return {\n            ptr: ptr,\n            get error() { return this.ptr.readU64() },\n            get data() { return this.ptr.add(8).readPointer() },\n            get data_size() { return this.ptr.add(16).readU64() },\n            get data_capacity() { return this.ptr.add(24).readU64() },\n            get data_pos() { return this.ptr.add(32).readU64() },\n            get objects() { return this.ptr.add(40).readPointer() },\n            get objects_size() { return this.ptr.add(48).readU64() },\n            get objects_capacity() { return this.ptr.add(56).readU64() },\n            get next_object_hint() { return this.ptr.add(64).readU64() },\n            get objects_sorted() { return this.ptr.add(72).readU8() } // TODO finish parsing this\n        }\n    }\n}\n\nfunction print_transaction(p, code) {\n\n    var token = interface_token(p.data)\n\n    if(silent) {\n        agBinderPacket({information: \"TRANSACT\", \"code\": code.toInt32()}, p.data.readByteArray(p.data_size)).send();\n        //send({\"type\" : \"TRANSACT\", \"code\": code.toInt32()}, p.data.readByteArray(p.data_size))\n    } else {\n\n        if (verbosity == 0) {\n            console.log(token.descriptor + \":\" + code)\n        } else if (verbosity == 1) {\n            console.log(JSON.stringify({ \"name\": token.descriptor, \"code\": code }));\n            console.log(hexdump(p.data, {\n                length: p.data_size,\n                header: true,\n                ansi: true\n            }));\n        } else if (verbosity == 2) {\n            console.log('\\n\\n\\n')\n            console.log(JSON.stringify({ \"name\": token.descriptor, \"code\": code }));\n            console.log(hexdump(p.data, {\n                length: p.data_size,\n                header: true,\n                ansi: true\n            }));\n        }\n    }\n\n}\n\nvar temp = ptr(0)\n\n// IPCThreadState::transact()\nInterceptor.attach(Module.getExportByName(\"libbinder.so\", \"_ZN7android14IPCThreadState8transactEijRKNS_6ParcelEPS1_j\"), {\n    reply: ptr(\"0x0\"),\n    descriptor: \"\",\n    code: 0,\n\n    onEnter: function (args) {\n        if (!silent) {\n            console.log(\"\\n\\n\\nTRANSACTION \" + args[0] + \", \" + args[1] + \", \" + args[2] + \", \" + args[3] + \", \" + args[4] + \", \" + args[5]);\n        }\n\n        var data = parcel(args[3])\n\n        if (data.data.isNull()) {\n            //console.log(\">> weird packet\")\n            this.reply = ptr(\"0x0\");\n            return;\n        }\n\n        if (check_printable_descriptor(interface_token(data.data).descriptor)) {\n            print_transaction(data, args[2]);\n            if (args[5].toInt32() & 0x1 || args[4].isNull()) {\n                //console.log(\">> one way packet\")\n                this.reply = ptr(\"0x0\");\n            } else {\n                this.reply = parcel(args[4])\n                this.code = args[2].toInt32()\n                this.descriptor = interface_token(data.data).descriptor\n            }\n        }\n    },\n\n    onLeave: function (retval) {\n        if (\"data\" in this.reply) { // If this.reply is a Parcel\n            if (!silent) {\n                console.log(\"REPLY \" + this.reply.ptr)\n                console.log(hexdump(this.reply.data, { ansi: true, length: this.reply.data_size }));\n            } else {\n                agBinderPacket({information: \"REPLY\", \"code\": this.code, \"descriptor\": this.descriptor}, this.reply.data.readByteArray(this.reply.data_size)).send();\n            }\n\n            this.reply = ptr(0);\n        }\n    }\n})"
  },
  {
    "path": "libs/androguard/pentest/modules/code_loading/dex.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING CODE_LOADING/DEX.JS',{c: Color.Red});\n\nvar pathClassLoader = Java.use(\"dalvik.system.PathClassLoader\");\n\nvar dexclassLoader = Java.use(\"dalvik.system.DexClassLoader\");\nvar basedexclassLoader = Java.use(\"dalvik.system.BaseDexClassLoader\");\nvar delegateLastClassLoader = Java.use(\"dalvik.system.DelegateLastClassLoader\");\nvar clazz = Java.use('java.lang.Class');\n\ndexclassLoader.$init.implementation = function(dexPath,  optimizedDirectory,  librarySearchPath,  parent){\n    colorLog('DexClassLoader called:', {c: Color.Green});\n\n    console.log(\"dexPath=\" + dexPath );\n    console.log(\"optimizedDirectory=\" + optimizedDirectory);\n    console.log(\"librarySearchPath=\" + librarySearchPath);\n    console.log(\"parent=\" + parent);\n\n    return this.$init(dexPath, optimizedDirectory,  librarySearchPath,  parent);\n}\n\nbasedexclassLoader.$init.overloads[0].implementation = function(dexPath,  optimizedDirectory,  librarySearchPath,  parent){\n    colorLog('BaseDexClassLoader called:', {c: Color.Green});\n     console.log(\"dexPath=\" + dexPath );\n     console.log(\"optimizedDirectory=\" + optimizedDirectory);\n     console.log(\"librarySearchPath=\" + librarySearchPath);\n     console.log(\"parent=\" + parent);           \n     return this.$init(dexPath, optimizedDirectory,  librarySearchPath,  parent);\n }\n\n\n\n delegateLastClassLoader.$init.overloads[0].implementation = function ( dexPath,  parent){\n    colorLog('DelegateLastClassLoader called:', {c: Color.Green});\n    console.log(\"dexPath=\" + dexPath );\n    console.log(\"parent=\" + parent);           \n    return this.$init(dexPath, parent);\n\n }\n\n delegateLastClassLoader.$init.overloads[1].implementation = function ( dexPath, librarySearchPath, parent){\n    colorLog('DelegateLastClassLoader called:', {c: Color.Green});\n    console.log(\"dexPath=\" + dexPath );\n    console.log(\"librarySearchPath=\" + librarySearchPath);\n    console.log(\"parent=\" + parent);         \n    return this.$init(dexPath,librarySearchPath, parent);\n\n }\n\n traceClass('dalvik.system.InMemoryDexClassLoader');\n\n//Creates a PathClassLoader that operates on a given list of files and directories.\n\npathClassLoader.$init.overloads[0].implementation= function( dexPath,  parent){\n    colorLog('PathClassLoader called:', {c: Color.Green});\n    console.log(\"dexPath=\" + dexPath );\n    console.log(\"parent=\" + parent);         \n    return this.$init(dexPath, parent);\n\n}\n\n\n\n\npathClassLoader.$init.overloads[1].implementation=function( dexPath,  librarySearchPath,  parent){\n    colorLog('PathClassLoader called:', {c: Color.Green});\n    console.log(\"dexPath=\" + dexPath );\n    console.log(\"librarySearchPath=\" + librarySearchPath);\n    console.log(\"parent=\" + parent);         \n    return this.$init(dexPath,librarySearchPath, parent);\n\n}\n"
  },
  {
    "path": "libs/androguard/pentest/modules/code_loading/dyndex.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING CODE_LOADING/DYNDEX.JS',{c: Color.Red});\n\nconst classLoader = Java.use('dalvik.system.DexClassLoader');\nconst pathLoader = Java.use('dalvik.system.PathClassLoader');\nconst memoryLoader = Java.use('dalvik.system.InMemoryDexClassLoader');\nconst delegateLoader = Java.use('dalvik.system.DelegateLastClassLoader');\nconst File = Java.use('java.io.File');\nconst FileInputStream = Java.use(\"java.io.FileInputStream\");\nconst FileOutputStream = Java.use(\"java.io.FileOutputStream\");\nconst ActivityThread = Java.use(\"android.app.ActivityThread\");\nvar counter = 0;\n\nfunction dump(filename) {\n    var sourceFile = File.$new(filename);\n    var fis = FileInputStream.$new(sourceFile);\n    var inputChannel = fis.getChannel();\n\n    var application = ActivityThread.currentApplication();\n    if (application == null) return ;\n    var context = application.getApplicationContext();\n\n    // you cannot dump to /sdcard unless the app has rights to!\n    var fos = context.openFileOutput('dump_'+counter, 0);\n    counter = counter + 1;\n\n    var outputChannel = fos.getChannel();\n    inputChannel.transferTo(0, inputChannel.size(), outputChannel);\n    fis.close();\n    fos.close();\n\n    console.log(\"[+] Dumped \"+filename+\" to dump_\"+counter);\n}\n\n\nclassLoader.$init.implementation = function(filename, b, c, d) {\n    colorLog('DexClassLoader called: '+filename, {c: Color.Yellow});\n    dump(filename);\n    return this.$init(filename, b, c, d);\n}\n\npathLoader.$init.overload('java.lang.String', 'java.lang.ClassLoader').implementation = function(filename, parent) {\n    colorLog('PathClassLoader(f,p) called: '+filename, {c: Color.Yellow});\n    dump(filename);\n    return this.$init(filename, parent);\n}\n\npathLoader.$init.overload('java.lang.String', 'java.lang.String', 'java.lang.ClassLoader').implementation = function(filename, librarySearchPath, parent) {\n    colorLog('PathClassLoader(f,l,p) called: '+filename, {c: Color.Yellow});\n    dump(filename);\n    return this.$init(filename, librarySearchPath, parent);\n}\n\ndelegateLoader.$init.overload('java.lang.String', 'java.lang.ClassLoader').implementation = function(filename, parent) {\n    colorLog('DelegateLastClassLoader(f,p) called: '+filename, {c: Color.Yellow});\n    dump(filename);\n    return this.$init(filename, parent);\n}\n\ndelegateLoader.$init.overload('java.lang.String', 'java.lang.String', 'java.lang.ClassLoader').implementation = function(filename, librarySearchPath, parent) {\n    colorLog('DelegateLastClassLoader(f,l,p) called: '+filename, {c: Color.Yellow});\n    dump(filename);\n    return this.$init(filename, librarySearchPath, parent);\n}\n\nif (Java.use('android.os.Build$VERSION').SDK_INT.value > 28) {\n    delegateLoader.$init.overload('java.lang.String', 'java.lang.String', 'java.lang.ClassLoader', 'boolean').implementation = function(filename, librarySearchPath, parent, resourceLoading) {\n        colorLog('DelegateLastClassLoader(f,l,p,b) called: '+filename, {c: Color.Yellow});\n        dump(filename);\n        return this.$init(filename, librarySearchPath, parent, resourceLoading);\n    }\n}\n\nmemoryLoader.$init.overload('java.nio.ByteBuffer', 'java.lang.ClassLoader').implementation = function(dexbuffer, loader) {\n    var object = this.$init(dexbuffer, loader);\n\n    /* dexbuffer is a Java ByteBuffer */\n    var remaining = dexbuffer.remaining();\n\n    var filename = 'dump_' + counter;\n    counter = counter + 1;\n    console.log(\"[*] InMemoryDexClassLoader: Opening file name=\"+filename+\" to write \"+remaining+\" bytes\");\n\n    const f = new File(filename,'wb');\n    var buf = new Uint8Array(remaining);\n    for (var i=0;i<remaining;i++) {\n        buf[i] = dexbuffer.get();\n        //debug: console.log(\"buf[\"+i+\"]=\"+buf[i]);\n    }\n    console.log(\"[*] Writing \"+remaining+\" bytes...\");\n    f.write(buf);\n    f.close();\n\n    // checking\n    remaining = dexbuffer.remaining();\n    if (remaining > 0) {\n        console.log(\"[-] Error: There are \"+remaining+\" remaining bytes!\");\n    } else {\n        console.log(\"[+] Dex dumped successfully in \"+filename);\n    }\n    return object;\n}\n"
  },
  {
    "path": "libs/androguard/pentest/modules/code_loading/load_class.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING CODE_LOADING/LOAD_CLASS.JS',{c: Color.Red});\n\nvar classLoaderDef = Java.use('java.lang.ClassLoader');\nvar loadClass = classLoaderDef.loadClass.overload('java.lang.String', 'boolean');\nvar internalClasses = [ \"android.\", \"org.\", \"com.google.\", \"java.\", \"androidx.\"];\n\n/* taken from https://github.com/eybisi/nwaystounpackmobilemalware/blob/master/dereflect.js */\nloadClass.implementation = function(class_name, resolve) {\n    var isGood = true;\n    for (var i = 0; i < internalClasses.length; i++) {\n        if (class_name.startsWith(internalClasses[i])) {\n            isGood = false;\n        }\n    }\n    if (isGood) {\n        agPacket({class_name: class_name}).send();\n    }\n    return loadClass.call(this, class_name, resolve);\n}"
  },
  {
    "path": "libs/androguard/pentest/modules/code_loading/native.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING CODE_LOADING/NATIVE.JS',{c: Color.Red});\n\nvar systemA = Java.use('java.lang.System');\n\nsystemA.load.implementation = function(filename) {\n    agPacket({filename: filename}).send();\n    return this.load(filename);\n}\n\n/*\nsystemA.loadLibrary.implementation = function(libname) {\n    agPacket({libname: libname}).send();\n    colorLog('[+] Application is loading the following library:'+libname,{c: Color.Red});\n    return this.loadLibrary(libname);\n}*/\n\nsystemA.mapLibraryName.implementation = function(libname) {\n    agPacket({libname: libname}).send();\n    var ret = this.mapLibraryName(libname);\n    return ret;\n}"
  },
  {
    "path": "libs/androguard/pentest/modules/compression/gzip.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING COMPRESSION/GZIP.JS',{c: Color.Red});\n\nvar gzipInputStream = Java.use('java.util.zip.GZIPInputStream');\nvar gzipOutputStream = Java.use('java.util.zip.GZIPOutputStream');\n\ngzipOutputStream.write.implementation = function(buff, off, len_n){\n\n    var buffer = Java.array('byte', buff);\n    var result = \"\";\n    for(var i = 0; i < buffer.length; ++i){\n        if(buffer[i] >= 32 && buffer[i]<127)\n            result+= (String.fromCharCode(buffer[i]));\n    }\n\n    agPacket({result: result}).send();\n\n    return this.write(buff, off, len_n);\n}\n\ngzipInputStream.read.implementation = function(buff, off, len_n){\n    var buffer = Java.array('byte', buff);\n    var result = \"\";\n    for(var i = 0; i < buffer.length; ++i){\n        if(buffer[i] >= 32 && buffer[i]<127)\n            result+= (String.fromCharCode(buffer[i]));\n    }\n\n    agPacket({result: result}).send();\n    return this.write(buff,off,len_n);\n}"
  },
  {
    "path": "libs/androguard/pentest/modules/encoding/base64.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING ENCODING/BASE64.JS', {c: Color.Red});\n\nvar base64 = Java.use('android.util.Base64');\n\nbase64.decode.overloads[0].implementation = function(endString, flags) {\n    var ret = this.decode(endString, flags);\n    agPacket({endString: endString, flags: flags, ret: ret}).send();\n    return ret;\n}\n\nbase64.encode.overloads[0].implementation = function(byteString, flags) {\n    var ret = this.encode(byteString,flags);\n    agPacket({byteString: byteString, flags: flags, ret: ret}).send();\n    return ret;\n}\n\nbase64.encode.overloads[1].implementation = function(byteString, offset, ln, flags) {\n    var ret = this.encode(byteString, offset, ln, flags);\n    agPacket({byteString: byteString, flags: flags, ln: ln, ret: ret}).send();\n    return ret;\n}\n\nbase64.encodeToString.overloads[1].implementation = function(byteString,flags){\n    var ret = this.encodeToString(byteString, flags);\n    agPacket({byteString: byteString, flags: flags, ret: ret}).send();\n    return ret;\n}"
  },
  {
    "path": "libs/androguard/pentest/modules/encryption/cipher.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog(\"[+] LOADING ENCRYPTION/CIPHER.JS\", { c: Color.Red });\n\nvar cipher = Java.use(\"javax.crypto.Cipher\");\n\ncipher.init.overload(\"int\", \"java.security.Key\").implementation = function (\n    mode,\n    key,\n) {\n    var operation = \"\";\n    var algorithm = this.getAlgorithm();\n\n    if (mode == 1) operation = \"Encrypting\";\n    else if (mode == 2) operation = \"Decrypting\";\n\n    agPacket({\n        algorithm: algorithm,\n        operation: operation,\n        mode: mode,\n        key: byteArraytoHexString(key.getEncoded()),\n    }).send();\n\n    return this.init(mode, key);\n};\n\ncipher.init.overload(\n    \"int\",\n    \"java.security.Key\",\n    \"java.security.spec.AlgorithmParameterSpec\",\n).implementation = function (mode, key, paramsec) {\n    var operation = \"\";\n    var algorithm = this.getAlgorithm();\n\n    if (mode == 1) operation = \"Encrypting\";\n    else if (mode == 2) operation = \"Decrypting\";\n\n    agPacket({\n        algorithm: algorithm,\n        mode: mode,\n        operation: operation,\n        key: byteArraytoHexString(key.getEncoded()),\n        iv: paramsec,\n    }).send();\n\n    return this.init(mode, key, paramsec);\n};\n\ncipher.init.overload(\n    \"int\",\n    \"java.security.Key\",\n    \"java.security.AlgorithmParameters\",\n    \"java.security.SecureRandom\",\n).implementation = function (mode, key, paramsec, secRnd) {\n    var operation = \"\";\n    var algorithm = this.getAlgorithm();\n\n    if (mode == 1) operation = \"Encrypting\";\n    else if (mode == 2) operation = \"Decrypting\";\n\n    agPacket({\n        algorithm: algorithm,\n        mode: mode,\n        operation: operation,\n        key: byteArraytoHexString(key.getEncoded()),\n        iv: paramsec,\n        secRnd: secRnd,\n    }).send();\n    return this.init(mode, key, paramsec, secRnd);\n};\n\n//DO FINAL--------------------------------\n\ncipher.doFinal.overload(\"[B\").implementation = function (byteArray) {\n    var ret = this.doFinal(byteArray);\n    agPacket({\n        in: byteArraytoHexString(byteArray),\n        ret: byteArraytoHexString(ret),\n    }).send();\n    return ret;\n};\n\ncipher.doFinal.overload(\"[B\", \"int\").implementation = function (\n    byteArray,\n    outputOffset,\n) {\n    var ret = this.doFinal(byteArray, outputOffset);\n    agPacket({ in: byteArray, outputOffset: outputOffset, ret: ret }).send();\n    return ret;\n};\n\ncipher.doFinal.overload(\"[B\", \"int\", \"int\").implementation = function (\n    byteArray,\n    outputOffset,\n    inputlen,\n) {\n    var ret = this.doFinal(byteArray, outputOffset, inputlen);\n    agPacket({\n        in: byteArray,\n        outputOffset: outputOffset,\n        inputlen: inputlen,\n        ret: ret,\n    }).send();\n    return ret;\n};\n\ncipher.doFinal.overload(\"[B\", \"int\", \"int\", \"[B\").implementation = function (\n    byteArray,\n    outputOffset,\n    inputlen,\n    output,\n) {\n    var ret = this.doFinal(byteArray, outputOffset, inputlen, output);\n    agPacket({\n        in: byteArray,\n        out: output,\n        outputOffset: outputOffset,\n        inputlen: inputlen,\n        ret: ret,\n    }).send();\n    return ret;\n};\n\ncipher.doFinal.overload(\"[B\", \"int\", \"int\", \"[B\", \"int\").implementation =\n    function (byteArray, outputOffset, inputlen, output, outoffset) {\n        var ret = this.doFinal(\n            byteArray,\n            outputOffset,\n            inputlen,\n            output,\n            outoffset,\n        );\n        agPacket({\n            in: byteArray,\n            out: output,\n            outputOffset: outputOffset,\n            inputlen: inputlen,\n            outoffset: outoffset,\n            ret: ret,\n        }).send();\n        return ret;\n    };\n"
  },
  {
    "path": "libs/androguard/pentest/modules/encryption/keystore.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog(\"[+] LOADING ENCRYPTION/KEYSTORE.JS\", { c: Color.Red });\n\nvar keystore = Java.use(\"java.security.KeyStore\");\n\nkeystore.containsAlias.overload(\"java.lang.String\").implementation = function (\n    alias,\n) {\n    var ret = this.containsAlias(alias);\n    agPacket({\n        alias: alias,\n        ret: ret,\n    }).send();\n\n    return ret;\n};\n\nkeystore.getKey.overload(\"java.lang.String\", \"[C\").implementation = function (\n    alias,\n    password,\n) {\n    var ret = this.getKey(alias, password);\n    agPacket({\n        alias: alias,\n        password: password,\n        algorithm: ret.getAlgorithm(),\n        encoded: ret.getEncoded(),\n        ret: ret,\n    }).send();\n\n    return ret;\n};\n\nkeystore.load.overload(\"java.io.InputStream\", \"[C\").implementation = function (\n    stream,\n    charArray,\n) {\n    /* sometimes this happen, I have no idea why, tho... */\n    if (stream == null) {\n        /* just to avoid interfering with app's flow */\n        this.load(stream, charArray);\n        return;\n    }\n\n    var hexString = readStreamToHex(stream);\n\n    agPacket({\n        certType: this.getType(),\n        password: charArray,\n        cert: hexString,\n    }).send();\n\n    /* call the original implementation of 'load' */\n    this.load(stream, charArray);\n    /* no need to return anything */\n};\n"
  },
  {
    "path": "libs/androguard/pentest/modules/file_system/shared_preferences.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING FILE_SYSTEM/SHARED_PREFERENCES.JS',{c: Color.Red});\n\nvar SharedPreferencesImpl = Java.use(\"android.app.SharedPreferencesImpl\");\nvar SharedPreferencesImpl_EditorImpl = Java.use(\"android.app.SharedPreferencesImpl$EditorImpl\");\n \n SharedPreferencesImpl.contains.implementation = function(key) {\n   var value = this.contains(key);\n   agPacket({key: key, value: value}).send();\n   return value;\n };\n\n SharedPreferencesImpl.getInt.implementation = function(key, defValue) {\n   var value = this.getInt(key, defValue);\n   agPacket({key: key, defValue: defValue, value: value}).send();\n   return value;\n };\n\n SharedPreferencesImpl.getFloat.implementation = function(key, defValue) {  \n   var value = this.getFloat(key, defValue);\n   agPacket({key: key, defValue: defValue, value: value}).send();\n   return value;\n };\n\n SharedPreferencesImpl.getLong.implementation = function(key, defValue) {\n   var value = this.getLong(key, defValue);\n   agPacket({key: key, defValue: defValue, value: value}).send();\n   return value;\n };\n\n SharedPreferencesImpl.getBoolean.implementation = function(key, defValue) {\n   var value = this.getBoolean(key, defValue);\n   agPacket({key: key, defValue: defValue, value: value}).send();\n   return value;\n };\n\n SharedPreferencesImpl.getString.implementation = function(key, defValue) {\n   var value = this.getString(key, defValue);\n   agPacket({key: key, defValue: defValue, value: value}).send();\n   return value;\n };\n\n SharedPreferencesImpl.getStringSet.implementation = function(key, defValue) {\n    var value = this.getStringSet(key, defValue);\n    agPacket({key: key, defValue: defValue, value: value}).send();\n    return value;\n };\n\n SharedPreferencesImpl_EditorImpl.putString.implementation = function(key, value) {\n    agPacket({key: key, value: value}).send();\n   return this.putString(key,value);\n };\n\n SharedPreferencesImpl_EditorImpl.putStringSet.implementation = function(key, values) {\n    agPacket({key: key, values: values}).send();\n   return this.putStringSet(key,values);\n };\n\n SharedPreferencesImpl_EditorImpl.putInt.implementation = function(key, value) {\n   agPacket({key: key, value: value}).send();\n   return this.putInt(key,value);\n };\n\n SharedPreferencesImpl_EditorImpl.putFloat.implementation = function(key, value) {\n    agPacket({key: key, value: value}).send();\n    return this.putFloat(key,value);\n };\n\n SharedPreferencesImpl_EditorImpl.putBoolean.implementation = function(key, value) {\n    agPacket({key: key, value: value}).send();\n    return this.putBoolean(key,value);\n };\n\n SharedPreferencesImpl_EditorImpl.putLong.implementation = function(key, value) {\n    agPacket({key: key, value: value}).send();\n    return this.putLong(key,value);\n };\n\n SharedPreferencesImpl_EditorImpl.remove.implementation = function(key) {\n    agPacket({key: key}).send();\n   return this.remove(key);\n };"
  },
  {
    "path": "libs/androguard/pentest/modules/framework/cordova.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING FRAMEWORK/CORDOVA.JS',{c: Color.Red});\n\nvar pluginManager = tryGetClass(\"org.apache.cordova.PluginManager\");\n\nif (pluginManager) {\n    pluginManager.instantiatePlugin.implementation = function(pluginName){\n        agPacket({pluginName: pluginName}).send();\n        return this.instantiatePlugin(pluginName);\n    }    \n}\n\n"
  },
  {
    "path": "libs/androguard/pentest/modules/framework/flutter/disable_cert_chain_bypass_v7a.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING FRAMEWORK/FLUTTER/VERIFY_CERT_CHAIN_BYPASS_V7A.JS',{c: Color.Red});\n\n// Based on nviso's article https://blogger.nviso.eu/2020/05/20/intercepting-flutter-traffic-on-android-x64/\n\nvar m = Process.findModuleByName(\"libflutter.so\"); \n\nvar pattern = \"2d e9 f0 4f a3 b0 81 46 50 20 10 70 d9 f8 98 70 00 2f 4d d0 38 68 00 28 4a d0 78 68 0d 46 0d f1 08 0a 90 46 06 68 d1 e9 00 01\";\nfunction hook() {\n    Memory.scan(m.base, m.size, pattern, {\n        onMatch: function(address, size){\n            colorLog('[+] ssl_crypto_x509_session_verify_cert_chain found at: ' + address.toString(),{c: Color.Green});\n            colorLog('[+] Setting up hook.... ',{c: Color.Blue});\n            Interceptor.attach(address.add(0x1),{\n\n                onEnter: function(args){\n                    colorLog('[+] Entering ssl_crypto_x509_session_verify_cert_chain ',{c: Color.Green});\n\n                },\n                onLeave: function(retval){\n                    colorLog('\\t[+] Initial Return Value: '+retval,{c: Color.Blue});\n                    colorLog('\\t[+] Returning True ',{c: Color.Red});\n                    retval.replace(0x1);\n                }\n\n            });\n        }, \n        onError: function(reason){\n            console.log('[!] There was an error scanning memory');\n        },\n        onComplete: function()\n        {\n            colorLog('[+] All Done... ',{c: Color.Blue});\n        }\n    });\n}\n\ntry {\n    colorLog(\"[+] Finding libflutter.so\",{c: Color.Green});\n    Module.ensureInitialized(\"libflutter.so\");\n    hook();\n} catch(err) {\n    console.log(\"libflutter.so module not loaded. Trying to manually load it.\")\n    Module.load(\"libflutter.so\");\n}\n"
  },
  {
    "path": "libs/androguard/pentest/modules/framework/flutter/disable_cert_chain_bypass_v8a.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING FRAMEWORK/FLUTTER/VERIFY_CERT_CHAIN_BYPASS_V8A.JS',{c: Color.Red});\n\n// Based on nviso's article https://blogger.nviso.eu/2020/05/20/intercepting-flutter-traffic-on-android-x64/\n\nfunction hook(){\n    var m = Process.findModuleByName(\"libflutter.so\"); \n\n    var pattern = \"ff 03 05 d1 fd 7b 0f a9 fa 67 10 a9 f8 5f 11 a9 f6 57 12 a9 f4 4f 13 a9 08 0a 80 52 48 00 00 39 16 54 40 f9\";\n    Memory.scan(m.base, m.size, pattern, {\n        onMatch: function(address, size){\n            colorLog('[+] ssl_crypto_x509_session_verify_cert_chain found at: ' + address.toString(),{c: Color.Green});\n            colorLog('[+] Setting up hook.... ',{c: Color.Blue});\n            Interceptor.attach(address,{\n\n                onEnter: function(args){\n                    colorLog('[+] Entering ssl_crypto_x509_session_verify_cert_chain ',{c: Color.Green});\n\n                },\n                onLeave: function(retval){\n                    colorLog('\\t[+] Initial Return Value: '+retval,{c: Color.Blue});\n                    colorLog('\\t[+] Returning True ',{c: Color.Red});\n                    retval.replace(0x1);\n                }\n\n            });\n        }, \n        onError: function(reason){\n            console.log('[!] There was an error scanning memory');\n        },\n        onComplete: function()\n        {\n            colorLog('[+] All Done... ',{c: Color.Blue});\n        }\n    });\n}\n\n\ntry {\n    colorLog(\"[+] Finding libflutter.so\",{c: Color.Green});\n    Module.ensureInitialized(\"libflutter.so\");\n    hook();\n} catch(err) {\n    console.log(\"libflutter.so module not loaded. Trying to manually load it.\")\n    Module.load(\"libflutter.so\");\n}\n"
  },
  {
    "path": "libs/androguard/pentest/modules/framework/flutter/disable_cert_chain_bypass_x86_64.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING FRAMEWORK/FLUTTER/VERIFY_CERT_CHAIN_BYPASS_X86_64.JS',{c: Color.Red});\n\n// Based on nviso's article https://blogger.nviso.eu/2020/05/20/intercepting-flutter-traffic-on-android-x64/\n\nfunction hook(){\n    var m = Process.findModuleByName(\"libflutter.so\"); \n\n    var pattern = \"55 41 57 41 56 41 55 41 54 53 48 81 ec f8 00 00 00 c6 02 50 48 8b 9f a8 00 00 00 48 85 db 0f 84 10 01 00 00 48 83 3b 00 0f 84 06 01 00 00\";\n    Memory.scan(m.base, m.size, pattern, {\n        onMatch: function(address, size){\n            colorLog('[+] ssl_crypto_x509_session_verify_cert_chain found at: ' + address.toString(),{c: Color.Green});\n            colorLog('[+] Setting up hook.... ',{c: Color.Blue});\n            Interceptor.attach(address,{\n\n                onEnter: function(args){\n                    colorLog('[+] Entering ssl_crypto_x509_session_verify_cert_chain ',{c: Color.Green});\n\n                },\n                onLeave: function(retval){\n                    colorLog('\\t[+] Initial Return Value: '+retval,{c: Color.Blue});\n                    colorLog('\\t[+] Returning True ',{c: Color.Red});\n                    retval.replace(0x1);\n                }\n\n            });\n        }, \n        onError: function(reason){\n            console.log('[!] There was an error scanning memory');\n        },\n        onComplete: function()\n        {\n            colorLog('[+] All Done... ',{c: Color.Blue});\n        }\n        });\n\n}\n\ntry {\n    colorLog(\"[+] Finding libflutter.so\",{c: Color.Green});\n    Module.ensureInitialized(\"libflutter.so\");\n    hook();\n} catch(err) {\n    console.log(\"libflutter.so module not loaded. Trying to manually load it.\")\n    Module.load(\"libflutter.so\");\n}\n"
  },
  {
    "path": "libs/androguard/pentest/modules/helpers/antidebug/binaries.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING HELPER/ANTIDEBUG/BINARIES.JS', {c: Color.Red});\n\n\nvar RootBinaries = [\"su\", \"busybox\", \"supersu\", \"Superuser.apk\", \"KingoUser.apk\", \"KingoRoot.apk\", \"SuperSu.apk\", \"magisk\", \"otacerts.zip\", \"Kingroot.apk\"];\n\nvar NativeFile = Java.use('java.io.File');\n\nNativeFile.exists.implementation = function() {\n    var name = NativeFile.getName.call(this);\n    agPacket({name: name}).send();\n\n    var shouldFakeReturn = (RootBinaries.indexOf(name) > -1);\n    if (shouldFakeReturn) {\n        agSysPacket({information: \"bypass\", cmd: name}).send();\n        return false;\n    } else {\n        return this.exists.call(this);\n    }\n};\n\nNativeFile.$init.overload(\"java.lang.String\").implementation = function(path){\n    agPacket({path: path}).send();\n    return NativeFile.$init.overload(\"java.lang.String\").call(this, path);\n}\n\nNativeFile.$init.overload(\"java.io.File\", \"java.lang.String\").implementation = function(fileObject, path){\n    agPacket({fileObject: fileObject.toString(), path: path}).send();\n    return NativeFile.$init.overload(\"java.io.File\", \"java.lang.String\").call(this, fileObject, path);\n}\n\nNativeFile.$init.overload(\"java.lang.String\", \"java.lang.String\").implementation = function(parent, path){\n    agPacket({parent: parent, path: path}).send();\n    return NativeFile.$init.overload(\"java.lang.String\", \"java.lang.String\").call(this, parent, path);\n}\n\nNativeFile.$init.overload(\"java.net.URI\").implementation = function(neturi){\n    agPacket({neturi: neturi.toString()}).send();\n    return NativeFile.$init.overload(\"java.net.URI\").call(this, neturi);\n}\n\n\nInterceptor.attach(Module.findExportByName(\"libc.so\", \"fopen\"), {\n    onEnter: function(args) {\n        var path = Memory.readCString(args[0]);\n        if (path) {\n            var spath = path;\n            path = path.split(\"/\");\n            var executable = path[path.length - 1];\n\n            agPacket({executable: executable, path: spath}).send();\n\n            var shouldFakeReturn = (RootBinaries.indexOf(executable) > -1);\n            if (shouldFakeReturn) {\n                Memory.writeUtf8String(args[0], \"/notexists\");\n                agSysPacket({information: \"bypass\", cmd: executable}).send();\n            }\n        }\n    },\n    onLeave: function(retval) {\n    }\n});"
  },
  {
    "path": "libs/androguard/pentest/modules/helpers/antidebug/debug.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING HELPER/ANTIDEBUG/DEBUG.JS',{c: Color.Red});\n\nvar antidebug = Java.use('android.os.Debug');\n\nantidebug.isDebuggerConnected.implementation = function(){\n    agSysPacket({information: \"overwriting is debugger connected\"}).send();\n    return false;\n}\n"
  },
  {
    "path": "libs/androguard/pentest/modules/helpers/antidebug/environment.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING HELPER/ANTIDEBUG/ENVIRONMENT.JS',{c: Color.Red});\n\nvar a_activity = Java.use('android.app.Activity');\n\na_activity.isTaskRoot.implementation=function(){\n    agSysPacket({information: \"overwriting isTaskRoot\"}).send();\n    return true;\n}\n\nvar hook = Java.use('android.provider.Settings$Secure');\n\nvar overloadCount1 = hook['getInt'].overloads.length;\n\nfor (var i = 0; i < overloadCount1; i++) {\n    hook['getInt'].overloads[i].implementation = function() {\n        var retval = this['getInt'].apply(this, arguments);\n        var param = arguments[1];\n        if(param === \"development_settings_enabled\" || param == \"adb_enabled\") {\n            agSysPacket({information: \"AntiDebug technique detected\", param: param}).send();\n            return 0;\n        }\n        \n        return retval;\n    }\n}\n\nconst STRINGS_TO_REPLACE = \"frida\";\n\nconst replaceLine = (text) => {\n    if (text.indexOf(\"ro.build.tags=test-keys\") > -1) {\n        agSysPacket({information: \"replaceLine bypass\", match: \"Bypass build.prop file read\", text: text}).send();\n        return text.replace(\"ro.build.tags=test-keys\", \"ro.build.tags=release-keys\");\n    }\n\n    text.trim().toLowerCase().replace(STRINGS_TO_REPLACE, (match) => {\n        agSysPacket({information: \"replaceLine bypass\", match: match, text: text}).send();\n        return text.replaceAll(match, getRandomNumberString(5, 20));\n    });\n    \n    return text;\n}\n\nvar RootProperties = {\n    \"ro.build.selinux\": \"0\",\n    \"ro.debuggable\": \"0\",\n    \"service.adb.root\": \"0\",\n    \"ro.secure\": \"1\"\n};\n\nvar RootPropertiesKeys = [];\n\nfor (var k in RootProperties) RootPropertiesKeys.push(k);\n\nvar String = Java.use('java.lang.String');\n\nvar SystemProperties = Java.use('android.os.SystemProperties');\n\nvar BufferedReader = Java.use('java.io.BufferedReader');\n\nvar StringBuffer = Java.use('java.lang.StringBuffer');\n\nvar loaded_classes = Java.enumerateLoadedClassesSync();\n\nconsole.log(\"Loaded \" + loaded_classes.length + \" classes!\");\n\nvar useKeyInfo = false;\n\nvar KeyInfo = null;\n\nif (loaded_classes.indexOf('android.security.keystore.KeyInfo') != -1) {\n    try {\n        useKeyInfo = true;\n        var KeyInfo = Java.use('android.security.keystore.KeyInfo');\n    } catch (err) {\n        console.log(\"KeyInfo Hook failed: \" + err);\n    }\n} else {\n    console.log(\"KeyInfo hook not loaded\");\n}\n\n\nif (useKeyInfo) {\n    KeyInfo.isInsideSecureHardware.implementation = function() {\n        agSysPacket({information: \"bypass\", details: \"isInsideSecureHardware\"}).send();\n        return true;\n    }\n}\n\nString.contains.implementation = function(name) {\n    if (name == \"test-keys\") {\n        agSysPacket({information: \"bypass\", details: \"Bypass test-keys check\"}).send();\n        return false;\n    }\n    return this.contains.call(this, name);\n};\n\nvar get = SystemProperties.get.overload('java.lang.String');\n\nget.implementation = function(name) {\n    if (RootPropertiesKeys.indexOf(name) != -1) {\n        agSysPacket({information: \"bypass\", name: name}).send();\n        return RootProperties[name];\n    }\n    return this.get.call(this, name);\n};\n\nBufferedReader.readLine.overloads[0].implementation = function() {\n    var text = this.readLine.call(this);\n    if (text !== null) {\n        text = replaceLine(text);\n    }\n    return text;\n};\n\nBufferedReader.readLine.overloads[1].implementation = function(boolean_) {\n    var text = this.readLine(boolean_);\n    if (text !== null) {\n        text = replaceLine(text);\n    } \n    return text;\n};\n\n/*\nInterceptor.attach(Module.findExportByName(null, '__system_property_get'), {\n\tonEnter: function (args) {\n\t\tthis._name = args[0].readCString();\n\t\tthis._value = args[1];\n\n        colorLog(\"__system_property_get \" + this._name, {c: Color.Red});\n\t},\n\tonLeave: function (retval) {\n\t\tconsole.log(JSON.stringify({\n\t\t\tresult_length: retval,\n\t\t\tname: this._name,\n\t\t\tval: this._value.readCString()\n\t\t}));\n\t}\n});\n*/"
  },
  {
    "path": "libs/androguard/pentest/modules/helpers/antidebug/package.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING HELPER/ANTIDEBUG/PACKAGE.JS',{c: Color.Red});\n\nvar PackageManager = Java.use(\"android.app.ApplicationPackageManager\");\n\nvar RootPackages = [\n    \"com.noshufou.android.su\", \n    \"com.noshufou.android.su.elite\",\n    \"eu.chainfire.supersu\",\n    \"com.koushikdutta.superuser\",\n    \"com.thirdparty.superuser\",\n    \"com.yellowes.su\",\n    \"com.koushikdutta.rommanager\",\n    \"com.koushikdutta.rommanager.license\",\n    \"com.dimonvideo.luckypatcher\",\n    \"com.chelpus.lackypatch\",\n    \"com.ramdroid.appquarantine\",\n    \"com.ramdroid.appquarantinepro\",\n    \"com.devadvance.rootcloak\",\n    \"com.devadvance.rootcloakplus\",\n    \"de.robv.android.xposed.installer\",\n    \"com.saurik.substrate\",\n    \"com.zachspong.temprootremovejb\",\n    \"com.amphoras.hidemyroot\",\n    \"com.amphoras.hidemyrootadfree\",\n    \"com.formyhm.hiderootPremium\",\n    \"com.formyhm.hideroot\",\n    \"me.phh.superuser\",\n    \"eu.chainfire.supersu.pro\",\n    \"com.kingouser.com\",\n    \"com.android.vending.billing.InAppBillingService.COIN\",\n    \"com.android.vending.billing.InAppBillingService.LUCK\",\n    \"com.chelpus.luckypatcher\",\n    \"com.blackmartalpha\",\n    \"org.blackmart.market\",\n    \"com.allinone.free\",\n    \"com.repodroid.app\",\n    \"org.creeplays.hack\",\n    \"com.baseappfull.fwd\", \n    \"com.zmapp\",\n    \"com.dv.marketmod.installer\",\n    \"org.mobilism.android\",\n    \"com.android.wp.net.log\", \n    \"com.android.camera.update\",\n    \"cc.madkite.freedom\",\n    \"com.solohsu.android.edxp.manager\", \n    \"org.meowcat.edxposed.manager\",\n    \"com.xmodgame\",\n    \"com.cih.game_cih\",\n    \"com.kingroot.kinguser\", \n    \"com.charles.lpoqasert\",\n    \"catch_.me_.if_.you_.can_\",\n    \"com.topjohnwu.magisk\",\n    \"com.kingo.root\",\n    \"com.smedialink.oneclickroot\",\n    \"com.zhiqupk.root.global\",\n    \"com.alephzain.framaroot\"\n];\n\nPackageManager.getPackageInfo.overloads[0].implementation = function(pname, flags) {\n    agPacket({pname: pname, flags: flags}).send();\n\n    var shouldFakePackage = (RootPackages.indexOf(pname) > -1);\n    if (shouldFakePackage) {\n        agSysPacket({information: \"bypass\", package: pname}).send();\n        pname = \"set.package.name.to.a.fake.one.so.we.can.bypass.it\";\n    }\n    return this.getPackageInfo.call(this, pname, flags);\n};\n\n\n\nPackageManager.getPackageInfo.overloads[1].implementation = function(sname, flags) {\n    agPacket({sname: sname, flags: flags}).send();\n\n    var shouldFakePackage = (RootPackages.indexOf(sname) > -1);\n    if (shouldFakePackage) {\n        agSysPacket({information: \"bypass\", package: sname}).send();\n        sname = \"set.package.name.to.a.fake.one.so.we.can.bypass.it\";\n    }\n\n    return this.getPackageInfo.call(this, sname, flags);\n};"
  },
  {
    "path": "libs/androguard/pentest/modules/helpers/antidebug/process.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING HELPER/ANTIDEBUG/PROCESS.JS',{c: Color.Red});\n\nvar fakeCmd = \"justafakecommandthatcannotexistsusingthisshouldthowanexceptionwheneversuiscalled\";\n\n\nvar loaded_classes = Java.enumerateLoadedClassesSync();\n\nconsole.log(\"Loaded \" + loaded_classes.length + \" classes!\");\n\nvar useProcessManager = false;\n\nconsole.log(\"loaded: \" + loaded_classes.indexOf('java.lang.ProcessManager'));\n\nif (loaded_classes.indexOf('java.lang.ProcessManager') != -1) {\n    try {\n        useProcessManager = true;\n        var ProcessManager = Java.use('java.lang.ProcessManager');\n    } catch (err) {\n        console.log(\"ProcessManager Hook failed: \" + err);\n    }\n} else {\n    console.log(\"ProcessManager hook not loaded\");\n}\n\nif (useProcessManager) {\n    var ProcManExec = ProcessManager.exec.overload('[Ljava.lang.String;', '[Ljava.lang.String;', 'java.io.File', 'boolean');\n    var ProcManExecVariant = ProcessManager.exec.overload('[Ljava.lang.String;', '[Ljava.lang.String;', 'java.lang.String', 'java.io.FileDescriptor', 'java.io.FileDescriptor', 'java.io.FileDescriptor', 'boolean');\n\n    ProcManExec.implementation = function(cmd, env, workdir, redirectstderr) {\n        agPacket({cmd: cmd}).send();\n\n        var fake_cmd = cmd;\n        for (var i = 0; i < cmd.length; i = i + 1) {\n            var tmp_cmd = cmd[i];\n            if (tmp_cmd.indexOf(\"getprop\") != -1 || tmp_cmd == \"mount\" || tmp_cmd.indexOf(\"build.prop\") != -1 || tmp_cmd == \"id\") {\n                var fake_cmd = [\"grep\"];\n                agSysPacket({information: \"proc exec bypass\", cmd: cmd}).send();\n\n            }\n\n            if (tmp_cmd == \"su\") {\n                var fake_cmd = [fakeCmd];\n                agSysPacket({information: \"proc exec bypass\" , cmd: cmd}).send();\n            }\n        }\n        return ProcManExec.call(this, fake_cmd, env, workdir, redirectstderr);\n    };\n\n    ProcManExecVariant.implementation = function(cmd, env, directory, stdin, stdout, stderr, redirect) {\n        agPacket({cmd: cmd}).send();\n\n        var fake_cmd = cmd;\n        for (var i = 0; i < cmd.length; i = i + 1) {\n            var tmp_cmd = cmd[i];\n            if (tmp_cmd.indexOf(\"getprop\") != -1 || tmp_cmd == \"mount\" || tmp_cmd.indexOf(\"build.prop\") != -1 || tmp_cmd == \"id\") {\n                var fake_cmd = [\"grep\"];\n                agSysPacket({information: \"proc exec variant bypass\", cmd: cmd}).send();\n            }\n\n            if (tmp_cmd == \"su\") {\n                var fake_cmd = [fakeCmd];\n                agSysPacket({information: \"proc exec variant bypass\", cmd: cmd}).send();\n            }\n        }\n        return ProcManExecVariant.call(this, fake_cmd, env, directory, stdin, stdout, stderr, redirect);\n    };\n}\n\n\nInterceptor.attach(Module.findExportByName(\"libc.so\", \"system\"), {\n    onEnter: function(args) {\n        var cmd = Memory.readCString(args[0]);\n        agPacket({cmd: cmd}).send();\n        if (cmd.indexOf(\"getprop\") != -1 || cmd == \"mount\" || cmd.indexOf(\"build.prop\") != -1 || cmd == \"id\") {\n            agSysPacket({information: \"system bypass\", cmd: cmd}).send();\n            Memory.writeUtf8String(args[0], \"grep\");\n        }\n        if (cmd == \"su\") {\n            agSysPacket({information: \"system bypass\", cmd: cmd}).send();\n            Memory.writeUtf8String(args[0], fakeCmd);\n        }\n    },\n    onLeave: function(retval) {\n\n    }\n});\n\n\nvar ProcessBuilder = Java.use('java.lang.ProcessBuilder');\nvar executeCommand = ProcessBuilder.command.overload('java.util.List');\n\nProcessBuilder.start.implementation = function() {\n    var cmd = this.command.call(this);\n    var shouldModifyCommand = false;\n    agPacket({cmd: cmd}).send();\n\n    for (var i = 0; i < cmd.size(); i = i + 1) {\n        var tmp_cmd = cmd.get(i).toString();\n        if (tmp_cmd.indexOf(\"getprop\") != -1 || tmp_cmd.indexOf(\"mount\") != -1 || tmp_cmd.indexOf(\"build.prop\") != -1 || tmp_cmd.indexOf(\"id\") != -1) {\n            shouldModifyCommand = true;\n        }\n    }\n    if (shouldModifyCommand) {\n        agSysPacket({information: \"process builder bypass\", cmd: cmd}).send();\n        this.command.call(this, [\"grep\"]);\n        return this.start.call(this);\n    }\n    if (cmd.indexOf(\"su\") != -1) {\n        agSysPacket({information: \"process builder bypass\", cmd: cmd}).send();\n        this.command.call(this, [fakeCmd]);\n        return this.start.call(this);\n    }\n\n    return this.start.call(this);\n};\n\n\nvar Runtime = Java.use('java.lang.Runtime');\n\nvar exec = Runtime.exec.overload('[Ljava.lang.String;');\nvar exec1 = Runtime.exec.overload('java.lang.String');\nvar exec2 = Runtime.exec.overload('java.lang.String', '[Ljava.lang.String;');\nvar exec3 = Runtime.exec.overload('[Ljava.lang.String;', '[Ljava.lang.String;');\nvar exec4 = Runtime.exec.overload('[Ljava.lang.String;', '[Ljava.lang.String;', 'java.io.File');\nvar exec5 = Runtime.exec.overload('java.lang.String', '[Ljava.lang.String;', 'java.io.File');\n\n\nexec5.implementation = function(cmd, env, dir) {\n    agPacket({cmd: cmd, env: env, dir: dir}).send();\n\n    if (cmd.indexOf(\"getprop\") != -1 || cmd == \"mount\" || cmd.indexOf(\"build.prop\") != -1 || cmd == \"id\" || cmd == \"sh\") {\n        agSysPacket({information: \"exec5 bypass\", cmd: cmd}).send();\n        return exec1.call(this, \"grep\");\n    }\n    if (cmd == \"su\") {\n        agSysPacket({information: \"exec5 bypass\", cmd: cmd}).send();\n        return exec1.call(this, fakeCmd);\n    }\n    return exec5.call(this, cmd, env, dir);\n};\n\nexec4.implementation = function(cmdarr, env, file) {\n    agPacket({cmdarr: cmdarr, env: env, file: file}).send();\n\n    for (var i = 0; i < cmdarr.length; i = i + 1) {\n        var tmp_cmd = cmdarr[i];\n        if (tmp_cmd.indexOf(\"getprop\") != -1 || tmp_cmd == \"mount\" || tmp_cmd.indexOf(\"build.prop\") != -1 || tmp_cmd == \"id\" || tmp_cmd == \"sh\") {\n            agSysPacket({information: \"exec4 bypass\", cmd: cmd}).send();\n            return exec1.call(this, \"grep\");\n        }\n\n        if (tmp_cmd == \"su\") {\n            agSysPacket({information: \"exec4 bypass\", cmd: cmd}).send();\n            return exec1.call(this, fakeCmd);\n        }\n    }\n\n    return exec4.call(this, cmdarr, env, file);\n};\n\nexec3.implementation = function(cmdarr, envp) {\n    agPacket({cmdarr: cmdarr, envp: envp}).send();\n\n    for (var i = 0; i < cmdarr.length; i = i + 1) {\n        var tmp_cmd = cmdarr[i];\n        if (tmp_cmd.indexOf(\"getprop\") != -1 || tmp_cmd == \"mount\" || tmp_cmd.indexOf(\"build.prop\") != -1 || tmp_cmd == \"id\" || tmp_cmd == \"sh\") {\n            agSysPacket({information: \"exec3 bypass\", cmd: cmd}).send();\n            return exec1.call(this, \"grep\");\n        }\n\n        if (tmp_cmd == \"su\") {\n            agSysPacket({information: \"exec3 bypass\", cmd: cmd}).send();\n            return exec1.call(this, fakeCmd);\n        }\n    }\n    return exec3.call(this, cmdarr, envp);\n};\n\nexec2.implementation = function(cmd, env) {\n    agPacket({cmd: cmd, env: env}).send();\n\n    if (cmd.indexOf(\"getprop\") != -1 || cmd == \"mount\" || cmd.indexOf(\"build.prop\") != -1 || cmd == \"id\" || cmd == \"sh\") {\n        agSysPacket({information: \"exec2 bypass\", cmd: cmd}).send();\n        return exec1.call(this, \"grep\");\n    }\n\n    if (cmd == \"su\") {\n        agSysPacket({information: \"exec2 bypass\", cmd: cmd}).send();\n        return exec1.call(this, fakeCmd);\n    }\n    return exec2.call(this, cmd, env);\n};\n\nexec1.implementation = function(cmd) {\n    agPacket({cmd: cmd}).send();\n   \n    if (cmd.indexOf(\"getprop\") != -1 || cmd == \"mount\" || cmd.indexOf(\"build.prop\") != -1 || cmd == \"id\" || cmd == \"sh\") {\n        agSysPacket({information: \"exec1 bypass\", cmd: cmd}).send();\n        return exec1.call(this, \"grep\");\n    }\n    \n    if (cmd == \"su\") {\n        agSysPacket({information: \"exec1 bypass\", cmd: cmd}).send();\n        return exec1.call(this, fakeCmd);\n    }\n\n    return exec1.call(this, cmd);\n};\n\nexec.implementation = function(cmd) {\n    agPacket({cmd: cmd}).send();\n\n    for (var i = 0; i < cmd.length; i = i + 1) {\n        var tmp_cmd = cmd[i];\n        if (tmp_cmd.indexOf(\"getprop\") != -1 || tmp_cmd == \"mount\" || tmp_cmd.indexOf(\"build.prop\") != -1 || tmp_cmd == \"id\" || tmp_cmd == \"sh\") {\n            agSysPacket({information: \"exec bypass\", cmd: cmd}).send();\n            return exec1.call(this, \"grep\");\n        }\n\n        if (tmp_cmd == \"su\") {\n            agSysPacket({information: \"exec bypass\", cmd: cmd}).send();\n            return exec.call(this, [\"which\", fakeCmd]);\n        }\n    }\n\n    return exec.call(this, cmd);\n};\n\n\n/*\n\nTO IMPLEMENT:\n\nExec Family\n\nint execl(const char *path, const char *arg0, ..., const char *argn, (char *)0);\nint execle(const char *path, const char *arg0, ..., const char *argn, (char *)0, char *const envp[]);\nint execlp(const char *file, const char *arg0, ..., const char *argn, (char *)0);\nint execlpe(const char *file, const char *arg0, ..., const char *argn, (char *)0, char *const envp[]);\nint execv(const char *path, char *const argv[]);\nint execve(const char *path, char *const argv[], char *const envp[]);\nint execvp(const char *file, char *const argv[]);\nint execvpe(const char *file, char *const argv[], char *const envp[]);\n\n*/\n"
  },
  {
    "path": "libs/androguard/pentest/modules/helpers/dump/dexdump.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\n/*\n* Author: hluwa <hluwa888@gmail.com>\n* HomePage: https://github.com/hluwa\n* CreatedTime: 2020/1/7 20:44\n* */\n\ncolorLog('[+] LOADING HELPERS/DUMP/DEXDUMP.JS',{c: Color.Red});\n\n\nvar enable_deep_search = true;\n\nfunction verify_by_maps(dexptr, mapsptr) {\n    var maps_offset = dexptr.add(0x34).readUInt();\n    var maps_size = mapsptr.readUInt();\n    for (var i = 0; i < maps_size; i++) {\n        var item_type = mapsptr.add(4 + i * 0xC).readU16();\n        if (item_type === 4096) {\n            var map_offset = mapsptr.add(4 + i * 0xC + 8).readUInt();\n            if (maps_offset === map_offset) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\nfunction verify(dexptr, range, enable_verify_maps) {\n\n    if (range != null) {\n        var range_end = range.base.add(range.size);\n        // verify header_size\n        if (dexptr.add(0x70) > range_end) {\n            return false;\n        }\n\n        // verify file_size\n        var dex_size = dexptr.add(0x20).readUInt();\n        if (dexptr.add(dex_size) > range_end) {\n            return false;\n        }\n\n        if (enable_verify_maps) {\n            var maps_offset = dexptr.add(0x34).readUInt();\n            if (maps_offset === 0) {\n                return false\n            }\n\n            var maps_address = dexptr.add(maps_offset);\n            if (maps_address > range_end) {\n                return false\n            }\n\n            var maps_size = maps_address.readUInt();\n            if (maps_size < 2 || maps_size > 50) {\n                return false\n            }\n            var maps_end = maps_address.add(maps_size * 0xC + 4);\n            if (maps_end < range.base || maps_end > range_end) {\n                return false\n            }\n            return verify_by_maps(dexptr, maps_address)\n        } else {\n            return dexptr.add(0x3C).readUInt() === 0x70;\n        }\n    }\n\n\n}\n\nrpc.exports = {\n    memorydump: function memorydump(address, size) {\n        return new NativePointer(address).readByteArray(size);\n    },\n    switchmode: function switchmode(bool){\n        enable_deep_search = bool;\n    },\n    scandex: function scandex() {\n        var result = [];\n        Process.enumerateRanges('r--').forEach(function (range) {\n            try {\n                Memory.scanSync(range.base, range.size, \"64 65 78 0a 30 ?? ?? 00\").forEach(function (match) {\n\n                    if (range.file && range.file.path\n                        && (// range.file.path.startsWith(\"/data/app/\") ||\n                            range.file.path.startsWith(\"/data/dalvik-cache/\") ||\n                            range.file.path.startsWith(\"/system/\"))) {\n                        return;\n                    }\n\n                    if (verify(match.address, range, false)) {\n                        var dex_size = match.address.add(0x20).readUInt();\n                        result.push({\n                            \"addr\": match.address,\n                            \"size\": dex_size\n                        });\n                    }\n                });\n\n                if (enable_deep_search) {\n                    Memory.scanSync(range.base, range.size, \"70 00 00 00\").forEach(function (match) {\n                        var dex_base = match.address.sub(0x3C);\n                        if (dex_base < range.base) {\n                            return\n                        }\n                        if (dex_base.readCString(4) != \"dex\\n\" && verify(dex_base, range, true)) {\n                            var dex_size = dex_base.add(0x20).readUInt();\n                            result.push({\n                                \"addr\": dex_base,\n                                \"size\": dex_size\n                            });\n                        }\n                    })\n                } else {\n                    if (range.base.readCString(4) != \"dex\\n\" && verify(range.base, range, true)) {\n                        var dex_size = range.base.add(0x20).readUInt();\n                        result.push({\n                            \"addr\": range.base,\n                            \"size\": dex_size\n                        });\n                    }\n                }\n\n            } catch (e) {\n            }\n        });\n\n        return result;\n    }\n};"
  },
  {
    "path": "libs/androguard/pentest/modules/helpers/pinning/ssl.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING HELPERS/PINNING/SSL.JS',{c: Color.Red});\n\n// Bypass TrustManager pinning\nfunction bypass_trustmanager_pinning() {\n    var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager');\n    var SSLContext = Java.use('javax.net.ssl.SSLContext');\n  \n    // TrustManager (Android < 7)\n    var TrustManager = Java.registerClass({\n        // Implement a custom TrustManager\n        name: 'dev.asd.test.TrustManager',\n        implements: [X509TrustManager],\n        methods: {\n            checkClientTrusted: function (chain, authType) {},\n            checkServerTrusted: function (chain, authType) {},\n            getAcceptedIssuers: function () {return []; }\n        }\n    });\n\n    // Prepare the TrustManager array to pass to SSLContext.init()\n    var TrustManagers = [TrustManager.$new()];\n    // Get a handle on the init() on the SSLContext class\n    var SSLContext_init = SSLContext.init.overload(\n        '[Ljavax.net.ssl.KeyManager;', '[Ljavax.net.ssl.TrustManager;', 'java.security.SecureRandom');\n    try {\n        // Override the init method, specifying the custom TrustManager\n        SSLContext_init.implementation = function(keyManager, trustManager, secureRandom) {\n            agSysPacket({information: \"trustmanager pinning\", keyManager: keyManager, trustManager: trustManager, secureRandom: secureRandom}).send();\n            SSLContext_init.call(this, keyManager, TrustManagers, secureRandom);\n        };\n        agSysPacket({information: \"trustmanager hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: TrustManager (Android < 7) pinner not found\"}).send();\n    }\n}\n\n// OkHTTPv3 (4 bypass)\nfunction bypass_okhttp3_pinning() {\n    try {\n        var okhttp3_Activity = Java.use('okhttp3.CertificatePinner');\n    } catch (err) {\n        agSysPacket({information: \"error: OkHTTPv3 pinner not found\"}).send();\n    }\n\n    try {\n        okhttp3_Activity[\"check$okhttp\"].implementation = function (str) {\n            agSysPacket({information: \"Bypassing OkHTTPv3: {1} \" + str}).send();\n            return;\n        };\n        agSysPacket({information: \"OkHTTPv3: {1} hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: OkHTTPv3: {1} not found\"}).send();\n    }\n\n    try {\n        okhttp3_Activity.check.overload('java.lang.String', 'java.util.List').implementation = function (str) {\n            agSysPacket({information: \"Bypassing OkHTTPv3 {2}: \" + str}).send();\n            return;\n        };\n        agSysPacket({information: \"OkHTTPv3: {2} hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: OkHTTPv3: {2} not found\"}).send();\n    }\n\n    try {\n        // This method of CertificatePinner.check could be found in some old Android app\n        okhttp3_Activity.check.overload('java.lang.String', 'java.security.cert.Certificate').implementation = function (str) {\n            agSysPacket({information: \"Bypassing OkHTTPv3 {3}: \" + str}).send();\n            return;\n        };\n        agSysPacket({information: \"OkHTTPv3: {3} hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: OkHTTPv3: {3} not found\"}).send();\n    }\n\n    try {\n        okhttp3_Activity.check$okhttp.overload('java.lang.String', 'kotlin.jvm.functions.Function0').implementation = function(a, b) {\t\t\n                agSysPacket({information: \"Bypassing OkHTTPv3 {4}: \" + a}).send();\n                return;\n        };\n        agSysPacket({information: \"OkHTTPv3: {4} hooked installed\"}).send();\n    } catch(err) {\n        agSysPacket({information: \"error: OkHTTPv3: {4} not found\"}).send();\n    }\n}\n\nfunction bypass_trustkit_pinning() {\n    try {\n        var trustkit_Activity = Java.use('com.datatheorem.android.trustkit.pinning.OkHostnameVerifier');\n        trustkit_Activity.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function (str) {\n            agSysPacket({information: \"Bypassing Trustkit {1}: \" + str}).send();\n            return true;\n        };\n        agSysPacket({information: \"Trustkit {1} hooked installed\"}).send();\n\n        trustkit_Activity.verify.overload('java.lang.String', 'java.security.cert.X509Certificate').implementation = function (str) {\n            agSysPacket({information: \"Bypassing Trustkit {2}: \" + str}).send();\n            return true;\n        };\n        agSysPacket({information: \"Trustkit {2} hooked installed\"}).send();\n\n        var trustkit_PinningTrustManager = Java.use('com.datatheorem.android.trustkit.pinning.PinningTrustManager');\n        trustkit_PinningTrustManager.checkServerTrusted.overload('[Ljava.security.cert.X509Certificate;', 'java.lang.String').implementation = function(chain, authType) {\n            agSysPacket({information: \"Bypassing Trustkit {3}: \" + chain}).send();\n        };\n        agSysPacket({information: \"Trustkit {3} hooked installed\"}).send();\n\n    } catch (err) {\n        agSysPacket({information: \"error: Trustkit pinner not found\"}).send();\n    }\n}\n\nfunction bypass_trustmanagerimpl_pinning(){\n    try {\n        // Bypass TrustManagerImpl (Android > 7) {1}\n        var array_list = Java.use(\"java.util.ArrayList\");\n        var TrustManagerImpl_Activity_1 = Java.use('com.android.org.conscrypt.TrustManagerImpl');\n        TrustManagerImpl_Activity_1.checkTrustedRecursive.implementation = function(certs, ocspData, tlsSctData, host, clientAuth, untrustedChain, trustAnchorChain, used) {\n            agSysPacket({information: \"Bypassing TrustManagerImpl (Android > 7) checkTrustedRecursive check: \"+ host}).send();\n            return array_list.$new();\n        };\n        agSysPacket({information: \"TrustManagerImpl checkTrustedRecursive hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: TrustManagerImpl (Android > 7) checkTrustedRecursive check not found\"}).send();\n    } \n\n    // TrustManagerImpl (Android > 7)\n    try {\n        var TrustManagerImpl = Java.use('com.android.org.conscrypt.TrustManagerImpl');\n        TrustManagerImpl.verifyChain.implementation = function (untrustedChain, trustAnchorChain, host, clientAuth, ocspData, tlsSctData) {\n            agSysPacket({information: \"Bypassing TrustManagerImpl verifyChain (Android > 7): ' + host): \"+ host}).send();\n            return untrustedChain;\n        };\n        agSysPacket({information: \"TrustManagerImpl verifyChain hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: TrustManagerImpl (Android > 7) verifyChain pinner not found\"}).send();\n    }\n}\n\nfunction bypass_appcelerator_pinning() {\n    try {\n        var appcelerator_PinningTrustManager = Java.use('appcelerator.https.PinningTrustManager');\n        appcelerator_PinningTrustManager.checkServerTrusted.implementation = function () {\n            agSysPacket({information: \"Bypassing Appcelerator PinningTrustManager\"}).send();\n            return;\n        };\n        agSysPacket({information: \"Appcelerator hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: Appcelerator PinningTrustManager pinner not found\"}).send();\n    }\n}\n\nfunction bypass_conscript_pinning() {\n    try {\n        var OpenSSLSocketImpl = Java.use('com.android.org.conscrypt.OpenSSLSocketImpl');\n        OpenSSLSocketImpl.verifyCertificateChain.implementation = function (certRefs, JavaObject, authMethod) {\n            agSysPacket({information: \"Bypassing OpenSSLSocketImpl Conscrypt\"}).send();\n        };\n        agSysPacket({information: \"OpenSSLSocketImpl hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: OpenSSLSocketImpl Conscrypt pinner not found\"}).send();\n    }\n\n\n    // OpenSSLEngineSocketImpl Conscrypt\n    try {\n        var OpenSSLEngineSocketImpl_Activity = Java.use('com.android.org.conscrypt.OpenSSLEngineSocketImpl');\n        OpenSSLSocketImpl_Activity.verifyCertificateChain.overload('[Ljava.lang.Long;', 'java.lang.String').implementation = function (str1, str2) {\n            agSysPacket({information: \"Bypassing OpenSSLEngineSocketImpl Conscrypt: \" + str2}).send();\n        };\n        agSysPacket({information: \"OpenSSLEngineSocketImpl hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: OpenSSLEngineSocketImpl Conscrypt pinner not found\"}).send();\n    }\n\n    try {\n        var conscrypt_CertPinManager_Activity = Java.use('com.android.org.conscrypt.CertPinManager');\n        conscrypt_CertPinManager_Activity.isChainValid.overload('java.lang.String', 'java.util.List').implementation = function (str) {\n            agSysPacket({information: \"Bypassing Conscrypt CertPinManager: \" + str}).send();\n            return true;\n        };\n        agSysPacket({information: \"Conscrypt hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: Conscrypt CertPinManager pinner not found\"}).send();\n    }\n\n}\n\nfunction bypass_apacheharmony_pinning() {\n    try {\n        var OpenSSLSocketImpl_Harmony = Java.use('org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl');\n        OpenSSLSocketImpl_Harmony.verifyCertificateChain.implementation = function (asn1DerEncodedCertificateChain, authMethod) {\n            agSysPacket({information: \"Bypassing OpenSSLSocketImpl Apache Harmony\"}).send();\n        };\n        agSysPacket({information: \"OpenSSLSocketImpl Apache Harmony hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: OpenSSLSocketImpl Apache Harmony pinner not found\"}).send();\n    }\n}\n\nfunction bypass_phonegapp_pinning() {\n    // PhoneGap sslCertificateChecker (https://github.com/EddyVerbruggen/SSLCertificateChecker-PhoneGap-Plugin)\n    try {\n        var phonegap_Activity = Java.use('nl.xservices.plugins.sslCertificateChecker');\n        phonegap_Activity.execute.overload('java.lang.String', 'org.json.JSONArray', 'org.apache.cordova.CallbackContext').implementation = function (str) {\n            agSysPacket({information: \"Bypassing PhoneGap sslCertificateChecker: \" + str}).send();\n            return true;\n        };\n        agSysPacket({information: \"PhoneGap sslCertificateChecker hooked installed\"}).send();\n    } catch (err) {\n        agSysPacket({information: \"error: PhoneGap sslCertificateChecker pinner not found\"}).send();\n    }\n}\n\nfunction bypass_ibm_pinning() {\n    // IBM MobileFirst pinTrustedCertificatePublicKey (double bypass)\n    try {\n        var WLClient_Activity = Java.use('com.worklight.wlclient.api.WLClient');\n        WLClient_Activity.getInstance().pinTrustedCertificatePublicKey.overload('java.lang.String').implementation = function (cert) {\n            agSysPacket({information: \"Bypassing IBM MobileFirst pinTrustedCertificatePublicKey {1}: \" + cert}).send();\n            return;\n        };\n        agSysPacket({information: \"IBM MobileFirst pinTrustedCertificatePublicKey hooked installed\"}).send();\n\n        WLClient_Activity.getInstance().pinTrustedCertificatePublicKey.overload('[Ljava.lang.String;').implementation = function (cert) {\n            agSysPacket({information: \"Bypassing IBM MobileFirst pinTrustedCertificatePublicKey {2}: \" + cert}).send();\n            return;\n        };\n        agSysPacket({information: \"IBM MobileFirst pinTrustedCertificatePublicKey hooked installed\"}).send();\n\n    } catch (err) {\n        agSysPacket({information: \"error: IBM MobileFirst pinTrustedCertificatePublicKey pinner not found\"}).send();\n    }\n}\n\nfunction bypass_ibmworklight_pinning() {\n    // IBM WorkLight (ancestor of MobileFirst) HostNameVerifierWithCertificatePinning (quadruple bypass)\n    try {\n        var worklight_Activity = Java.use('com.worklight.wlclient.certificatepinning.HostNameVerifierWithCertificatePinning');\n        worklight_Activity.verify.overload('java.lang.String', 'javax.net.ssl.SSLSocket').implementation = function (str) {\n            agSysPacket({information: \"Bypassing IBM WorkLight HostNameVerifierWithCertificatePinning {1}: \" + str}).send();\n            return;\n        };\n        worklight_Activity.verify.overload('java.lang.String', 'java.security.cert.X509Certificate').implementation = function (str) {\n            agSysPacket({information: \"Bypassing IBM WorkLight HostNameVerifierWithCertificatePinning {2}: \" + str}).send();\n            return;\n        };\n        \n        worklight_Activity.verify.overload('java.lang.String', '[Ljava.lang.String;', '[Ljava.lang.String;').implementation = function (str) {\n            agSysPacket({information: \"Bypassing IBM WorkLight HostNameVerifierWithCertificatePinning {3}: \" + str}).send();\n            return;\n        };\n        worklight_Activity.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function (str) {\n            agSysPacket({information: \"Bypassing IBM WorkLight HostNameVerifierWithCertificatePinning {4}: \" + str}).send();\n            return true;\n        };\n\n    } catch (err) {\n        agSysPacket({information: \"error: IBM WorkLight HostNameVerifierWithCertificatePinning pinner not found\"}).send();\n    }\n}\n\nfunction bypass_cwac_pinning() {\n    // CWAC-Netsecurity (unofficial back-port pinner for Android < 4.2) CertPinManager\n    try {\n        var cwac_CertPinManager_Activity = Java.use('com.commonsware.cwac.netsecurity.conscrypt.CertPinManager');\n        cwac_CertPinManager_Activity.isChainValid.overload('java.lang.String', 'java.util.List').implementation = function (str) {\n            agSysPacket({information: \"Bypassing CWAC-Netsecurity CertPinManager: \" + str}).send();\n            return true;\n        };\n\n    } catch (err) {\n        agSysPacket({information: \"error: CWAC-Netsecurity CertPinManager pinner not found\"}).send();\n    }\n}\n\nfunction bypass_netty_pinning() {        \n    // Netty FingerprintTrustManagerFactory\n    try {\n        var netty_FingerprintTrustManagerFactory = Java.use('io.netty.handler.ssl.util.FingerprintTrustManagerFactory');\n        //NOTE: sometimes this below implementation could be useful \n        //var netty_FingerprintTrustManagerFactory = Java.use('org.jboss.netty.handler.ssl.util.FingerprintTrustManagerFactory');\n        netty_FingerprintTrustManagerFactory.checkTrusted.implementation = function (type, chain) {\n            agSysPacket({information: \"Bypassing Netty FingerprintTrustManagerFactory\"}).send();\n        };\n\n    } catch (err) {\n        agSysPacket({information: \"error: Netty FingerprintTrustManagerFactory pinner not found\"}).send();\n    }\n}\n\nfunction bypass_worklight_pinning() {\n    // Worklight Androidgap WLCertificatePinningPlugin\n    try {\n        var androidgap_WLCertificatePinningPlugin_Activity = Java.use('com.worklight.androidgap.plugin.WLCertificatePinningPlugin');\n        androidgap_WLCertificatePinningPlugin_Activity.execute.overload('java.lang.String', 'org.json.JSONArray', 'org.apache.cordova.CallbackContext').implementation = function (str) {\n            agSysPacket({information: \"Bypassing Worklight Androidgap WLCertificatePinningPlugin: \" + str}).send();\n            return true;\n        };\n\n    } catch (err) {\n        agSysPacket({information: \"error: Worklight Androidgap WLCertificatePinningPlugin pinner not found\"}).send();\n    }\n}\n\nfunction bypass_squareup_pinning() {\n    try {\n        var Squareup_CertificatePinner_Activity = Java.use('com.squareup.okhttp.CertificatePinner');\n        Squareup_CertificatePinner_Activity.check.overload('java.lang.String', 'java.security.cert.Certificate').implementation = function (str1, str2) {\n            agSysPacket({information: \"Bypassing Squareup CertificatePinner {1}: \" + str1}).send();\n            return;\n        };\n\n        Squareup_CertificatePinner_Activity.check.overload('java.lang.String', 'java.util.List').implementation = function (str1, str2) {\n            agSysPacket({information: \"Bypassing Squareup CertificatePinner {2}: \" + str1}).send();\n            return;\n        };\n    \n    } catch (err) {\n        agSysPacket({information: \"error: Squareup CertificatePinner pinner not found\"}).send();\n    }\n\n    try {\n        var Squareup_OkHostnameVerifier_Activity = Java.use('com.squareup.okhttp.internal.tls.OkHostnameVerifier');\n        Squareup_OkHostnameVerifier_Activity.verify.overload('java.lang.String', 'java.security.cert.X509Certificate').implementation = function (str1, str2) {\n            agSysPacket({information: \"Bypassing Squareup OkHostnameVerifier {1}: \" + str1}).send();\n            return true;\n        };\n        \n        Squareup_OkHostnameVerifier_Activity.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function (str1, str2) {\n            agSysPacket({information: \"Bypassing Squareup OkHostnameVerifier {2}: \" + str1}).send();\n            return true;\n        };\n        \n    } catch (err) {\n        agSysPacket({information: \"error: Squareup OkHostnameVerifier pinner not found\"}).send();\n    }\n}\n\nfunction bypass_webview_pinning() {\n    try {\n        // Bypass WebViewClient {1} (deprecated from Android 6)\n        var AndroidWebViewClient_Activity_1 = Java.use('android.webkit.WebViewClient');\n        AndroidWebViewClient_Activity_1.onReceivedSslError.overload('android.webkit.WebView', 'android.webkit.SslErrorHandler', 'android.net.http.SslError').implementation = function(obj1, obj2, obj3) {\n            agSysPacket({information: \"Bypassing Android WebViewClient check {1}\"}).send();\n        };\n    } catch (err) {\n        agSysPacket({information: \"error: Android WebViewClient {1} check not found\"}).send();\n    }\n\n    try {\n        // Bypass WebViewClient {2}\n        var AndroidWebViewClient_Activity_2 = Java.use('android.webkit.WebViewClient');\n        AndroidWebViewClient_Activity_2.onReceivedSslError.overload('android.webkit.WebView', 'android.webkit.WebResourceRequest', 'android.webkit.WebResourceError').implementation = function(obj1, obj2, obj3) {\n            agSysPacket({information: \"Bypassing Android WebViewClient check {2}\"}).send();\n        };\n    } catch (err) {\n        agSysPacket({information: \"error: Android WebViewClient {2} check not found\"}).send();\n    }\n\n    try {\n        // Bypass WebViewClient {3}\n        var AndroidWebViewClient_Activity_3 = Java.use('android.webkit.WebViewClient');\n        AndroidWebViewClient_Activity_3.onReceivedError.overload('android.webkit.WebView', 'int', 'java.lang.String', 'java.lang.String').implementation = function(obj1, obj2, obj3, obj4) {\n            agSysPacket({information: \"Bypassing Android WebViewClient check {3}\"}).send();\n        };\n    } catch (err) {\n        agSysPacket({information: \"error: Android WebViewClient {3} check not found\"}).send();\n    }\n\n    try {\n        // Bypass WebViewClient {4}\n        var AndroidWebViewClient_Activity_4 = Java.use('android.webkit.WebViewClient');\n        AndroidWebViewClient_Activity_4.onReceivedError.overload('android.webkit.WebView', 'android.webkit.WebResourceRequest', 'android.webkit.WebResourceError').implementation = function(obj1, obj2, obj3) {\n            agSysPacket({information: \"Bypassing Android WebViewClient check {4}\"}).send();\n        };\n    } catch (err) {\n        agSysPacket({information: \"error: Android WebViewClient {4} check not found\"}).send();\n    }\n}\n\nfunction bypass_cordova_pinning() {\n    try {\n        var CordovaWebViewClient_Activity = Java.use('org.apache.cordova.CordovaWebViewClient');\n        CordovaWebViewClient_Activity.onReceivedSslError.overload('android.webkit.WebView', 'android.webkit.SslErrorHandler', 'android.net.http.SslError').implementation = function (obj1, obj2, obj3) {\n            agSysPacket({information: \"Bypassing Apache Cordova WebViewClient\"}).send();\n            obj3.proceed();\n        };\n        \n    } catch (err) {\n        agSysPacket({information: \"error: Apache Cordova WebViewClient pinner not found\"}).send();\n    }\n}\n\nfunction bypass_boye_pinning() {\n    try {\n        var boye_AbstractVerifier = Java.use('ch.boye.httpclientandroidlib.conn.ssl.AbstractVerifier');\n        boye_AbstractVerifier.verify.implementation = function (host, ssl) {\n            agSysPacket({information: \"Bypassing Boye AbstractVerifier: \" + host}).send();\n        };\n        \n    } catch (err) {\n        agSysPacket({information: \"error: Boye AbstractVerifier pinner not found\"}).send();\n    }\n}\n\nfunction bypass_apache_pinning() {\n    try {\n        var apache_AbstractVerifier = Java.use('org.apache.http.conn.ssl.AbstractVerifier');\n        apache_AbstractVerifier.verify.implementation = function(a, b, c, d) {\n            agSysPacket({information: \"Bypassing Apache AbstractVerifier check: \" + a}).send();\n            return;\n        };\n    } catch (err) {\n        agSysPacket({information: \"error: Apache AbstractVerifier check not found\"}).send();\n    }\n}\n\nfunction bypass_chromecronet_pinning() {\n\ttry {\n        var CronetEngineBuilderImpl_Activity = Java.use(\"org.chromium.net.impl.CronetEngineBuilderImpl\");\n        // Setting argument to TRUE (default is TRUE) to disable Public Key pinning for local trust anchors\n        CronetEngine_Activity.enablePublicKeyPinningBypassForLocalTrustAnchors.overload('boolean').implementation = function(a) {\n            agSysPacket({information: \"Bypassing Chromium Cronet {1}\"}).send();\n\n            var cronet_obj_1 = CronetEngine_Activity.enablePublicKeyPinningBypassForLocalTrustAnchors.call(this, true);\n            return cronet_obj_1;\n        };\n        // Bypassing Chromium Cronet pinner\n        CronetEngine_Activity.addPublicKeyPins.overload('java.lang.String', 'java.util.Set', 'boolean', 'java.util.Date').implementation = function(hostName, pinsSha256, includeSubdomains, expirationDate) {\n            agSysPacket({information: \"Bypassing Chromium Cronet {2}\"}).send();\n            var cronet_obj_2 = CronetEngine_Activity.addPublicKeyPins.call(this, hostName, pinsSha256, includeSubdomains, expirationDate);\n            return cronet_obj_2;\n        };\n    } catch (err) {\n        agSysPacket({information: \"error: Chromium Cronet pinner not found\"}).send();\n    }\n}\n\nfunction bypass_flutter_pinning() {\n    try {\n        // Bypass HttpCertificatePinning.check {1}\n        var HttpCertificatePinning_Activity = Java.use('diefferson.http_certificate_pinning.HttpCertificatePinning');\n        HttpCertificatePinning_Activity.checkConnexion.overload(\"java.lang.String\", \"java.util.List\", \"java.util.Map\", \"int\", \"java.lang.String\").implementation = function (a, b, c ,d, e) {\n            agSysPacket({information: \"Bypassing Flutter HttpCertificatePinning :\" + a}).send();\n            return true;\n        };\n    } catch (err) {\n        agSysPacket({information: \"error: Flutter HttpCertificatePinning pinner not found\"}).send();\n    }\n\n    try {\n        // Bypass SslPinningPlugin.check {2}\n        var SslPinningPlugin_Activity = Java.use('com.macif.plugin.sslpinningplugin.SslPinningPlugin');\n        SslPinningPlugin_Activity.checkConnexion.overload(\"java.lang.String\", \"java.util.List\", \"java.util.Map\", \"int\", \"java.lang.String\").implementation = function (a, b, c ,d, e) {\n            agSysPacket({information: \"Bypassing Flutter SslPinningPlugin :\" + a}).send();\n            return true;\n        };\n    } catch (err) {\n        agSysPacket({information: \"error: Flutter SslPinningPlugin pinner not found\"}).send();\n    }\n}\n\n\nfunction rudimentaryFix(typeName) {\n    // This is a improvable rudimentary fix, if not works you can patch it manually\n    if (typeName === undefined){\n        return;\n    } else if (typeName === 'boolean') {\n        return true;\n    } else {\n        return null;\n    }\n}\n\n// Dynamic SSLPeerUnverifiedException Patcher                                //\n// An useful technique to bypass SSLPeerUnverifiedException failures raising //\n// when the Android app uses some uncommon SSL Pinning methods or an heavily //\n// code obfuscation. Inspired by an idea of: https://github.com/httptoolkit  //\n///////////////////////////////////////////////////////////////////////////////\nfunction bypass_sslpeerunverifiedexception_pinning() {\n    try {\n        var UnverifiedCertError = Java.use('javax.net.ssl.SSLPeerUnverifiedException');\n        UnverifiedCertError.$init.implementation = function (str) {\n            console.log('Unexpected SSLPeerUnverifiedException occurred, trying to patch it dynamically..');\n            try {\n                var stackTrace = Java.use('java.lang.Thread').currentThread().getStackTrace();\n                var exceptionStackIndex = stackTrace.findIndex(stack =>\n                    stack.getClassName() === \"javax.net.ssl.SSLPeerUnverifiedException\"\n                );\n                // Retrieve the method raising the SSLPeerUnverifiedException\n                var callingFunctionStack = stackTrace[exceptionStackIndex + 1];\n                var className = callingFunctionStack.getClassName();\n                var methodName = callingFunctionStack.getMethodName();\n                var callingClass = Java.use(className);\n                var callingMethod = callingClass[methodName];\n                console.log('Attempting to bypass uncommon SSL Pinning method on: '+className+'.'+methodName + '->' + callingClass + ' ' + callingMethod);\n\n                // Skip it when already patched by Frida\n                if (callingMethod.implementation) {\n                    console.log(\"Already patched\");\n                    return; \n                }\n                // Trying to patch the uncommon SSL Pinning method via implementation\n                var returnTypeName = callingMethod.returnType.type;\n                callingMethod.implementation = function() {\n                    console.log(\"Automatic patch\");\n                    rudimentaryFix(returnTypeName);\n                };\n            } catch (e) {\n                // Dynamic patching via implementation does not works, then trying via function overloading\n                //console.log('[!] The uncommon SSL Pinning method has more than one overload); \n                if (String(e).includes(\".overload\")) {\n                    var splittedList = String(e).split(\".overload\");\n                    for (let i=2; i<splittedList.length; i++) {\n                        var extractedOverload = splittedList[i].trim().split(\"(\")[1].slice(0,-1).replaceAll(\"'\",\"\");\n                        // Check if extractedOverload has multiple arguments\n                        if (extractedOverload.includes(\",\")) {\n                            // Go here if overloaded method has multiple arguments (NOTE: max 6 args are covered here)\n                            var argList = extractedOverload.split(\", \");\n                            console.log('Attempting overload of '+className+'.'+methodName+' with arguments: '+extractedOverload + ' ' + argList.length);\n                            if (argList.length == 2) {\n                                callingMethod.overload(argList[0], argList[1]).implementation = function(a,b) {\n                                    rudimentaryFix(returnTypeName);\n                                }\n                            } else if (argNum == 3) {\n                                callingMethod.overload(argList[0], argList[1], argList[2]).implementation = function(a,b,c) {\n                                    rudimentaryFix(returnTypeName);\n                                }\n                            }  else if (argNum == 4) {\n                                callingMethod.overload(argList[0], argList[1], argList[2], argList[3]).implementation = function(a,b,c,d) {\n                                    rudimentaryFix(returnTypeName);\n                                }\n                            }  else if (argNum == 5) {\n                                callingMethod.overload(argList[0], argList[1], argList[2], argList[3], argList[4]).implementation = function(a,b,c,d,e) {\n                                    rudimentaryFix(returnTypeName);\n                                }\n                            }  else if (argNum == 6) {\n                                callingMethod.overload(argList[0], argList[1], argList[2], argList[3], argList[4], argList[5]).implementation = function(a,b,c,d,e,f) {\n                                    rudimentaryFix(returnTypeName);\n                                }\n                            } \n                        // Go here if overloaded method has a single argument\n                        } else {\n                            callingMethod.overload(extractedOverload).implementation = function(a) {\n                                rudimentaryFix(returnTypeName);\n                            }\n                        }\n                    }\n                } else {\n                    console.log('[-] Failed to dynamically patch SSLPeerUnverifiedException '+e);\n                }\n            }\n            console.log('SSLPeerUnverifiedException hooked');\n            return this.$init(str);\n        };\n    } catch (err) {\n        console.log('SSLPeerUnverifiedException not found');\n        console.log(err);\n    }\n}\n\n// Trustmanager pinning\nbypass_trustmanager_pinning();\n\n// OkHTTP3 pinning\nbypass_okhttp3_pinning();\n    \n// Trustkit pinning (triple bypass)\nbypass_trustkit_pinning();\n\n// Trustmanager Impl pinning\nbypass_trustmanagerimpl_pinning();\n\n// Appcelerator Titanium pinning\nbypass_appcelerator_pinning();\n\n// OpenSSLSocketImpl Conscrypt pinning\nbypass_conscript_pinning();\n\n// OpenSSLSocketImpl Apache Harmony pinning\nbypass_apacheharmony_pinning();\n\n// Xservice phonegapp pinning\nbypass_phonegapp_pinning();\n\n// IBM MobileFirst pinning\nbypass_ibm_pinning();\n\n// IBM worklight pinning\nbypass_ibmworklight_pinning();\n\n// CWAC pinning\nbypass_cwac_pinning();      \n\n// Worklight pinning\nbypass_worklight_pinning();\n\n// Netty pinning\nbypass_netty_pinning();\n\n// Squareup pinning\nbypass_squareup_pinning();\n\n// Webview pinning\nbypass_webview_pinning();\n\n// Cordova pinning\nbypass_cordova_pinning();\n\n// Boye pinning\nbypass_boye_pinning();\n\n// Apache pinning\nbypass_apache_pinning();\n\n// Chrome cronet pinning\nbypass_chromecronet_pinning();\n\n// Flutter pinning\nbypass_flutter_pinning();\n\n// SSLPeerUnverifiedException patcher\nbypass_sslpeerunverifiedexception_pinning();"
  },
  {
    "path": "libs/androguard/pentest/modules/http_communications/uri.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING HTTP_COMMUNICATIONS/URI.JS', {c: Color.Red});\n\nvar url_g = ''\nvar uriParseClz = Java.use('java.net.URI');\nvar uriParseClzConstruct = uriParseClz.$init.overload(\"java.lang.String\");\n\nuriParseClzConstruct.implementation = function(url) {\n    var result = uriParseClzConstruct.call(this, url);\n    agPacket({url: url}).send();\n    return result;\n};\n\nvar URLClz = Java.use('java.net.URL');\nvar urlConstruct = URLClz.$init.overload(\"java.lang.String\");\nurlConstruct.implementation = function(url) {\n    var result = urlConstruct.call(this, url);\n    agPacket({url: url}).send();\n    return result;\n};\n\nvar sysBuilderClz = tryGetClass('com.android.okhttp.Request$Builder');\nif (sysBuilderClz) {\n    sysBuilderClz.build.implementation = function() {\n        var okRequestResult = this.build();\n        var httpUrl = okRequestResult.url();\n        var url = httpUrl.toString();\n        agPacket({url: url, httpUrl:httpUrl}).send();\n        return okRequestResult\n    };\n}\n\nvar builderClz = tryGetClass('okhttp3.Request$Builder');\nif (builderClz) {\n    var buildFunc = builderClz.build.overload();\n    buildFunc.implementation = function() {\n        var okRequestResult = buildFunc.call(this);\n        var httpUrl = okRequestResult.url();\n        var url = httpUrl.toString();\n        agPacket({url: url, httpUrl:httpUrl}).send();\n        return okRequestResult\n    };\n}\n\nvar android_net_Uri_clz = Java.use('android.net.Uri');\nvar android_net_Uri_clz_method_parse_u5rj = android_net_Uri_clz.parse.overload('java.lang.String');\nandroid_net_Uri_clz_method_parse_u5rj.implementation = function(url) {\n    agPacket({url: url}).send();\n    return android_net_Uri_clz_method_parse_u5rj.call(android_net_Uri_clz, url);\n};"
  },
  {
    "path": "libs/androguard/pentest/modules/intents/intents.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING INTENTS/INTENTS.JS',{c: Color.Red});\n\nvar uri = Java.use('android.net.Uri'); \nvar intent1 = Java.use('android.content.Intent');\nvar bundle1 = Java.use('android.os.Bundle');\n\nuri.getQueryParameter.implementation = function(key){\n    var ret = this.getQueryParameter(key);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key}).send();\n    return ret;\n}\n\nuri.getQueryParameters.implementation = function(key){\n    var ret = this.getQueryParameters(key);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key}).send();\n    return ret;\n}\n\nbundle1.getByte.overloads[0].implementation = function(key){\n    var ret = this.getByte(key);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key}).send();\n    return ret;\n}\nbundle1.getByte.overloads[1].implementation = function(key,def){\n    var ret = this.getByte(key, def);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key, def: def}).send();\n    return ret;\n}\n\nbundle1.getChar.overloads[0].implementation = function(key){\n    var ret = this.getChar(key);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key}).send();\n    return ret;\n}\nbundle1.getChar.overloads[1].implementation = function(key,def){\n    var ret = this.getChar(key, def);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key, def: def}).send();\n    return ret;\n}\n\nbundle1.getCharSequence.overloads[0].implementation = function(key){\n    var ret = this.getCharSequence(key);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key}).send();\n    return ret;\n}\nbundle1.getCharSequence.overloads[1].implementation = function(key, def){\n    var ret = this.getCharSequence(key, def);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key, def: def}).send();\n    return ret;\n}\n\nbundle1.getFloat.overloads[0].implementation = function(key){\n    var ret = this.getFloat(key);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key}).send();\n    return ret;\n}\nbundle1.getFloat.overloads[1].implementation = function(key, def){\n    var ret = this.getFloat(key,def);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key, def: def}).send();\n    return ret;\n}\n\nbundle1.getShort.overloads[0].implementation = function(key){\n    var ret = this.getShort(key);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key}).send();\n    return ret;\n}\nbundle1.getShort.overloads[1].implementation = function(key, def){\n    var ret = this.getShort(key,def);\n    agPacket({intent: dumpIntent(this), ret: ret, key: key, def: def}).send();\n    return ret;\n}\nintent1.getSerializableExtra.implementation = function(name){\n    agPacket({intent: dumpIntent(this), name: name}).send();\n    return this.getSerializableExtra(name);\n}\n\nintent1.getParcelableExtra.implementation = function(name){\n    agPacket({intent: dumpIntent(this), name: name}).send();\n    return this.getParcelableExtra(name);\n}\n\nif(Java.androidVersion > 12)\nintent1.getParcelableExtra.overload('java.lang.String', 'java.lang.Class').implementation = function(name,clazz){\n    let ret = this.getParcelableExtra(name,clazz);\n    agPacket({intent: dumpIntent(this), name: name, ret: ret}).send();\n    return ret;\n}\n\nintent1.getBooleanExtra.implementation = function(name, value){\n    var ret = this.getBooleanExtra(name,value);\n    agPacket({intent: dumpIntent(this), ret: ret, name: name, value: value}).send();\n    return ret;\n}\n\nintent1.getBundleExtra.implementation = function(bundlename){\n    agPacket({intent: dumpIntent(this), bundlename: bundlename}).send();\n    return this.getBundleExtra(bundlename);\n}\n\nintent1.getByteArrayExtra.implementation = function(name){\n    var ret = this.getByteArrayExtra(name);\n    agPacket({intent: dumpIntent(this), ret: ret, name: name}).send();\n    return ret;\n}\n\nintent1.getByteExtra.implementation = function(name,value){\n    var ret = this.getByteExtra(name,value);\n    agPacket({intent: dumpIntent(this), ret: ret, name: name, value: value}).send();\n    return ret;\n}\n\nintent1.getCharArrayExtra.implementation = function(name){\n    var ret = this.getCharArrayExtra(name);\n    agPacket({intent: dumpIntent(this), ret: ret, name: name}).send();\n    return ret;\n}\n\nintent1.getCharExtra.implementation = function(name,value){\n    var ret =  this.getCharExtra(name, value);\n    agPacket({intent: dumpIntent(this), ret: ret, name: name, value: value}).send();\n    return ret;\n}\n\nintent1.getData.implementation = function(){\n    var ret = this.getData();\n    agPacket({intent: dumpIntent(this), ret: ret}).send();\n    return ret;\n\n}\n\nintent1.getDataString.implementation = function(){\n    var ret = this.getDataString();\n    agPacket({intent: dumpIntent(this), ret: ret}).send();\n    return ret;\n}\n\nintent1.getDoubleArrayExtra.implementation = function(name){\n    var ret = this.getDoubleArrayExtra(name);\n    agPacket({intent: dumpIntent(this), ret: ret, name: name}).send();\n    return ret;\n}\n\nintent1.getDoubleExtra.implementation = function(name,value){\n    var ret =  this.getDoubleExtra(name,value);\n    agPacket({intent: dumpIntent(this), ret: ret, name: name, value: value}).send();\n    return ret;\n}\n\nintent1.getStringExtra.implementation = function(name){\n    var ret =  this.getStringExtra(name);\n    agPacket({intent: dumpIntent(this), ret: ret, name: name}).send();\n    return ret;\n}\n\nintent1.getPackage.implementation = function(){\n    var ret =  this.getPackage();\n    agPacket({intent: dumpIntent(this), ret: ret}).send();\n    return ret;\n}"
  },
  {
    "path": "libs/androguard/pentest/modules/intents/intents_creation.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING INTENTS/INTENTS_CREATION.JS',{c: Color.Red});\n\nvar intent = Java.use('android.content.Intent');\n\nif (intent.$init) {\n    intent.setClassName.overload('java.lang.String', 'java.lang.String').implementation = function( packageName,  className){\n        agPacket({intent: dumpIntent(this), packageName: packageName, className: className}).send();\n        return this.setClassName(packageName,className);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[I').implementation = function(name,  intB){\n        agPacket({intent: dumpIntent(this), name: name, intB: intB}).send();\n        return this.putExtra(name, intB);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[D').implementation = function(name,  doubleD){\n        agPacket({intent: dumpIntent(this), name: name, doubleD: doubleD}).send();\n        return this.putExtra(name,doubleD);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[F').implementation = function(name,  floatF){\n        agPacket({intent: dumpIntent(this), name: name, floatF: floatF}).send();\n        return this.putExtra(name,floatF);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[B').implementation = function(name,  byteB){\n        agPacket({intent: dumpIntent(this), name: name, byteB: byteB}).send();\n        return this.putExtra(name,byteB);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[C').implementation = function(name,  charC){\n        agPacket({intent: dumpIntent(this), name: name, charC: charC}).send();\n        return this.putExtra(name,charC);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[Z').implementation = function(name,  z){\n        agPacket({intent: dumpIntent(this), name: name, z: z}).send();\n        return this.putExtra(name,z);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'boolean').implementation = function(name,  boolvalue){\n        agPacket({intent: dumpIntent(this), name: name, boolvalue: boolvalue}).send();\n        return this.putExtra(name, boolvalue);\n    }\n\n\n    intent.putExtra.overload('java.lang.String', '[S').implementation = function(name,  stringS){\n        agPacket({intent: dumpIntent(this), name: name, stringS: stringS}).send();\n        return this.putExtra(name,stringS);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[Landroid.os.Parcelable;').implementation = function(name,  parcel){\n        agPacket({intent: dumpIntent(this), name: name, parcel: parcel}).send();\n        return this.putExtra(name,parcel);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'byte').implementation = function(name,  bt){\n        agPacket({intent: dumpIntent(this), name: name, bt: bt}).send();\n        return this.putExtra(name,bt);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[Ljava.lang.CharSequence;').implementation = function(name,  chars){\n        agPacket({intent: dumpIntent(this), name: name, chars: chars}).send();\n        return this.putExtra(name,chars);\n    }\n\n    intent.putExtra.overload('java.lang.String', '[Ljava.lang.String;').implementation = function(name,  data){\n        agPacket({intent: dumpIntent(this), name: name, data: data}).send();\n        return this.putExtra(name,data);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'android.os.Bundle').implementation = function(name,  bundle){\n        agPacket({intent: dumpIntent(this), name: name, bundle: bundle}).send();\n        return this.putExtra(name,bundle);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'int').implementation = function(name,  intA){\n        agPacket({intent: dumpIntent(this), name: name, intA: intA}).send();\n        return this.putExtra(name,intA);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'long').implementation = function(name,  longA){\n        agPacket({intent: dumpIntent(this), name: name, longA: longA}).send();\n        return this.putExtra(name,longA);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'float').implementation = function(name,  floatA){\n        agPacket({intent: dumpIntent(this), name: name, floatA: floatA}).send();\n        return this.putExtra(name,floatA);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'short').implementation = function(name,  shortA){\n        agPacket({intent: dumpIntent(this), name: name, shortA: shortA}).send();\n        return this.putExtra(name,shortA);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'char').implementation = function(name,  charA){\n        agPacket({intent: dumpIntent(this), name: name, charA: charA}).send();\n        return this.putExtra(name,charA);\n\n    }\n    intent.putExtra.overload('java.lang.String', 'double').implementation = function(name,  doubleA){\n        agPacket({intent: dumpIntent(this), name: name, doubleA: doubleA}).send();\n        return this.putExtra(name,doubleA);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'java.lang.String').implementation = function(name,  stringA){\n        agPacket({intent: dumpIntent(this), name: name, stringA: stringA}).send();\n        return this.putExtra(name,stringA);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'java.lang.CharSequence').implementation = function(name,  CharSequence)\n    {\n        charsJoin = CharSequence.join(\"\");\n        agPacket({intent: dumpIntent(this), name: name, charsJoin: charsJoin}).send();\n        return this.putExtra(name, CharSequence);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'java.io.Serializable').implementation = function(name,  serializable){\n        agPacket({intent: dumpIntent(this), name: name, serializable: serializable}).send();\n        return this.putExtra(name,serializable);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'android.os.Parcelable').implementation = function(name,  parcelable) {\n        agPacket({intent: dumpIntent(this), name: name, parcelable: parcelable}).send();\n        return this.putExtra(name,parcelable);\n    }\n\n    intent.putExtra.overload('java.lang.String', 'android.os.IBinder').implementation = function(name,  binder){\n        agPacket({intent: dumpIntent(this), name: name, binder: binder}).send();\n        return this.putExtra(name,binder);\n    }\n}"
  },
  {
    "path": "libs/androguard/pentest/modules/intents/pending_intents.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING INTENTS/PENDING_INTENTS.JS',{c: Color.Red});\n\nvar pendingIntent = Java.use('android.app.PendingIntent');\n\npendingIntent.getActivity.overloads[0].implementation = function(context, requestCode, intent, flags){\n    agPacket({intent: dumpIntent(intent), requestCode: requestCode, flags: flags}).send();\n    return this.getActivity(context, requestCode, intent, flags);    \n}\n\npendingIntent.getActivity.overloads[1].implementation = function(context, requestCode, intent, flags, bundle){\n    agPacket({intent: dumpIntent(intent), requestCode: requestCode, flags: flags, bundle: bundle}).send();\n    return this.getActivity(context, requestCode, intent, flags, bundle); \n}\n\npendingIntent.getBroadcast.implementation = function(context, requestCode, intent, flags){\n    agPacket({intent: dumpIntent(intent), requestCode: requestCode, flags: flags}).send();\n    return this.getBroadcast(context, requestCode, intent, flags); \n}\n\npendingIntent.getService.implementation = function(context, requestCode, intent, flags){\n    agPacket({intent: dumpIntent(intent), requestCode: requestCode, flags: flags}).send();\n    return this.getService(context, requestCode, intent, flags); \n}\n\npendingIntent.getActivities.overloads[0].implementation = function(context, requestCode, intent, flags) {\n    for (let value of intent)\n        agPacket({intent: dumpIntent(value), requestCode: requestCode, flags: flags}).send();\n    return this.getService(context, requestCode, intent, flags); \n}\n\npendingIntent.getActivities.overloads[1].implementation = function(context, requestCode, intent, flags,bundle){\n    for (let value of intent)\n        agPacket({intent: dumpIntent(value), requestCode: requestCode, flags: flags}).send();\n    return this.getService(context, requestCode, intent, flags,bundle); \n}\n"
  },
  {
    "path": "libs/androguard/pentest/modules/ipc/ipc.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING IPC/IPC.JS',{c: Color.Red});\n\nvar activity = Java.use('android.app.Activity');\nvar ContextWrapper = Java.use('android.content.ContextWrapper');\n\n\nlet anActivity = Java.use('android.app.Activity');\n\nanActivity.onCreate.overload('android.os.Bundle').implementation = function(bundle){\n    agPacket({component_name: this.getComponentName().getClassName(), activity: this.getCallingActivity()}).send();\n    return this.onCreate(bundle);\n}\n\n\nanActivity.onCreate.overload('android.os.Bundle','android.os.PersistableBundle').implementation = function(bundle,persistableBundle){\n    agPacket({component_name: this.getComponentName().getClassName(), activity: this.getCallingActivity()}).send();\n    return this.onCreate(bundle,persistableBundle);\n}\n\nanActivity.setResult.overload('int','android.content.Intent').implementation = function(i, intent){\n    agPacket({component_name: this.getComponentName().getClassName(), i: i, intent: dumpIntent(intent)}).send();\n    return this.setResult(i, intent);\n}\n\nanActivity.setResult.overload('int').implementation = function(i){\n    agPacket({component_name: this.getComponentName().getClassName(), i: i}).send();\n    return this.setResult(i,intent);\n}\n\nactivity.startActivity.overload('android.content.Intent').implementation = function(intent){\n    agPacket({intent: dumpIntent(intent)}).send();\n    return this.startActivity(intent);\n\n}\nactivity.startActivity.overload('android.content.Intent','android.os.Bundle').implementation = function(intent, bundle){\n    agPacket({intent: dumpIntent(intent)}).send();\n    return this.startActivity(intent,bundle);\n\n}\nactivity.startActivityForResult.overload('android.content.Intent','int').implementation = function(intent,requestCode){\n    agPacket({intent: dumpIntent(intent), requestCode: requestCode}).send();\n    return this.startActivityForResult(intent,requestCode);\n}\n\n// Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent)\nContextWrapper.sendBroadcast.overload(\"android.content.Intent\").implementation = function(intent) {\n    agPacket({intent: dumpIntent(intent), requestCode: requestCode}).send();\n    return this.sendBroadcast.overload(\"android.content.Intent\").apply(this, arguments);\n};\n\n// Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#sendBroadcast(android.content.Intent, java.lang.String)\nContextWrapper.sendBroadcast.overload(\"android.content.Intent\", \"java.lang.String\").implementation = function(intent, receiverPermission) {\n    agPacket({intent: dumpIntent(intent)}).send();\n    return this.sendBroadcast.overload(\"android.content.Intent\", \"java.lang.String\").apply(this, arguments);\n};\n\n\n\nContextWrapper.sendStickyBroadcast.overload(\"android.content.Intent\").implementation = function(intent) {\n    agPacket({intent: dumpIntent(intent)}).send();\n    return this.sendStickyBroadcast.overload(\"android.content.Intent\").apply(this, arguments);\n};\n\n\n//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#startService(android.content.Intent)\nContextWrapper.startService.implementation = function(service) {\n    agPacket({service: dumpIntent(service)}).send();\n    return this.startService.apply(this, arguments);\n};\n\n\n\n//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#stopService(android.content.Intent)\nContextWrapper.stopService.implementation = function(name) {\n    agPacket({service: dumpIntent(service)}).send();\n    return this.stopService.apply(this, arguments);\n};\n\n//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)\nContextWrapper.registerReceiver.overload(\"android.content.BroadcastReceiver\", \"android.content.IntentFilter\").implementation = function(receiver, filter) {\n    agPacket({receiver: dumpReceiver(receiver), filter: dumpFilter(filter)}).send();\n    return this.registerReceiver.apply(this, arguments);\n};\n\n// Ref: https://developer.android.com/reference/android/content/Context#registerReceiver(android.content.BroadcastReceiver,%20android.content.IntentFilter,%20int)\nContextWrapper.registerReceiver.overload(\"android.content.BroadcastReceiver\", \"android.content.IntentFilter\", \"int\").implementation = function(receiver, filter, flags) {\n    agPacket({receiver: dumpReceiver(receiver), filter: dumpFilter(filter), flags: flags}).send();\n    return this.registerReceiver.apply(this, arguments);\n};\n\n//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler)\nContextWrapper.registerReceiver.overload(\"android.content.BroadcastReceiver\", \"android.content.IntentFilter\", \"java.lang.String\", \"android.os.Handler\").implementation = function(receiver, filter, broadcastPermission, scheduler) {\n    agPacket({receiver: dumpReceiver(receiver), filter: dumpFilter(filter), broadcastPermission: broadcastPermission}).send();\n    return this.registerReceiver.apply(this, arguments);\n};\n\n//Ref: https://developer.android.com/reference/android/content/ContextWrapper.html#registerReceiver(android.content.BroadcastReceiver,%20android.content.IntentFilter,%20java.lang.String,%20android.os.Handler,%20int)\nContextWrapper.registerReceiver.overload(\"android.content.BroadcastReceiver\", \"android.content.IntentFilter\", \"java.lang.String\", \"android.os.Handler\", \"int\").implementation = function(receiver, filter, broadcastPermission, scheduler, flags) {\n    agPacket({receiver: dumpReceiver(receiver), filter: dumpFilter(filter), broadcastPermission: broadcastPermission, flags: flags}).send();\n    return this.registerReceiver.apply(this, arguments);\n};"
  },
  {
    "path": "libs/androguard/pentest/modules/preferences/preferences.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog(\"[+] LOADING PREFERENCES/PREFERENCES.JS\", { c: Color.Red });\n\nvar ContextWrapper = Java.use(\"android.content.ContextWrapper\");\n\nContextWrapper.getSharedPreferences.overload(\n    \"java.lang.String\",\n    \"int\",\n).implementation = function (var0, var1) {\n    var sharedPreferences = this.getSharedPreferences(var0, var1);\n    agPacket({ name: var0, mode: var1, ret: sharedPreferences }).send();\n    return sharedPreferences;\n};\n"
  },
  {
    "path": "libs/androguard/pentest/modules/sockets/sockets.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING SOCKETS/SOCKETS.JS',{c: Color.Red});\n\nvar socket = Java.use('java.net.Socket');\n\nsocket.$init.overloads[2].implementation = function(socketImpl){\n    agPacket({hostname: socketImpl.address.getHostName(), port: port}).send();\n    return this.$init(host, port);\n}\n\nsocket.$init.overloads[3].implementation = function(inetAddress, port){\n    agPacket({hostname: inetAddress.getHostName(), port: port}).send();\n    return this.$init(inetAddress,port);\n}\n\nsocket.$init.overloads[4].implementation = function(host, port){\n    agPacket({hostname: host, port: port}).send();\n    return this.$init(host,port);\n}\n\nsocket.$init.overloads[5].implementation = function(host, port, stream){\n    agPacket({hostname: host, port: port}).send();\n    return this.$init(host, port, stream);\n}\n\nsocket.$init.overloads[6].implementation = function(inetAddress, port, localAddress, localPort){\n    agPacket({hostname: inetAddress.getHostName(), port: port}).send();\n    return this.$init(inetAddress, port, localAddress, localPort);\n}\n\nsocket.$init.overloads[7].implementation = function(inetAddress, port, socketAddress, stream){\n    agPacket({hostname: inetAddress.getHostName(), port: port}).send();\n    return this.$init(inetAddress, port, socketAddress, stream);\n}\n\nsocket.$init.overloads[8].implementation = function(inetAddress, port, localAddress, localPort){\n    agPacket({hostname: inetAddress.getHostName(), port: port}).send();\n    return this.$init(inetAddress, port, localAddress, localPort);\n}\n\nsocket.bind.implementation = function(localAddress){\n    agPacket({hostname: localAddress.toString()}).send();\n    this.bind.call(this, localAddress);\n}\n\n// Socket.connect(endPoint)\nsocket.connect.overload(\"java.net.SocketAddress\").implementation = function(endPoint){\n    agPacket({endpoint: endPoint.toString()}).send();\n    this.connect.overload(\"java.net.SocketAddress\").call(this, endPoint);\n}\n\n// Socket.connect(endPoint, timeout)\nsocket.connect.overload(\"java.net.SocketAddress\", \"int\").implementation = function(endPoint, tmout){\n    agPacket({endpoint: endPoint.toString()}).send();\n    this.connect.overload(\"java.net.SocketAddress\", \"int\").call(this, endPoint, tmout);\n}\n\n// Socket.getInetAddress()\nsocket.getInetAddress.implementation = function(){\n    ret = sock.getInetAddress.call(this);\n    agPacket({ret: ret.toString()}).send();\n    return ret;\n}\n\n// Socket.getInputStream()\nsocket.getInputStream.implementation = function(){\n    agPacket({}).send();\n    return this.getInputStream.call(this);\n}\n\n// Socket.getOutputStream()\nsocket.getOutputStream.implementation = function(){\n    agPacket({}).send();\n    return this.getOutputStream.call(this);\n}\n\nvar WebSocketClient = tryGetClass('org.java_websocket.client.WebSocketClient');\nif (WebSocketClient) {\n    WebSocketClient.$init.overloads[0].implementation = function(uri){\n        agPacket({uri: uri}).send();\n        return this.$init(uri);\n    }\n\n    WebSocketClient.$init.overloads[1].implementation = function(uri,draft){\n        agPacket({uri: uri}).send();\n        return this.$init(uri,draft);\n    }\n\n    WebSocketClient.$init.overloads[2].implementation = function(uri,headers){\n        agPacket({uri: uri}).send();\n        return this.$init(uri,headers);\n    }\n\n    WebSocketClient.$init.overloads[3].implementation = function(uri,draft,headers){\n        agPacket({uri: uri}).send();\n        return this.$init(uri,draft,headers);\n    }\n\n    WebSocketClient.$init.overloads[4].implementation = function(uri,draft,headers,connecttimeout){\n        agPacket({uri: uri}).send();\n        return this.$init(uri,draft,headers,connecttimeout);\n    }\n\n    WebSocketClient.send.overloads[0].implementation = function(byteArray) {\n        agPacket({data: byteArrayToString(byteArray)}).send();\n        this.send(byteArray);\n    }\n\n    WebSocketClient.send.overloads[0].implementation = function(byteBuffers){\n        agPacket({data: byteBuffers}).send();\n        this.send(byteBuffers);\n    }\n\n    WebSocketClient.send.overloads[0].implementation = function(str){\n        agPacket({uri: his.getURI(), data: str}).send();\n        this.send(str);\n    }\n}\n"
  },
  {
    "path": "libs/androguard/pentest/modules/webviews/webviews.js",
    "content": "// Ripped from https://github.com/Ch0pin/medusa/ and modified to fit Androguard packets\n\ncolorLog('[+] LOADING WEBVIEWS/WEBVIEWS.JS',{c: Color.Red});\n\nvar webView = Java.use('android.webkit.WebView');\nvar webSettings = Java.use('android.webkit.WebSettings');\n\nwebSettings.setAllowContentAccess.implementation = function(allow){\n    agPacket({allow: allow}).send();\n    return this.setAllowContentAccess(allow);\n}\n\nwebSettings.setAllowFileAccess.implementation = function(allow){\n    agPacket({allow: allow}).send();\n    return this.setAllowFileAccess(allow);\n\n}\nwebSettings.setAllowFileAccessFromFileURLs.implementation = function(allow){\n    agPacket({allow: allow}).send();\n    return this.setAllowFileAccessFromFileURLs(allow);\n}\n\nwebSettings.setAllowUniversalAccessFromFileURLs.implementation = function(allow){\n    agPacket({allow: allow}).send();\n    return this.setAllowUniversalAccessFromFileURLs(allow);\n\n}\nwebSettings.setJavaScriptEnabled.implementation = function(allow){\n    agPacket({allow: allow}).send();\n    return this.setJavaScriptEnabled(allow);\n}\n\n\nwebView.setVisibility.implementation = function(a){\n    agPacket({a: a}).send();\n    return this.setVisibility(a);\n    \n}\nwebView.addJavascriptInterface.implementation = function(object, name){\n    agPacket({className: object.$className, name:name}).send();\n    this.addJavascriptInterface(object,name);\n}\n\n\nwebView.evaluateJavascript.implementation = function(script, resultCallback){\n    agPacket({script: script}).send();\n    this.evaluateJavascript(script, resultCallback);\n}\n\nwebView.getOriginalUrl.implementation = function() {\n    var ret =  this.getOriginalUrl();\n    agPacket({ret: ret}).send();\n    return ret;\n}\n\nwebView.getUrl.implementation = function() {\n    var ret = this.getUrl();\n    agPacket({webview: dumpWebview(this), ret: ret}).send();\n    return this.getUrl();\n}\n\nwebView.loadData.implementation = function(data, mimeType, encoding){\n    agPacket({data: data, mimeType, mimeType, encoding: encoding}).send();\n    this.loadData(data,mimeType,encoding);\n}\n\nwebView.loadDataWithBaseURL.implementation = function(baseUrl,  data,  mimeType,  encoding,  historyUrl){\n    agPacket({baseUrl: baseUrl, data: data, mimeType: mimeType, encoding: encoding, historyUrl: historyUrl}).send();\n    this.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);\n}\n\nwebView.loadUrl.overload('java.lang.String', 'java.util.Map').implementation = function(url, additionalHttpHeaders) {\n    agPacket({webview: dumpWebview(this), url: url}).send();\n    this.setWebContentsDebuggingEnabled(true);\n\n    this.loadUrl(url,additionalHttpHeaders);\n}\n\n\nwebView.loadUrl.overload('java.lang.String').implementation = function(url){\n    agPacket({webview: dumpWebview(this), url: url}).send();\n    this.setWebContentsDebuggingEnabled(true);\n    this.loadUrl(url);\n}\n\nwebView.postUrl.implementation = function (url, postData){\n    agPacket({url: url, postData: postData}).send();\n    this.postUrl(url,postData);\n}\n\nwebView.removeJavascriptInterface.implementation = function(name){\n    agPacket({name: name}).send();\n    this.removeJavascriptInterface(name);\n}\n\nwebView.setWebViewClient.implementation = function(client){\n    agPacket({className: client.$className}).send();\n    this.setWebViewClient(client);\n}"
  },
  {
    "path": "libs/androguard/session.py",
    "content": "import collections\nimport hashlib\nfrom typing import Iterator, Union\n\nimport dataset\nfrom loguru import logger\n\nfrom androguard.core import androconf, apk, dex\nfrom androguard.core.analysis.analysis import Analysis, StringAnalysis\nfrom androguard.decompiler.decompiler import DecompilerDAD\n\n\nclass Session:\n    \"\"\"\n    A Session is able to store in a database, basic information about APK, DEX or ODEX files.\n    Additionally, it offers the possibility to store actions done when using the 'pentest' module.\n\n    NOTE: an attempt to move from pickling to dataset was started here:\n    <https://github.com/androguard/androguard/commit/4dd0dc8c4b55605af863925faf16e8eb35f13e45>\n    but is NOT finished!\n\n    > Should we go back to pickling or proceed further with the dataset ?\n    \"\"\"\n\n    def __init__(\n        self,\n        export_ipython: bool = False,\n        db_url: str = 'sqlite:///androguard.db',\n    ) -> None:\n        \"\"\"\n        Create a new Session object\n\n        :param export_ipython: set to True in order to create attributes for the\n        use in iPython\n        \"\"\"\n        self._setup_objects()\n        self.export_ipython = export_ipython\n\n        self.db = dataset.connect(db_url)\n        logger.info(\"Opening database {}\".format(self.db))\n        self.table_information = self.db[\"information\"]\n        self.table_session = self.db[\"session\"]\n        self.table_pentest = self.db[\"pentest\"]\n        self.table_system = self.db[\"system\"]\n\n        self.session_id = len(self.table_session)\n\n        self.table_session.insert(dict(id=self.session_id))\n        logger.info(\"Creating new session [{}]\".format(self.session_id))\n\n    def save(self, filename: Union[str, None] = None) -> None:\n        \"\"\"\n        Save the current session\n        \"\"\"\n        logger.info(\"Saving the database\")\n        self.db.commit()\n\n    def _setup_objects(self):\n        self.analyzed_files = collections.defaultdict(list)\n        self.analyzed_digest = dict()\n        self.analyzed_apk = dict()\n        self.added_files = []\n\n        # Stores Analysis Objects\n        # needs to be ordered to return the outermost element when searching for\n        # classes\n        self.analyzed_vms = collections.OrderedDict()\n\n        # Dict of digest and DEX/DalvikOdexFormat\n        # Actually not needed, as we have Analysis objects which store the DEX\n        # files as well, but we do not remove it here for legacy reasons\n        self.analyzed_dex = dict()\n\n    def reset(self) -> None:\n        \"\"\"\n        Reset the current session, delete all added files.\n        \"\"\"\n        self._setup_objects()\n\n    def isOpen(self) -> bool:\n        \"\"\"\n        Test if any file was analyzed in this session\n\n        :return: `True` if any file was analyzed, `False` otherwise\n        \"\"\"\n        return len(self.analyzed_digest) > 0\n\n    def show(self) -> None:\n        \"\"\"\n        Print information to stdout about the current session.\n        Gets all APKs, all DEX files and all Analysis objects.\n        \"\"\"\n        print(\"APKs in Session: {}\".format(len(self.analyzed_apk)))\n        for d, a in self.analyzed_apk.items():\n            print(\"\\t{}: {}\".format(d, a))\n\n        print(\"DEXs in Session: {}\".format(len(self.analyzed_dex)))\n        for d, dex in self.analyzed_dex.items():\n            print(\"\\t{}: {}\".format(d, dex))\n\n        print(\"Analysis in Session: {}\".format(len(self.analyzed_vms)))\n        for d, a in self.analyzed_vms.items():\n            print(\"\\t{}: {}\".format(d, a))\n\n    def insert_event(self, call, callee, params, ret):\n        self.table_pentest.insert(\n            dict(\n                session_id=str(self.session_id),\n                call=call,\n                callee=callee,\n                params=params,\n                ret=ret,\n            )\n        )\n\n    def insert_system_event(self, call, callee, information, params):\n        self.table_system.insert(\n            dict(\n                session_id=str(self.session_id),\n                call=call,\n                callee=callee,\n                information=information,\n                params=params,\n            )\n        )\n\n    def addAPK(self, filename: str, data: bytes) -> tuple[str, apk.APK]:\n        \"\"\"\n        Add an APK file to the Session and run analysis on it.\n\n        :param filename: (file)name of APK file\n        :param data: binary data of the APK file\n        :return: a tuple of SHA256 Checksum and APK Object\n        \"\"\"\n        digest = hashlib.sha256(data).hexdigest()\n\n        logger.info(\"add APK {}:{}\".format(filename, digest))\n        self.table_information.insert(\n            dict(\n                session_id=str(self.session_id),\n                filename=filename,\n                digest=digest,\n                type=\"APK\",\n            )\n        )\n\n        newapk = apk.APK(data, True)\n        self.analyzed_apk[digest] = [newapk]\n        self.analyzed_files[filename].append(digest)\n        self.analyzed_digest[digest] = filename\n        self.added_files.append(filename)\n\n        dx = Analysis()\n        self.analyzed_vms[digest] = dx\n\n        for dex in newapk.get_all_dex():\n            # we throw away the output... FIXME?\n            self.addDEX(filename, dex, dx, postpone_xref=True)\n\n        # Postponed\n        dx.create_xref()\n\n        logger.info(\"added APK {}:{}\".format(filename, digest))\n        return digest, newapk\n\n    def addDEX(\n        self,\n        filename: str,\n        data: bytes,\n        dx: Union[Analysis, None] = None,\n        postpone_xref: bool = False,\n    ) -> tuple[str, dex.DEX, Analysis]:\n        \"\"\"\n        Add a DEX file to the Session and run analysis.\n\n        :param filename: the (file)name of the DEX file\n        :param data: binary data of the dex file\n        :param dx: an existing `Analysis` Object (optional)\n        :param postpone_xref: True if no xref shall be created, and will be called manually\n        :return: A tuple of SHA256 Hash, DEX Object and `Analysis` object\n        \"\"\"\n        digest = hashlib.sha256(data).hexdigest()\n        logger.info(\"add DEX:{}\".format(digest))\n\n        self.table_information.insert(\n            dict(\n                session_id=str(self.session_id),\n                filename=filename,\n                digest=digest,\n                type=\"DEX\",\n            )\n        )\n\n        logger.debug(\"Parsing format ...\")\n        d = dex.DEX(data)\n        logger.info(\"added DEX:{}\".format(digest))\n\n        self.analyzed_files[filename].append(digest)\n        self.analyzed_digest[digest] = filename\n\n        self.analyzed_dex[digest] = d\n\n        if dx is None:\n            dx = Analysis()\n\n        dx.add(d)\n        if not postpone_xref:\n            dx.create_xref()\n\n        logger.debug(\"Associated decompiler to the DEX objects\")\n        for d in dx.vms:\n            # TODO: allow different decompiler here!\n            d.set_decompiler(DecompilerDAD(d, dx))\n            d.set_analysis(dx)\n        self.analyzed_vms[digest] = dx\n\n        if self.export_ipython:\n            logger.debug(\"Exporting in ipython\")\n            d.create_python_export()\n\n        return digest, d, dx\n\n    def addODEX(\n        self, filename: str, data: bytes, dx: Union[Analysis, None] = None\n    ) -> tuple[str, dex.ODEX, Analysis]:\n        \"\"\"\n        Add an ODEX file to the session and run the analysis\n\n        :param filename: the ODEX filename\n        :param data: the ODEX bytes\n        :param dx: the `Analysis` object to add the ODEX to\n        :returns: a tuple containing the SHA256 digest, the new `dex.ODEX` object, and the `Analysis` it is contained within.\n        \"\"\"\n        digest = hashlib.sha256(data).hexdigest()\n        logger.info(\"add ODEX:%s\" % digest)\n\n        self.table_information.insert(\n            dict(\n                session_id=str(self.session_id),\n                filename=filename,\n                digest=digest,\n                type=\"ODEX\",\n            )\n        )\n\n        d = dex.ODEX(data)\n        logger.debug(\"added ODEX:%s\" % digest)\n\n        self.analyzed_files[filename].append(digest)\n        self.analyzed_digest[digest] = filename\n\n        self.analyzed_dex[digest] = d\n\n        if self.export_ipython:\n            d.create_python_export()\n\n        if dx is None:\n            dx = Analysis()\n\n        dx.add(d)\n        dx.create_xref()\n\n        for d in dx.vms:\n            # TODO: allow different decompiler here!\n            d.set_decompiler(DecompilerDAD(d, dx))\n            d.set_vmanalysis(dx)\n\n        self.analyzed_vms[digest] = dx\n\n        return digest, d, dx\n\n    def add(\n        self,\n        filename: str,\n        raw_data: Union[bytes, None] = None,\n        dx: Union[Analysis, None] = None,\n    ) -> Union[str, None]:\n        \"\"\"\n        Generic method to add a file to the session.\n\n        This is the main method to use when adding files to a Session!\n\n        If an APK file is supplied, all DEX files are analyzed too.\n        For DEX and ODEX files, only this file is analyzed (what else should be\n        analyzed).\n\n        Returns the SHA256 of the analyzed file.\n\n        :param filename: filename to load\n        :param raw_data: bytes of the file, or None to load the file from filename\n        :param dx: An already exiting `androguard.core.analysis.analysis.Analysis` object\n        :return: the sha256 of the file or None on failure\n        \"\"\"\n        if not raw_data:\n            logger.debug(\"Loading file from '{}'\".format(filename))\n            with open(filename, \"rb\") as fp:\n                raw_data = fp.read()\n\n        ret = androconf.is_android_raw(raw_data)\n        logger.debug(\"Found filetype: '{}'\".format(ret))\n        if not ret:\n            return None\n\n        if ret == \"APK\":\n            digest, _ = self.addAPK(filename, raw_data)\n        elif ret == \"DEX\":\n            digest, _, _ = self.addDEX(filename, raw_data, dx)\n        elif ret == \"DEY\":\n            digest, _, _ = self.addODEX(filename, raw_data, dx)\n        else:\n            return None\n\n        return digest\n\n    def get_classes(\n        self,\n    ) -> Iterator[tuple[int, str, str, list[dex.ClassDefItem]]]:\n        \"\"\"\n        Returns all Java Classes from the DEX objects as an array of DEX files.\n\n        :returns: an iterator where each element is a tuple containing the index of the `Analysis` object, the filename containing the class (ODEX, DEX), the SHA256 digest of the `Analysis` object, and a list of `CalssDefItem`\n        \"\"\"\n        for idx, digest in enumerate(self.analyzed_vms):\n            dx = self.analyzed_vms[digest]\n            for vm in dx.vms:\n                filename = self.analyzed_digest[digest]\n                yield idx, filename, digest, vm.get_classes()\n\n    def get_analysis(self, current_class: dex.ClassDefItem) -> Analysis:\n        \"\"\"\n        Returns the [Analysis][androguard.core.analysis.analysis.Analysis] object\n        which contains the `current_class`.\n\n        :param current_class: The class to search for\n        :returns: the `androguard.core.analysis.analysis.Analysis` object\n        \"\"\"\n        for digest in self.analyzed_vms:\n            dx = self.analyzed_vms[digest]\n            if dx.is_class_present(current_class.get_name()):\n                return dx\n        return None\n\n    def get_format(self, current_class: dex.ClassDefItem) -> dex.DEX:\n        \"\"\"\n        Returns the [DEX][androguard.core.dex.DEX] of a\n        given [ClassDefItem][androguard.core.dex.ClassDefItem].\n\n        :param current_class: A ClassDefItem\n        \"\"\"\n        return current_class.CM.vm\n\n    def get_filename_by_class(\n        self, current_class: dex.ClassDefItem\n    ) -> Union[str, None]:\n        \"\"\"\n        Returns the filename of the DEX file where the class is in.\n\n        Returns the first filename this class was present.\n        For example, if you analyzed an APK, this should return the filename of\n        the APK and not of the DEX file.\n\n        :param current_class: `ClassDefItem`\n        :returns: `None` if class was not found or the filename\n        \"\"\"\n        for digest, dx in self.analyzed_vms.items():\n            if dx.is_class_present(current_class.get_name()):\n                return self.analyzed_digest[digest]\n        return None\n\n    def get_digest_by_class(\n        self, current_class: dex.ClassDefItem\n    ) -> Union[str, None]:\n        \"\"\"\n        Return the SHA256 hash of the object containing the [ClassDefItem][androguard.core.dex.ClassDefItem]\n\n        Returns the first digest this class was present.\n        For example, if you analyzed an APK, this should return the digest of\n        the APK and not of the DEX file.\n        \"\"\"\n        for digest, dx in self.analyzed_vms.items():\n            if dx.is_class_present(current_class.get_name()):\n                return digest\n        return None\n\n    def get_strings(\n        self,\n    ) -> Iterator[tuple[str, str, dict[str, StringAnalysis]]]:\n        \"\"\"\n        Yields all [StringAnalysis][androguard.core.analysis.analysis.StringAnalysis] for all unique [Analysis][androguard.core.analysis.analysis.Analysis] objects\n\n        :returns: an iterator of `StringAnalysis` objects\n        \"\"\"\n        seen = []\n        for digest, dx in self.analyzed_vms.items():\n            if dx in seen:\n                continue\n            seen.append(dx)\n            yield digest, self.analyzed_digest[\n                digest\n            ], dx.get_strings_analysis()\n\n    def get_nb_strings(self) -> int:\n        \"\"\"\n        Return the total number of strings in all [Analysis][androguard.core.analysis.analysis.Analysis] objects\n\n        :returns: the number of strings\n        \"\"\"\n        nb = 0\n        seen = []\n        for digest, dx in self.analyzed_vms.items():\n            if dx in seen:\n                continue\n            seen.append(dx)\n            nb += len(dx.get_strings_analysis())\n        return nb\n\n    def get_all_apks(self) -> Iterator[tuple[str, apk.APK]]:\n        \"\"\"\n        Yields a list of tuples of SHA256 hash of the APK and [APK][androguard.core.apk.APK] objects\n        of all analyzed APKs in the Session.\n\n        :returns: an iterator where each element is a tuple of sha256 of the APK, and the `APK` object\n        \"\"\"\n        for digest, a in self.analyzed_apk.items():\n            yield digest, a\n\n    def get_objects_apk(\n        self,\n        filename: Union[str, None] = None,\n        digest: Union[str, None] = None,\n    ) -> Iterator[tuple[apk.APK, list[dex.DEX], Analysis]]:\n        \"\"\"\n        Returns [APK][androguard.core.apk.APK], list of [DEX][androguard.core.dex.DEX], and [Analysis][androguard.core.analysis.analysis.Analysis] of a specified APK.\n\n        You must specify either `filename` or `digest`.\n        It is possible to use both, but in this case only `digest` is used.\n\n        Example:\n\n            >>> s = Session()\n            >>> digest = s.add(\"some.apk\")\n            >>> a, d, dx = s.get_objects_apk(digest=digest)\n\n        Example:\n\n            >>> s = Session()\n            >>> filename = \"some.apk\"\n            >>> digest = s.add(filename)\n            >>> a, d, dx = s.get_objects_apk(filename=filename)\n\n        :param filename: the filename of the APK file, only used of digest is `None`\n        :param digest: the sha256 hash, as returned by `add` for the APK\n        :returns: a tuple of (APK, [DEX], Analysis)\n        \"\"\"\n        if not filename and not digest:\n            raise ValueError(\"Must give at least filename or digest!\")\n\n        if digest is None:\n            digests = self.analyzed_files.get(filename)\n            # Negate to reduce tree\n            if not digests:\n                return None, None, None\n            digest = digests[0]\n\n        a = self.analyzed_apk[digest][0]\n        dx = self.analyzed_vms[digest]\n        return a, dx.vms, dx\n\n    def get_objects_dex(self) -> Iterator[tuple[str, dex.DEX, Analysis]]:\n        \"\"\"\n        Yields all [DEX][androguard.core.dex.DEX] objects including their [Analysis][androguard.core.analysis.analysis.Analysis] objects\n\n        :returns: tuple of (sha256, DEX, Analysis)\n        \"\"\"\n        # TODO: there is no variant like get_objects_apk\n        for digest, d in self.analyzed_dex.items():\n            yield digest, d, self.analyzed_vms[digest]\n"
  },
  {
    "path": "libs/androguard/ui/__init__.py",
    "content": "import os\nimport queue\n\nfrom loguru import logger\nfrom prompt_toolkit import Application\nfrom prompt_toolkit.application import get_app\nfrom prompt_toolkit.filters import Condition\nfrom prompt_toolkit.formatted_text import StyleAndTextTuples\nfrom prompt_toolkit.key_binding import KeyBindings, merge_key_bindings\nfrom prompt_toolkit.layout import (\n    ConditionalContainer,\n    Float,\n    FloatContainer,\n    HSplit,\n    Layout,\n    UIContent,\n    UIControl,\n    VSplit,\n    Window,\n)\nfrom prompt_toolkit.styles import Style\n\nfrom androguard.pentest import Message\nfrom androguard.ui.data_types import DisplayTransaction\nfrom androguard.ui.filter import Filter\nfrom androguard.ui.selection import SelectionViewList\nfrom androguard.ui.widget.details import DetailsFrame\nfrom androguard.ui.widget.filters import FiltersPanel\nfrom androguard.ui.widget.help import HelpPanel\nfrom androguard.ui.widget.toolbar import StatusToolbar\nfrom androguard.ui.widget.transactions import TransactionFrame\n\n\nclass DummyControl(UIControl):\n    \"\"\"\n    A dummy control object that doesn't paint any content.\n\n    Useful for filling a :class:`~prompt_toolkit.layout.Window`. (The\n    `fragment` and `char` attributes of the `Window` class can be used to\n    define the filling.)\n    \"\"\"\n\n    def create_content(self, width: int, height: int) -> UIContent:\n        def get_line(i: int) -> StyleAndTextTuples:\n            return []\n\n        return UIContent(\n            get_line=get_line, line_count=100**100\n        )  # Something very big.\n\n    def is_focusable(self) -> bool:\n        return True\n\n\nclass DynamicUI:\n    def __init__(self, input_queue):\n        logger.info(\"Starting the Terminal UI\")\n        self.filter: Filter | None = None\n\n        self.input_queue = input_queue\n        self.all_transactions = []\n\n        self.transactions = SelectionViewList([], max_view_size=1)\n        self.transaction_table = TransactionFrame(self.transactions)\n\n        self.details_pane = DetailsFrame(self.transactions, 1)\n\n        self.filter_panel = FiltersPanel()\n        self.help_panel = HelpPanel()\n\n        self.resize_components(os.get_terminal_size())\n\n    def run(self):\n        self.focusable = [self.transaction_table, self.details_pane]\n        self.focus_index = 0\n        self.focusable[self.focus_index].activated = True\n\n        kb1 = KeyBindings()\n\n        @kb1.add('tab')\n        def _(event):\n            self.focus_index = (self.focus_index + 1) % len(self.focusable)\n            for i, f in enumerate(self.focusable):\n                f.activated = i == self.focus_index\n\n        @kb1.add('s-tab')\n        def _(event):\n            self.focus_index = (\n                len(self.focusable) - 1\n                if self.focus_index == 0\n                else self.focus_index - 1\n            )\n            for i, f in enumerate(self.focusable):\n                f.activated = i == self.focus_index\n\n        dummy_control = DummyControl()\n        main_layout = HSplit(\n            key_bindings=kb1,\n            children=[\n                self.transaction_table,\n                VSplit(\n                    [\n                        self.details_pane,\n                        #    self.structure_pane,\n                    ]\n                ),\n                StatusToolbar(self.transactions, self.filter_panel),\n                Window(content=dummy_control),\n            ],\n        )\n\n        @Condition\n        def modal_panel_visible():\n            return show_help() or show_filters()\n\n        @Condition\n        def show_filters():\n            return self.filter_panel.visible\n\n        @Condition\n        def show_help():\n            return self.help_panel.visible\n\n        layout = Layout(\n            container=FloatContainer(\n                content=main_layout,\n                floats=[\n                    Float(\n                        top=10,\n                        content=ConditionalContainer(\n                            content=self.filter_panel, filter=show_filters\n                        ),\n                    ),\n                    Float(\n                        top=10,\n                        content=ConditionalContainer(\n                            content=self.help_panel, filter=show_help\n                        ),\n                    ),\n                ],\n            )\n        )\n\n        style = Style(\n            [\n                ('field.selected', 'ansiblack bg:ansiwhite'),\n                ('field.default', 'fg:ansiwhite'),\n                ('frame.label', 'fg:ansiwhite'),\n                ('frame.border', 'fg:ansiwhite'),\n                ('frame.border.selected', 'fg:ansibrightgreen'),\n                ('transaction.heading', 'ansiblack bg:ansigray'),\n                ('transaction.selected', 'ansiblack bg:ansiwhite'),\n                ('transaction.default', 'fg:ansiwhite'),\n                ('transaction.unsupported', 'fg:ansibrightblack'),\n                ('transaction.error', 'fg:ansired'),\n                ('transaction.no_aidl', 'fg:ansiwhite'),\n                ('transaction.oneway', 'fg:ansimagenta'),\n                ('transaction.request', 'fg:ansicyan'),\n                ('transaction.response', 'fg:ansiyellow'),\n                ('hexdump.default', 'fg:ansiwhite'),\n                ('hexdump.selected', 'fg:ansiblack bg:ansiwhite'),\n                ('toolbar', 'bg:ansigreen'),\n                ('toolbar.text', 'fg:ansiblack'),\n                ('dialog', 'fg:ansiblack bg:ansiwhite'),\n                ('dialog frame.border', 'fg:ansiblack bg:ansiwhite'),\n                ('dialog frame.label', 'fg:ansiblack bg:ansiwhite'),\n                ('dialogger.textarea', 'fg:ansiwhite bg:ansiblack'),\n            ]\n        )\n\n        kb = KeyBindings()\n\n        @kb.add('q')\n        def _(event):\n            logger.info(\"Q pressed. App exiting.\")\n            event.app.exit(exception=KeyboardInterrupt, style='class:aborting')\n\n        @kb.add('h', filter=~modal_panel_visible | show_help)\n        @kb.add(\"enter\", filter=show_help)\n        def _(event):\n            self.help_panel.visible = not self.help_panel.visible\n\n        @kb.add('f', filter=~modal_panel_visible)\n        @kb.add(\"enter\", filter=show_filters)\n        def _(event):\n            self.filter_panel.visible = not self.filter_panel.visible\n            if self.filter_panel.visible:\n                get_app().layout.focus(self.filter_panel.interface_textarea)\n            else:\n                self.filter = self.filter_panel.filter()\n                self.transactions.assign(\n                    [t for t in self.all_transactions if self.filter.passes(t)]\n                )\n                get_app().layout.focus(dummy_control)\n\n        @kb.add(\"c-c\")\n        def _(event):\n            active_frame = self.focusable[self.focus_index]\n            active_frame.copy_to_clipboard()\n\n        app = Application(\n            layout,\n            key_bindings=merge_key_bindings(\n                [\n                    kb,\n                    self.transaction_table.key_bindings(),\n                    # self.structure_pane.key_bindings(),\n                    # self.hexdump_pane.key_bindings()\n                ]\n            ),\n            full_screen=True,\n            style=style,\n        )\n        app.before_render += self.check_resize\n\n        app.run()\n\n    def check_resize(self, _):\n        new_dimensions = os.get_terminal_size()\n        if self.dimensions != new_dimensions:\n            self.resize_components(new_dimensions)\n\n    def resize_components(self, dimensions):\n        self.dimensions = dimensions\n        _, height = dimensions\n\n        # Allow for the borders:\n        # - top and bottom of transaction frame\n        # - top and bottom of lower frames\n        # - status bar\n        border_allowance = 5\n        available_height = height - border_allowance\n\n        # Split into two halfs horizontally. If there are an odd number of lines give the extra to transactions.\n        transactions_height = available_height - (available_height // 2)\n        lower_panels_height = available_height // 2\n\n        logger.debug(f\"New terminal dimension: {dimensions}\")\n        logger.debug(\n            f\"{border_allowance=}, {transactions_height=}, {lower_panels_height=}, total={border_allowance+transactions_height+lower_panels_height}\"\n        )\n\n        self.transaction_table.resize(transactions_height)\n        # self.structure_pane.max_height = lower_panels_height\n        # self.hexdump_pane.max_lines = lower_panels_height\n\n    def get_available_blocks(self):\n        blocks: list[Message] = []\n        # Retrieve every unhandled block currently available in the queue\n        try:\n            for _ in range(10):\n                blocks.append(self.input_queue.get_nowait())\n        except queue.Empty:\n            pass\n        return blocks\n\n    def process_data(self):\n        blocks = self.get_available_blocks()\n        # For every block...\n        for block in blocks:\n            block = DisplayTransaction(block)\n            if not self.filter or self.filter.passes(block):\n                self.transactions.append(block)\n\n            self.all_transactions.append(block)\n\n        return bool(blocks)\n"
  },
  {
    "path": "libs/androguard/ui/data_types.py",
    "content": "import datetime\n\nfrom androguard.pentest import Message, MessageEvent, MessageSystem\n\n\nclass DisplayTransaction:\n\n    def __init__(self, block: Message) -> None:\n        self.block: Message = block\n        self.timestamp = (datetime.datetime.now().strftime('%H:%M:%S'),)\n\n    @property\n    def index(self) -> int:\n        return self.block.index\n\n    @property\n    def unsupported_call(self) -> bool:\n        return ''  # self.block.unsupported_call\n\n    @property\n    def to_method(self) -> str:\n        return self.block.to_method\n\n    @property\n    def from_method(self) -> str:\n        return self.block.from_method\n\n    @property\n    def params(self) -> str:\n        return self.block.params\n\n    @property\n    def ret_value(self) -> str:\n        return self.block.ret_value\n\n    @property\n    def fields(self):  # -> Field | None:\n        return None  # self.block.root_field\n\n    @property\n    def direction_indicator(self) -> str:\n        return '\\u21D0'\n\n        if self.block.direction == Direction.IN:\n            return '\\u21D0' if self.block.oneway else '\\u21D2'\n        elif self.block.direction == Direction.OUT:\n            return '\\u21CF'\n        else:\n            return ''\n\n    def style(self) -> str:\n        if type(self.block) is MessageEvent:\n            style = \"class:transaction.oneway\"\n        elif type(self.block) is MessageSystem:\n            style = \"class:transaction.response\"\n        else:\n            style = \"class:transaction.default\"\n        return style\n\n        if self.unsupported_call:\n            style = \"class:transaction.unsupported\"\n        elif self.block.errors:\n            style = \"class:transaction.error\"\n        elif self.block.unsupported_call:\n            style = \"class:transaction.no_aidl\"\n        elif self.block.direction == Direction.IN:\n            style = (\n                \"class:transaction.oneway\"\n                if self.block.oneway\n                else \"class:transaction.request\"\n            )\n        elif self.block.direction == Direction.OUT:\n            style = \"class:transaction.response\"\n        else:\n            style = \"class:transaction.default\"\n        return style\n\n    def type(self) -> str:\n        \"\"\"Gets the type of the Block as a simple short string for use in pattern matching\"\"\"\n        return \"oneway\"\n\n        if self.unsupported_call:\n            type_name = \"unsupported type\"\n        elif self.block.errors:\n            type_name = \"error\"\n        elif self.block.direction == Direction.IN:\n            # TODO: Should this be \"oneway\" or \"async call\"?\n            type_name = \"oneway\" if self.block.oneway else \"call\"\n        elif self.block.direction == Direction.OUT:\n            type_name = \"return\"\n        else:\n            type_name = \"unknown\"  # Should be impossible\n\n        return type_name\n"
  },
  {
    "path": "libs/androguard/ui/filter.py",
    "content": "from collections import UserList\nfrom typing import Optional, TypeVar\n\n\nclass Filter:\n    \"\"\"\n    CLASS Filter\n        Brief - Class that represents a single filter\n        Description -\n            It holds and interface, method and list of types to check against\n            It also holds the function which checks if a block passes the filter\n    \"\"\"\n\n    def __init__(\n        self,\n        interface: Optional[str] = None,\n        method: Optional[str] = None,\n        types: Optional[list[str]] = None,\n        include: bool = True,\n    ):\n        self.interface = interface\n        self.method = method\n        self.types = (\n            types or []\n        )  # List of associated types of the filter (call, return, etc)\n        self.inclusive = include\n\n    def passes(self):\n        \"\"\"\n        FUNCTION passes\n            Brief - Returns whether a block should be displayed\n            Description -\n                Returns TRUE if the block should be shown\n                Returns FALSE if the block should no be shown\n\n                The code checks if the filter passes the checks, and then tailors the output to the filter_mode\n                The type is either Inclusive (\"Incl\") or Exclusive (\"Excl\")\n        \"\"\"\n        # matches = (\n        #    (not self.types or block.type() in self.types) and\n        #    (not self.interface or self.interface in block.interface) and\n        #    (not self.method or self.method in block.method)\n        # )\n        # return not matches ^ self.inclusive\n        return False\n\n    def toggle_inclusivity(self):\n        self.inclusive = not self.inclusive\n\n    def __str__(self):\n        interface = self.interface or \"*\"\n        method = self.method or \"*\"\n        types = \"|\".join(self.types) if self.types else \"*\"\n\n        return f\"interface={interface}, method={method}, types={types}\"\n\n\n_T = TypeVar('_T', bound=Filter)\n\n\nclass FilterSet(UserList[_T]):\n\n    def passes(self, interface=None, method=None, call_type=None):\n        \"\"\"Return True if all filters in the set pass, False otherwise.\"\"\"\n        return all([f.passes(interface, method, call_type) for f in self.data])\n"
  },
  {
    "path": "libs/androguard/ui/selection.py",
    "content": "from collections import UserList\r\nfrom dataclasses import dataclass\r\nfrom typing import Iterable, TypeVar\r\n\r\nfrom prompt_toolkit.utils import Event\r\n\r\nfrom androguard.ui.util import clamp\r\n\r\n\r\n@dataclass\r\nclass View:\r\n    start: int\r\n    end: int\r\n\r\n    def size(self):\r\n        return self.end - self.start\r\n\r\n\r\n_T = TypeVar('_T')\r\n\r\n\r\nclass SelectionViewList(UserList[_T]):\r\n\r\n    def __init__(self, iterable=None, max_view_size=80, view_padding=5):\r\n        super().__init__(iterable)\r\n\r\n        self.max_view_size = max_view_size\r\n        self.view_padding = view_padding\r\n        self.on_update_event = Event(self)\r\n        self.on_selection_change = Event(self)\r\n        self._reset_view()\r\n\r\n    def _reset_view(self):\r\n        # -1 means the list is empty so there is no selection.\r\n        self.selection = 0 if len(self) else -1\r\n        self.view = View(0, min(self.max_view_size, len(self)))\r\n        self.on_update_event()\r\n        self.on_selection_change()\r\n\r\n    def selection_valid(self):\r\n        return self.selection != -1\r\n\r\n    def move_selection(self, step: int):\r\n        if self.selection_valid():\r\n\r\n            if step != 0:\r\n                self.selection = clamp(0, len(self) - 1, self.selection + step)\r\n                self._update_view(step)\r\n                self.on_selection_change()\r\n\r\n    def selected(self):\r\n        if not self.selection_valid():\r\n            raise IndexError(\"Selection index not set.\")\r\n\r\n        return self.data[self.selection]\r\n\r\n    def view_slice(self):\r\n        return self.data[self.view.start : self.view.end]\r\n\r\n    def resize_view(self, view_size):\r\n        if self.selection_valid():\r\n            before_selection = view_size // 2\r\n            self.view.start = max(0, self.selection - before_selection)\r\n            self.view.end = self.view.start\r\n            self.max_view_size = view_size\r\n            self._expand_view()\r\n        else:\r\n            self.max_view_size = view_size\r\n            self._reset_view()\r\n\r\n    def _update_view(self, step: int):\r\n        if step > 0 and self.view.end - self.selection < self.view_padding:\r\n            # We're moving down the list and are near the bottom (i.e. within padding of end of current view).\r\n\r\n            self.view.end = min(self.view.end + step, len(self))\r\n\r\n            # If we're can't fit all the data in the view set the start of the view\r\n            if self.view.end > self.max_view_size:\r\n                self.view.start = self.view.end - self.max_view_size\r\n\r\n        elif step < 0 and self.selection - self.view.start < self.view_padding:\r\n            # We're moving up the list and are near the top (i.e. within padding of start of current view)\r\n\r\n            # We're adding a negative here so although it looks a bit odd we are moving the view backwards\r\n            self.view.start = max(self.view.start + step, 0)\r\n            self.view.end = min(\r\n                len(self), self.view.start + self.max_view_size\r\n            )\r\n        self.on_update_event()\r\n\r\n    def __delitem__(self, i: int):\r\n        super().__delitem__(i)\r\n        self._delete_from_view(i)\r\n\r\n    def _expand_view(self):\r\n        self.view.end = self.view.start + min(\r\n            self.max_view_size, len(self) - self.view.start\r\n        )\r\n        if not self.selection_valid():\r\n            self.selection = 0\r\n            self.on_selection_change()\r\n        self.on_update_event()\r\n\r\n    def _delete_from_view(self, i: int):\r\n        if len(self) == 0:\r\n            self._reset_view()\r\n        else:\r\n            # if i < self.selection:\r\n            #     self.selection -= 1\r\n            self.move_selection(-1)\r\n\r\n        self.on_update_event()\r\n        # TODO: once the selection is within padding of the start of the window it shoud move up\r\n        # if i <= self.view.end:\r\n        #     self.view.end = min(self.view.end, len(self))\r\n        # if i < self.selection:\r\n        #     self.selection -= 1\r\n        # elif i == self.selection:\r\n        #     self.selection = min(self.selection, len(self))\r\n        # if i <= self.view.start:\r\n        #     self.view.start = max(0, self.view.start - 1)\r\n        #     self.view.end -= 1\r\n\r\n    def append(self, item: _T):\r\n        super().append(item)\r\n        self._expand_view()\r\n\r\n    def insert(self, i, item: _T):\r\n        super().insert(i, item)\r\n\r\n        if len(self) == 1:\r\n            # The list must have been empty so reset the view\r\n            self._reset_view()\r\n        else:\r\n            if i >= self.view.start:\r\n                self._expand_view()\r\n\r\n            if i <= self.selection:\r\n                self.selection += 1\r\n                self.on_selection_change()\r\n\r\n    def pop(self, i=-1):\r\n        item = super().pop(i)\r\n        self._delete_from_view(i)\r\n        return item\r\n\r\n    def remove(self, item: _T):\r\n        # We're reimplementing remove in terms of index and delete because we need the indext to update the view\r\n        i = self.index(item)\r\n        super().__delitem__(i)\r\n        self._delete_from_view(i)\r\n\r\n    def clear(self):\r\n        super().clear()\r\n        self._reset_view()\r\n\r\n    def extend(self, other: Iterable[_T]):\r\n        super().extend(other)\r\n        self._expand_view()\r\n\r\n    def assign(self, items: Iterable[_T]):\r\n        self.clear()\r\n        self.data += items\r\n        self._reset_view()\r\n"
  },
  {
    "path": "libs/androguard/ui/table.py",
    "content": "#!/usr/bin/env python3\n\nfrom typing import Type, Union\n\nfrom prompt_toolkit import Application\nfrom prompt_toolkit.cache import SimpleCache\nfrom prompt_toolkit.key_binding.key_bindings import KeyBindings\n\n# from prompt_toolkit.widgets.base import Border\nfrom prompt_toolkit.layout.containers import (\n    HorizontalAlign,\n    HSplit,\n    VerticalAlign,\n    VSplit,\n    Window,\n)\nfrom prompt_toolkit.layout.dimension import Dimension as D\nfrom prompt_toolkit.layout.dimension import (\n    max_layout_dimensions,\n    sum_layout_dimensions,\n    to_dimension,\n)\nfrom prompt_toolkit.layout.layout import Layout\nfrom prompt_toolkit.utils import take_using_weights\nfrom prompt_toolkit.widgets import Box, Button, Label, TextArea\n\nfrom androguard.ui.selection import SelectionViewList\n\n\nclass EmptyBorder:\n    HORIZONTAL = ''\n    VERTICAL = ''\n\n    TOP_LEFT = ''\n    TOP_RIGHT = ''\n    BOTTOM_LEFT = ''\n    BOTTOM_RIGHT = ''\n\n    LEFT_T = ''\n    RIGHT_T = ''\n    TOP_T = ''\n    BOTTOM_T = ''\n\n    INTERSECT = ''\n\n\nclass SpaceBorder:\n    \"Box drawing characters. (Spaces)\"\n    HORIZONTAL = ' '\n    VERTICAL = ' '\n\n    TOP_LEFT = ' '\n    TOP_RIGHT = ' '\n    BOTTOM_LEFT = ' '\n    BOTTOM_RIGHT = ' '\n\n    LEFT_T = ' '\n    RIGHT_T = ' '\n    TOP_T = ' '\n    BOTTOM_T = ' '\n\n    INTERSECT = ' '\n\n\nclass AsciiBorder:\n    \"Box drawing characters. (ASCII)\"\n    HORIZONTAL = '-'\n    VERTICAL = '|'\n\n    TOP_LEFT = '+'\n    TOP_RIGHT = '+'\n    BOTTOM_LEFT = '+'\n    BOTTOM_RIGHT = '+'\n\n    LEFT_T = '+'\n    RIGHT_T = '+'\n    TOP_T = '+'\n    BOTTOM_T = '+'\n\n    INTERSECT = '+'\n\n\nclass ThinBorder:\n    \"Box drawing characters. (Thin)\"\n    HORIZONTAL = '\\u2500'\n    VERTICAL = '\\u2502'\n\n    TOP_LEFT = '\\u250c'\n    TOP_RIGHT = '\\u2510'\n    BOTTOM_LEFT = '\\u2514'\n    BOTTOM_RIGHT = '\\u2518'\n\n    LEFT_T = '\\u251c'\n    RIGHT_T = '\\u2524'\n    TOP_T = '\\u252c'\n    BOTTOM_T = '\\u2534'\n\n    INTERSECT = '\\u253c'\n\n\nclass RoundedBorder(ThinBorder):\n    \"Box drawing characters. (Rounded)\"\n    TOP_LEFT = '\\u256d'\n    TOP_RIGHT = '\\u256e'\n    BOTTOM_LEFT = '\\u2570'\n    BOTTOM_RIGHT = '\\u256f'\n\n\nclass ThickBorder:\n    \"Box drawing characters. (Thick)\"\n    HORIZONTAL = '\\u2501'\n    VERTICAL = '\\u2503'\n\n    TOP_LEFT = '\\u250f'\n    TOP_RIGHT = '\\u2513'\n    BOTTOM_LEFT = '\\u2517'\n    BOTTOM_RIGHT = '\\u251b'\n\n    LEFT_T = '\\u2523'\n    RIGHT_T = '\\u252b'\n    TOP_T = '\\u2533'\n    BOTTOM_T = '\\u253b'\n\n    INTERSECT = '\\u254b'\n\n\nclass DoubleBorder:\n    \"Box drawing characters. (Thin)\"\n    HORIZONTAL = '\\u2550'\n    VERTICAL = '\\u2551'\n\n    TOP_LEFT = '\\u2554'\n    TOP_RIGHT = '\\u2557'\n    BOTTOM_LEFT = '\\u255a'\n    BOTTOM_RIGHT = '\\u255d'\n\n    LEFT_T = '\\u2560'\n    RIGHT_T = '\\u2563'\n    TOP_T = '\\u2566'\n    BOTTOM_T = '\\u2569'\n\n    INTERSECT = '\\u256c'\n\n\nAnyBorderStyle = Union[\n    Type[EmptyBorder],\n    Type[SpaceBorder],\n    Type[AsciiBorder],\n    Type[ThinBorder],\n    Type[RoundedBorder],\n    Type[ThickBorder],\n    Type[DoubleBorder],\n]\n\n\nclass Merge:\n    def __init__(self, cell, merge=1):\n        self.cell = cell\n        self.merge = merge\n\n    def __iter__(self):\n        yield self.cell\n        yield self.merge\n\n\nclass Table(HSplit):\n\n    def __init__(\n        self,\n        table,\n        borders: AnyBorderStyle = ThinBorder,\n        column_width=None,\n        column_widths=[],\n        window_too_small=None,\n        align=VerticalAlign.JUSTIFY,\n        padding=0,\n        padding_char=None,\n        padding_style='',\n        width=None,\n        height=None,\n        z_index=None,\n        modal=False,\n        key_bindings=None,\n        style='',\n        selected_style='',\n    ):\n        self.borders = borders\n        self.column_width = column_width\n        self.column_widths = column_widths\n        self.selected_style = selected_style\n\n        # ensure the table is iterable (has rows)\n        if not isinstance(table, list):\n            table = [table]\n\n        children = [\n            _Row(row=row, table=self, borders=borders, height=1)\n            for row in table\n        ]\n\n        super().__init__(\n            children=children,\n            window_too_small=window_too_small,\n            align=align,\n            padding=padding,\n            padding_char=padding_char,\n            padding_style=padding_style,\n            width=width,\n            height=height,\n            z_index=z_index,\n            modal=modal,\n            key_bindings=key_bindings,\n            style=style,\n        )\n        self.row_cache = SimpleCache(maxsize=30)\n\n    # def do_update(self, rows):\n    #     self.children.clear()\n    #     self.children.extend(_Row(row=row, table=self, borders=self.borders, height=1, style=\"#000000 bg:#ffffff\") for row in rows)\n\n    def add_row(self, row, style, cache_id):\n        r = self.row_cache.get(\n            cache_id,\n            lambda: _Row(\n                row=row,\n                table=self,\n                borders=self.borders,\n                height=1,\n                style=style,\n            ),\n        )\n        self.children.append(r)\n\n    @property\n    def columns(self):\n        return max(row.raw_columns for row in self.children)\n\n    @property\n    def _all_children(self):\n        \"\"\"\n        List of child objects, including padding & borders.\n        \"\"\"\n\n        def get():\n            result = []\n\n            # Padding top.\n            if self.align in (VerticalAlign.CENTER, VerticalAlign.BOTTOM):\n                result.append(Window(width=D(preferred=0)))\n\n            # Border top is first inserted in children loop.\n\n            # The children with padding.\n            prev = None\n            for child in self.children:\n                # result.append(_Border(\n                #     prev=prev,\n                #     next=child,\n                #     table=self,\n                #     borders=self.borders))\n                result.append(child)\n                prev = child\n\n            # Border bottom.\n            # result.append(_Border(prev=prev, next=None, table=self, borders=self.borders))\n\n            # Padding bottom.\n            if self.align in (VerticalAlign.CENTER, VerticalAlign.TOP):\n                result.append(Window(width=D(preferred=0)))\n\n            return result\n\n        return self._children_cache.get(tuple(self.children), get)\n\n    def preferred_dimensions(self, width):\n        dimensions = [[]] * self.columns\n        for row in self.children:\n            assert isinstance(row, _Row)\n            j = 0\n            for cell in row.children:\n                assert isinstance(cell, _Cell)\n\n                if cell.merge != 1:\n                    dimensions[j].append(cell.preferred_width(width))\n\n                j += cell.merge\n\n        for i, c in enumerate(dimensions):\n            yield D.exact(1)\n\n            try:\n                w = self.column_widths[i]\n            except IndexError:\n                w = self.column_width\n            if w is None:  # fitted\n                yield max_layout_dimensions(c)\n            else:  # fixed or weighted\n                yield to_dimension(w)\n        yield D.exact(1)\n\n\nclass _VerticalBorder(Window):\n    def __init__(self, borders):\n        super().__init__(width=1, char=borders.VERTICAL)\n\n\nclass _HorizontalBorder(Window):\n    def __init__(self, borders):\n        super().__init__(height=1, char=borders.HORIZONTAL)\n\n\nclass _UnitBorder(Window):\n    def __init__(self, char):\n        super().__init__(width=1, height=1, char=char)\n\n\nclass _BaseRow(VSplit):\n    @property\n    def columns(self):\n        return self.table.columns\n\n    def _divide_widths(self, width):\n        \"\"\"\n        Return the widths for all columns.\n        Or None when there is not enough space.\n        \"\"\"\n        children = self._all_children\n\n        if not children:\n            return []\n\n        # Calculate widths.\n        dimensions = list(self.table.preferred_dimensions(width))\n        preferred_dimensions = [d.preferred for d in dimensions]\n\n        # Sum dimensions\n        sum_dimensions = sum_layout_dimensions(dimensions)\n\n        # If there is not enough space for both.\n        # Don't do anything.\n        if sum_dimensions.min > width:\n            return\n\n        # Find optimal sizes. (Start with minimal size, increase until we cover\n        # the whole width.)\n        sizes = [d.min for d in dimensions]\n\n        child_generator = take_using_weights(\n            items=list(range(len(dimensions))),\n            weights=[d.weight for d in dimensions],\n        )\n\n        i = next(child_generator)\n\n        # Increase until we meet at least the 'preferred' size.\n        preferred_stop = min(width, sum_dimensions.preferred)\n\n        while sum(sizes) < preferred_stop:\n            if sizes[i] < preferred_dimensions[i]:\n                sizes[i] += 1\n            i = next(child_generator)\n\n        # Increase until we use all the available space.\n        max_dimensions = [d.max for d in dimensions]\n        max_stop = min(width, sum_dimensions.max)\n\n        while sum(sizes) < max_stop:\n            if sizes[i] < max_dimensions[i]:\n                sizes[i] += 1\n            i = next(child_generator)\n\n        # perform merges if necessary\n        if len(children) != len(sizes):\n            tmp = []\n            i = 0\n            for c in children:\n                if isinstance(c, _Cell):\n                    inc = (c.merge * 2) - 1\n                    tmp.append(sum(sizes[i : i + inc]))\n                else:\n                    inc = 1\n                    tmp.append(sizes[i])\n                i += inc\n            sizes = tmp\n\n        return sizes\n\n\nclass _Row(_BaseRow):\n    def __init__(\n        self,\n        row,\n        table,\n        borders,\n        window_too_small=None,\n        align=HorizontalAlign.JUSTIFY,\n        padding=D.exact(0),\n        padding_char=None,\n        padding_style='',\n        width=None,\n        height=None,\n        z_index=None,\n        modal=False,\n        key_bindings=None,\n        style='',\n    ):\n        self.table = table\n        self.borders = borders\n\n        # ensure the row is iterable (has cells)\n        if not isinstance(row, list):\n            row = [row]\n        children = []\n        for c in row:\n            m = 1\n            if isinstance(c, Merge):\n                c, m = c\n            elif isinstance(c, dict):\n                c, m = Merge(**c)\n            children.append(_Cell(cell=c, table=table, row=self, merge=m))\n\n        super().__init__(\n            children=children,\n            window_too_small=window_too_small,\n            align=align,\n            padding=padding,\n            padding_char=padding_char,\n            padding_style=padding_style,\n            width=width,\n            height=height,\n            z_index=z_index,\n            modal=modal,\n            key_bindings=key_bindings,\n            style=style,\n        )\n\n    @property\n    def raw_columns(self):\n        return sum(cell.merge for cell in self.children)\n\n    @property\n    def _all_children(self):\n        \"\"\"\n        List of child objects, including padding & borders.\n        \"\"\"\n\n        def get():\n            result = []\n\n            # Padding left.\n            if self.align in (HorizontalAlign.CENTER, HorizontalAlign.RIGHT):\n                result.append(Window(width=D(preferred=0)))\n\n            # Border left is first inserted in children loop.\n\n            # The children with padding.\n            c = 0\n            for child in self.children:\n                result.append(_VerticalBorder(borders=self.borders))\n                result.append(child)\n                c += child.merge\n            # Fill in any missing columns\n            for _ in range(self.columns - c):\n                result.append(_VerticalBorder(borders=self.borders))\n                result.append(_Cell(cell=None, table=self.table, row=self))\n\n            # Border right.\n            result.append(_VerticalBorder(borders=self.borders))\n\n            # Padding right.\n            if self.align in (HorizontalAlign.CENTER, HorizontalAlign.LEFT):\n                result.append(Window(width=D(preferred=0)))\n\n            return result\n\n        return self._children_cache.get(tuple(self.children), get)\n\n\nclass _Border(_BaseRow):\n    def __init__(\n        self,\n        prev,\n        next,\n        table,\n        borders,\n        window_too_small=None,\n        align=HorizontalAlign.JUSTIFY,\n        padding=D.exact(0),\n        padding_char=None,\n        padding_style='',\n        width=None,\n        height=None,\n        z_index=None,\n        modal=False,\n        key_bindings=None,\n        style='',\n    ):\n        assert prev or next\n        self.prev = prev\n        self.next = next\n        self.table = table\n        self.borders = borders\n\n        children = [_HorizontalBorder(borders=borders)] * self.columns\n\n        super().__init__(\n            children=children,\n            window_too_small=window_too_small,\n            align=align,\n            padding=padding,\n            padding_char=padding_char,\n            padding_style=padding_style,\n            width=width,\n            height=height or 1,\n            z_index=z_index,\n            modal=modal,\n            key_bindings=key_bindings,\n            style=style,\n        )\n\n    def has_borders(self, row):\n        yield None  # first (outer) border\n\n        if not row:\n            # this row is undefined, none of the borders need to be marked\n            yield from [False] * (self.columns - 1)\n        else:\n            c = 0\n            for child in row.children:\n                yield from [False] * (child.merge - 1)\n                yield True\n                c += child.merge\n\n            yield from [True] * (self.columns - c)\n\n        yield None  # last (outer) border\n\n    @property\n    def _all_children(self):\n        \"\"\"\n        List of child objects, including padding & borders.\n        \"\"\"\n\n        def get():\n            result = []\n\n            # Padding left.\n            if self.align in (HorizontalAlign.CENTER, HorizontalAlign.RIGHT):\n                result.append(Window(width=D(preferred=0)))\n\n            def char(i, pc=False, nc=False):\n                if i == 0:\n                    if self.prev and self.next:\n                        return self.borders.LEFT_T\n                    elif self.prev:\n                        return self.borders.BOTTOM_LEFT\n                    else:\n                        return self.borders.TOP_LEFT\n\n                if i == self.columns:\n                    if self.prev and self.next:\n                        return self.borders.RIGHT_T\n                    elif self.prev:\n                        return self.borders.BOTTOM_RIGHT\n                    else:\n                        return self.borders.TOP_RIGHT\n\n                if pc and nc:\n                    return self.borders.INTERSECT\n                elif pc:\n                    return self.borders.BOTTOM_T\n                elif nc:\n                    return self.borders.TOP_T\n                else:\n                    return self.borders.HORIZONTAL\n\n            # Border left is first inserted in children loop.\n\n            # The children with padding.\n            pcs = self.has_borders(self.prev)\n            ncs = self.has_borders(self.next)\n            for i, (child, pc, nc) in enumerate(zip(self.children, pcs, ncs)):\n                result.append(_UnitBorder(char=char(i, pc, nc)))\n                result.append(child)\n\n            # Border right.\n            result.append(_UnitBorder(char=char(self.columns)))\n\n            # Padding right.\n            if self.align in (HorizontalAlign.CENTER, HorizontalAlign.LEFT):\n                result.append(Window(width=D(preferred=0)))\n\n            return result\n\n        return self._children_cache.get(tuple(self.children), get)\n\n\nclass _Cell(HSplit):\n    def __init__(\n        self,\n        cell,\n        table,\n        row,\n        merge=1,\n        padding=0,\n        char=None,\n        padding_left=None,\n        padding_right=None,\n        padding_top=None,\n        padding_bottom=None,\n        window_too_small=None,\n        width=None,\n        height=None,\n        z_index=None,\n        modal=False,\n        key_bindings=None,\n        style='',\n    ):\n        self.table = table\n        self.row = row\n        self.merge = merge\n\n        if padding is None:\n            padding = D(preferred=0)\n\n        def get(value):\n            if value is None:\n                value = padding\n            return to_dimension(value)\n\n        self.padding_left = get(padding_left)\n        self.padding_right = get(padding_right)\n        self.padding_top = get(padding_top)\n        self.padding_bottom = get(padding_bottom)\n\n        children = []\n        children.append(Window(width=self.padding_left, char=char))\n        if cell:\n            children.append(cell)\n        children.append(Window(width=self.padding_right, char=char))\n\n        children = [\n            Window(height=self.padding_top, char=char),\n            VSplit(children),\n            Window(height=self.padding_bottom, char=char),\n        ]\n\n        super().__init__(\n            children=children,\n            window_too_small=window_too_small,\n            width=width,\n            height=height,\n            z_index=z_index,\n            modal=modal,\n            key_bindings=key_bindings,\n            style=style,\n        )\n\n\ndef demo():\n    txt1 = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut purus nibh, sollicitudin at lorem eget, tristique fringilla purus. Donec sit amet lectus porta, aliquam ligula sed, sagittis eros. Proin in augue leo. Donec vitae erat pellentesque, hendrerit tellus malesuada, mollis urna. Nam varius, lorem id porttitor euismod, erat sapien tempus odio, ac porttitor eros lacus et magna. Nam in arcu pellentesque, bibendum est vel, viverra nulla. Ut ut accumsan risus. Donec at volutpat tortor. Nulla ac elementum lacus. Pellentesque nec nibh tempus, posuere massa nec, consequat lorem. Curabitur ac sollicitudin neque. Donec vel ante magna. Nunc nec sapien vitae sem bibendum volutpat. Donec posuere nulla felis, id mattis risus dictum ut. Fusce libero mi, varius aliquet commodo at, tempus ut eros.\"\n    txt2 = \"Praesent eu ultrices massa. Cras et dui bibendum, venenatis urna nec, porttitor sem. Nullam commodo tempor pellentesque. Praesent leo odio, fermentum a ultrices a, ultrices eu nibh. Etiam commodo orci urna, vitae egestas enim ultricies vel. Cras diam eros, rutrum in congue ac, pretium sed quam. Cras commodo ut ipsum ut sollicitudin.\"\n    txt3 = \"Proin in varius purus. <b>Aliquam nec nulla</b> eget lorem fermentum facilisis. Quisque eget ante quam. Quisque vel pharetra magna. Sed volutpat, ligula sed aliquam pharetra, felis tellus bibendum mi, at imperdiet risus augue eget eros. Suspendisse ut venenatis magna, at euismod magna. Phasellus bibendum maximus sem eget porttitor. Donec et eleifend mi, in ornare nisi.\"\n    txt4 = \"Morbi viverra, justo eget pretium sollicitudin, magna ex sodales ligula, et convallis erat mauris eu urna. Curabitur tristique quis metus at sodales. Nullam tincidunt convallis lorem in faucibus. Donec nec turpis ante. Ut tincidunt neque eu ornare sagittis. Suspendisse potenti. Etiam tellus est, porttitor eget luctus sed, euismod et erat. Vivamus commodo, massa eget mattis eleifend, turpis sem porttitor dolor, eu finibus ex erat id tellus. Etiam viverra iaculis tellus, ut tempus tellus. Maecenas arcu lectus, euismod accumsan erat eu, blandit vehicula dui. Nulla id ante egestas, imperdiet nibh et, fringilla orci. Donec ut pretium est. Vivamus feugiat facilisis iaculis. Pellentesque imperdiet ex felis, ac elementum dolor tincidunt eget. Cras molestie tellus id massa suscipit, hendrerit vulputate metus tincidunt. Aliquam erat enim, rhoncus in metus eu, consequat cursus ipsum.\"\n    txt5 = \"Integer at dictum justo. Vestibulum gravida nec diam a iaculis. Nullam non sollicitudin turpis, in mollis augue. In ut interdum magna. Ut tellus eros, blandit a ex a, suscipit varius tortor. Nulla pulvinar nibh vitae tristique tincidunt. Proin eu fringilla nibh. Mauris metus erat, laoreet sed eros ac, maximus finibus turpis. Sed tortor massa, congue nec lacus nec, fringilla fermentum purus. Vivamus eget pretium mi, vel ultricies orci. Phasellus semper viverra lorem. Phasellus velit nisl, scelerisque sit amet vulputate luctus, ullamcorper in velit. Fusce pellentesque elit ut leo tincidunt euismod. Integer nisl ante, dignissim id leo ut, interdum auctor ipsum. Fusce nunc ligula, imperdiet et nisl id, mollis imperdiet erat.\"\n    txt6 = \"Ut egestas vel nisi et sodales. Etiam arcu massa, viverra in pellentesque quis, molestie a lacus. Nulla suscipit mi luctus blandit dignissim. Proin ac turpis sit amet enim luctus venenatis quis et orci. Donec sed tortor ex. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In et turpis sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus et purus et ex interdum commodo at non velit. Nullam eget diam et felis accumsan gravida non vitae nulla. Morbi tellus mauris, tristique non vulputate eu, efficitur at tellus. Morbi in erat et purus euismod luctus vel vel erat. Fusce auctor augue felis, quis ornare justo mattis vel.\"\n    txt7 = \"Etiam quis eros eu urna consequat finibus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer suscipit, est ac blandit cursus, sem diam egestas massa, sit amet dignissim velit nibh in tortor. Fusce scelerisque feugiat ligula vitae pharetra. Fusce mattis placerat volutpat. Aliquam fermentum ligula mauris, sit amet tempor dui elementum nec. Nunc augue felis, egestas ut lacus vitae, placerat condimentum turpis. Nulla volutpat quis felis id tristique. Vivamus non odio et magna dapibus suscipit vitae et dui. Aenean magna lectus, congue eu commodo luctus, dapibus vel sem. Quisque nec diam consequat, luctus nisi vitae, rutrum mi. Nullam consectetur non risus eleifend dignissim. Vivamus sit amet sagittis libero. Integer nec ipsum fringilla, pulvinar ex vitae, aliquet est. Etiam sit amet est finibus, facilisis erat aliquet, egestas lectus.\"\n    txt8 = \"Donec placerat lacus egestas, aliquam enim vitae, congue ipsum. Praesent vitae eros cursus, pulvinar lectus et, ornare ipsum. Fusce luctus odio vitae hendrerit mollis. Morbi eu turpis vel elit tristique ullamcorper at sodales turpis. Curabitur in ante tincidunt, pellentesque lacus non, dignissim arcu. Mauris ut egestas mi, id elementum ipsum. Morbi justo nisi, laoreet nec lobortis nec, vulputate et justo. Quisque vel pretium quam. Cras consequat quam erat, eu finibus nisi pretium eu. Maecenas ac commodo lacus, non lobortis nunc.\"\n    txt9 = \"Vivamus et leo eget turpis scelerisque blandit at vel tellus. Vestibulum ac arcu turpis. Cras iaculis suscipit justo, at cursus ex condimentum non. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris eget tincidunt nisi, at imperdiet orci. Praesent bibendum bibendum nunc sit amet euismod. Nullam eu metus malesuada, faucibus purus eget, imperdiet justo. Donec in dui nunc. Sed vel sodales neque. Duis congue venenatis semper. Donec commodo in magna id tincidunt. Maecenas sollicitudin dignissim lorem id interdum.\"\n    txt10 = \"Aliquam eleifend mi arcu, sit amet convallis tellus condimentum sit amet. Duis lobortis nisl lectus, et convallis augue bibendum sit amet. Maecenas vestibulum porta lorem eu pharetra. Aliquam erat volutpat. Pellentesque volutpat nunc sit amet sem vestibulum commodo. In consequat diam id eros tincidunt dignissim. Maecenas aliquam, elit vitae consectetur facilisis, enim lectus facilisis dui, sed sodales leo dui et augue. Phasellus convallis lacinia pellentesque. Mauris et vulputate ligula. Quisque et velit diam. Pellentesque maximus, augue sit amet semper malesuada, urna velit ultrices lorem, et commodo tortor nibh non justo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.\"\n\n    sht1 = \"Hello World\"\n    sht2 = \"Buzz\"\n    sht3 = \"The quick brown fox jumps over the lazy dog.\"\n\n    kb = KeyBindings()\n\n    @kb.add('c-c')\n    def _(event):\n        \"Abort when Control-C has been pressed.\"\n        event.app.exit(exception=KeyboardInterrupt, style='class:aborting')\n\n    table = [\n        [TextArea(sht1), Label(txt2), TextArea(txt1)],\n        [Merge(TextArea(sht2), 2), TextArea(txt4)],\n        [Button(sht3), Merge(TextArea(txt6), 3)],\n        [Button(sht1), TextArea(txt8)],\n        [TextArea(sht2), TextArea(txt10)],\n    ]\n\n    # table = TextArea(txt2)\n\n    layout = Layout(\n        Box(\n            Table(\n                table=table,\n                column_width=D.exact(15),\n                column_widths=[None],\n                borders=DoubleBorder,\n            ),\n            padding=1,\n        ),\n    )\n    return Application(layout, key_bindings=kb)\n\n\nif __name__ == '__main__':\n    demo().run()\n"
  },
  {
    "path": "libs/androguard/ui/util.py",
    "content": "def clamp(range_min: int, range_max: int, value: int) -> int:\n    \"\"\"Return value if its is within range_min and range_max else return the nearest bound\"\"\"\n    return max(min(range_max, value), range_min)\n"
  },
  {
    "path": "libs/androguard/ui/widget/__init__.py",
    "content": ""
  },
  {
    "path": "libs/androguard/ui/widget/details.py",
    "content": "import json\nfrom typing import Optional\n\nfrom prompt_toolkit.filters import Condition\nfrom prompt_toolkit.formatted_text import FormattedText\nfrom prompt_toolkit.key_binding import KeyBindings\nfrom prompt_toolkit.layout import (\n    AnyContainer,\n    Dimension,\n    FormattedTextControl,\n    HSplit,\n    Window,\n)\nfrom prompt_toolkit.layout.dimension import AnyDimension\n\nfrom androguard.ui.data_types import DisplayTransaction\nfrom androguard.ui.selection import SelectionViewList\nfrom androguard.ui.widget.frame import SelectableFrame\n\n\nclass DetailsFrame:\n    def __init__(\n        self, transactions: SelectionViewList, max_lines: int\n    ) -> None:\n        self.transactions = transactions\n        self.max_lines = max_lines\n\n        self.transactions.on_selection_change += self.update_content\n\n        self.offset = 0\n\n        self.container = SelectableFrame(\n            title=\"Details\",\n            body=self.get_content,\n            width=Dimension(min=56, preferred=100, max=100),\n            height=Dimension(preferred=max_lines),\n        )\n\n    @property\n    def activated(self) -> bool:\n        return self.container.activated\n\n    @activated.setter\n    def activated(self, value: bool):\n        self.container.activated = value\n\n    def update_content(self, _, offset=0):\n        self.offset = offset\n        self.container.body = self.get_content()\n\n    def get_content(self) -> AnyContainer:\n        return HSplit(\n            children=[\n                Window(\n                    ignore_content_height=True,\n                    content=FormattedTextControl(\n                        text=self.get_current_details()\n                    ),\n                ),\n            ]\n        )\n\n    def get_current_details(self):\n        if self.transactions.selection_valid():\n            return (\n                json.dumps(self.transactions.selected().params, indent=2)\n                + '\\n'\n                + json.dumps(self.transactions.selected().ret_value, indent=2)\n            )\n        return ''\n\n    def __pt_container__(self) -> AnyContainer:\n        return self.container\n"
  },
  {
    "path": "libs/androguard/ui/widget/filters.py",
    "content": "from prompt_toolkit.key_binding import KeyBindings\nfrom prompt_toolkit.key_binding.bindings.focus import (\n    focus_next,\n    focus_previous,\n)\nfrom prompt_toolkit.layout import AnyContainer, HSplit, VerticalAlign, VSplit\nfrom prompt_toolkit.widgets import Box, CheckboxList, Frame, Label, TextArea\n\nfrom androguard.ui.filter import Filter\n\n\nclass TypeCheckboxlist(CheckboxList):\n\n    def __init__(self) -> None:\n        values = [\n            (\"call\", \"call\"),\n            (\"return\", \"return\"),\n            (\"oneway\", \"oneway\"),\n            (\"error\", \"error\"),\n            (\"unknown\", \"unknown\"),\n        ]\n        super().__init__(values)\n        self.show_scrollbar = False\n\n\nclass FiltersPanel:\n\n    def __init__(self) -> None:\n        self.visible = False\n\n        self.interface_textarea = TextArea(\n            multiline=False, style=\"class:dialogger.textarea\"\n        )\n        self.method_textarea = TextArea(\n            multiline=False, style=\"class:dialogger.textarea\"\n        )\n\n        self.type_filter_checkboxes = TypeCheckboxlist()\n\n        float_frame = Box(\n            padding_top=1,\n            padding_left=2,\n            padding_right=2,\n            body=HSplit(\n                padding=1,\n                width=50,\n                align=VerticalAlign.TOP,\n                children=[\n                    VSplit(\n                        children=[\n                            Label(\"Interface\", width=10),\n                            self.interface_textarea,\n                        ]\n                    ),\n                    VSplit(\n                        children=[\n                            Label(\"Method\", width=10),\n                            self.method_textarea,\n                        ]\n                    ),\n                    VSplit(\n                        children=[\n                            Label(\"Type\", width=10, dont_extend_height=False),\n                            self.type_filter_checkboxes,\n                        ]\n                    ),\n                ],\n            ),\n        )\n\n        kb = KeyBindings()\n\n        kb.add(\"tab\")(focus_next)\n        kb.add(\"s-tab\")(focus_previous)\n\n        self.container = Frame(\n            title=\"Filters\",\n            body=float_frame,\n            style=\"class:dialogger.background\",\n            modal=True,\n            key_bindings=kb,\n        )\n\n    def filter(self) -> Filter:\n\n        return Filter(\n            self.interface_textarea.text,\n            self.method_textarea.text,\n            self.type_filter_checkboxes.current_values,\n        )\n\n    def __pt_container__(self) -> AnyContainer:\n        return self.container\n"
  },
  {
    "path": "libs/androguard/ui/widget/frame.py",
    "content": "from functools import partial\nfrom typing import Optional\n\nfrom prompt_toolkit.filters import Condition\nfrom prompt_toolkit.formatted_text import AnyFormattedText, Template\nfrom prompt_toolkit.key_binding import KeyBindings\nfrom prompt_toolkit.layout import (\n    AnyContainer,\n    AnyDimension,\n    ConditionalContainer,\n    Container,\n    DynamicContainer,\n    HSplit,\n    VSplit,\n    Window,\n)\nfrom prompt_toolkit.widgets.base import Border, Label\n\n\nclass SelectableFrame:\n    \"\"\"\n    Draw a border around any container, optionally with a title text.\n\n    Changing the title and body of the frame is possible at runtime by\n    assigning to the `body` and `title` attributes of this class.\n\n    :param body: Another container object.\n    :param title: Text to be displayed in the top of the frame (can be formatted text).\n    :param style: Style string to be applied to this widget.\n    \"\"\"\n\n    def __init__(\n        self,\n        body: AnyContainer,\n        title: AnyFormattedText = \"\",\n        style: str = \"\",\n        width: AnyDimension = None,\n        height: AnyDimension = None,\n        key_bindings: Optional[KeyBindings] = None,\n        modal: bool = False,\n        activated: bool = False,\n    ) -> None:\n        self.title = title\n        self.body = body\n        self.activated = activated\n\n        def get_style() -> str:\n            if self.activated:\n                return \"class:frame.border.selected\"\n            else:\n                return \"class:frame.border\"\n\n        fill = partial(Window, style=get_style)\n        style = \"class:frame \" + style\n\n        top_row_with_title = VSplit(\n            [\n                fill(width=1, height=1, char=Border.TOP_LEFT),\n                fill(char=Border.HORIZONTAL),\n                fill(width=1, height=1, char=\"|\"),\n                # Notice: we use `Template` here, because `self.title` can be an\n                # `HTML` object for instance.\n                Label(\n                    lambda: Template(\" {} \").format(self.title),\n                    style=\"class:frame.label\",\n                    dont_extend_width=True,\n                ),\n                fill(width=1, height=1, char=\"|\"),\n                fill(char=Border.HORIZONTAL),\n                fill(width=1, height=1, char=Border.TOP_RIGHT),\n            ],\n            height=1,\n        )\n\n        top_row_without_title = VSplit(\n            [\n                fill(width=1, height=1, char=Border.TOP_LEFT),\n                fill(char=Border.HORIZONTAL),\n                fill(width=1, height=1, char=Border.TOP_RIGHT),\n            ],\n            height=1,\n        )\n\n        @Condition\n        def has_title() -> bool:\n            return bool(self.title)\n\n        self.container = HSplit(\n            [\n                ConditionalContainer(\n                    content=top_row_with_title, filter=has_title\n                ),\n                ConditionalContainer(\n                    content=top_row_without_title, filter=~has_title\n                ),\n                VSplit(\n                    [\n                        fill(width=1, char=Border.VERTICAL),\n                        DynamicContainer(self.body),\n                        fill(width=1, char=Border.VERTICAL),\n                        # Padding is required to make sure that if the content is\n                        # too small, the right frame border is still aligned.\n                    ],\n                    padding=0,\n                ),\n                VSplit(\n                    [\n                        fill(width=1, height=1, char=Border.BOTTOM_LEFT),\n                        fill(char=Border.HORIZONTAL),\n                        fill(width=1, height=1, char=Border.BOTTOM_RIGHT),\n                    ],\n                    # specifying height here will increase the rendering speed.\n                    height=1,\n                ),\n            ],\n            width=width,\n            height=height,\n            style=style,\n            key_bindings=key_bindings,\n            modal=modal,\n        )\n\n    def __pt_container__(self) -> Container:\n        return self.container\n"
  },
  {
    "path": "libs/androguard/ui/widget/help.py",
    "content": "from prompt_toolkit.layout import AnyContainer, HSplit\nfrom prompt_toolkit.widgets import Box, Frame, Label\n\n\nclass HelpPanel:\n\n    def __init__(self) -> None:\n        self.visible = False\n\n        float_frame = Box(\n            padding_top=1,\n            padding_left=2,\n            padding_right=2,\n            body=HSplit(\n                children=[\n                    Label(\"up             Move up\"),\n                    Label(\"down           Move down\"),\n                    Label(\"shift + up     Page up\"),\n                    Label(\"shift + down   Page down\"),\n                    Label(\"home           Go to top\"),\n                    Label(\"end            Go to bottom\"),\n                    Label(\"tab            Next pane\"),\n                    Label(\"shift + tab    Previous pane\"),\n                    Label(\"ctrl + c       Copy pane to clipboard\"),\n                    Label(\"f              Open filter options\"),\n                    Label(\"h              Help\"),\n                    Label(\"q              Quit\"),\n                ]\n            ),\n        )\n\n        self.container = Frame(\n            title=\"Help\",\n            body=float_frame,\n            style=\"class:dialogger.background\",\n            modal=True,\n        )\n\n    def __pt_container__(self) -> AnyContainer:\n        return self.container\n"
  },
  {
    "path": "libs/androguard/ui/widget/toolbar.py",
    "content": "from typing import Sequence\n\nfrom prompt_toolkit.formatted_text import AnyFormattedText, FormattedText\nfrom prompt_toolkit.layout.containers import AnyContainer, DynamicContainer\nfrom prompt_toolkit.widgets import FormattedTextToolbar\n\nfrom androguard.ui.widget.filters import FiltersPanel\n\n\nclass StatusToolbar:\n\n    def __init__(self, transactions: Sequence, filters: FiltersPanel) -> None:\n        self.transactions = transactions\n        self.filters = filters\n        self.container = DynamicContainer(self.toolbar_container)\n\n    def toolbar_container(self) -> AnyContainer:\n        return FormattedTextToolbar(\n            text=self.toolbar_text(),\n            style=\"class:toolbar\",\n        )\n\n    def toolbar_text(self) -> AnyFormattedText:\n        return FormattedText(\n            [\n                (\n                    \"class:toolbar.text\",\n                    f\"Transactions: {len(self.transactions)}, Filter: {self.filters.filter()}\",\n                )\n            ]\n        )\n\n    def __pt_container__(self) -> AnyContainer:\n        return self.container\n"
  },
  {
    "path": "libs/androguard/ui/widget/transactions.py",
    "content": "import csv\nimport io\n\nfrom prompt_toolkit.filters import Condition\nfrom prompt_toolkit.key_binding import KeyBindings\nfrom prompt_toolkit.layout import AnyContainer\nfrom prompt_toolkit.layout.dimension import AnyDimension, Dimension\n\nfrom androguard.ui import table\nfrom androguard.ui.selection import SelectionViewList\nfrom androguard.ui.widget.frame import SelectableFrame\n\n# import pyperclip\n\n\n\n\nclass TransactionFrame:\n\n    def __init__(\n        self, transactions: SelectionViewList, height: AnyDimension = None\n    ) -> None:\n        self.transactions = transactions\n        self.transactions.on_update_event += self.update_table\n\n        self.headings = [\n            table.Label(\"\"),\n            table.Label(\"#\"),\n            table.Label(\"From\"),\n            table.Label(\"Method\"),\n        ]\n\n        self.table = table.Table(\n            table=[self.headings],\n            # height=height,\n            column_width=Dimension.exact(10),\n            column_widths=[\n                Dimension.exact(1),\n                Dimension(min=2, preferred=4, max=4),\n                Dimension(min=20, preferred=40),\n                Dimension(min=20, preferred=30),\n            ],\n            borders=table.EmptyBorder,\n        )\n\n        self.pad_table()\n\n        self.container = SelectableFrame(\n            title=\"Transactions\",\n            body=self.get_content,\n        )\n\n    def resize(self, height):\n        # Subtract one for the header row\n        height -= 1\n        self.transactions.resize_view(height)\n\n    def get_content(self):\n        return self.table\n\n    def update_table(self, _):\n        self.table.children.clear()\n        self.table.add_row(\n            self.headings, \"class:transactions.heading\", id(self.headings)\n        )\n        for i in range(\n            self.transactions.view.start, self.transactions.view.end\n        ):\n            row, style = self._to_row(self.transactions[i])\n            self.table.add_row(\n                row,\n                (\n                    f\"{style} reverse\"\n                    if i == self.transactions.selection\n                    else style\n                ),\n                (id(self.transactions[i]), i == self.transactions.selection),\n            )\n        self.pad_table()\n\n    def pad_table(self):\n        padding = (\n            self.transactions.max_view_size - self.transactions.view.size()\n        )\n        empty_row = [\n            table.Label(\"\"),\n            table.Label(\"\"),\n            table.Label(\"\"),\n            table.Label(\"\"),\n            table.Label(\"\"),\n        ]\n        for _ in range(padding):\n            self.table.add_row(\n                empty_row, \"class:transaction.default\", id(empty_row)\n            )\n\n    def key_bindings(self) -> KeyBindings:\n        kb = KeyBindings()\n\n        @kb.add('up', filter=Condition(lambda: self.activated))\n        def _(event):\n            self.transactions.move_selection(-1)\n\n        @kb.add('down', filter=Condition(lambda: self.activated))\n        def _(event):\n            self.transactions.move_selection(1)\n\n        @kb.add('s-up', filter=Condition(lambda: self.activated))\n        def _(event):\n            self.transactions.move_selection(-self.transactions.max_view_size)\n\n        @kb.add('s-down', filter=Condition(lambda: self.activated))\n        def _(event):\n            self.transactions.move_selection(self.transactions.max_view_size)\n\n        @kb.add('home', filter=Condition(lambda: self.activated))\n        def _(event):\n            self.transactions.move_selection(-self.transactions.selection)\n\n        @kb.add('end', filter=Condition(lambda: self.activated))\n        def _(event):\n            self.transactions.move_selection(\n                len(self.transactions) - self.transactions.selection\n            )\n\n        return kb\n\n    @property\n    def activated(self):\n        return self.container.activated\n\n    # Define a \"name\" setter\n    @activated.setter\n    def activated(self, value):\n        self.container.activated = value\n\n    # def copy_to_clipboard(self):\n    #    if self.transactions.selection_valid():\n    #        output = io.StringIO()\n    #        writer = csv.writer(output, quoting=csv.QUOTE_NONE)\n    #        for t in self.transactions.data:\n    #            writer.writerow([\n    #                t.interface,\n    #                str(t.method_number),\n    #                t.method,\n    #                hex(len(t.raw_data))\n    #            ])\n    #        pyperclip.copy(output.getvalue())\n\n    def _to_row(self, transaction):\n        # TODO: Cache the rows so we don't need to recreate them.\n        return [\n            table.Label(transaction.direction_indicator),\n            table.Label(str(transaction.index)),\n            table.Label(transaction.from_method),\n            table.Label(transaction.to_method),\n        ], transaction.style()\n\n    def __pt_container__(self) -> AnyContainer:\n        return self.container\n"
  },
  {
    "path": "libs/androguard/util.py",
    "content": "import binascii\nimport hashlib\nimport sys\nfrom typing import BinaryIO, Union\n\nfrom asn1crypto import keys, x509\n\n#  External dependencies\n# import asn1crypto\nfrom asn1crypto.x509 import Name\nfrom loguru import logger\n\n\nclass MyFilter:\n    def __init__(self, level: str) -> None:\n        self.level = level\n\n    def __call__(self, record):\n        levelno = logger.level(self.level).no\n        return record[\"level\"].no >= levelno\n\ndef set_log(level:str) -> None:\n    \"\"\"\n    Sets the log for loguru based on the level being passed.\n    The possible string values are:\n     \n    * `TRACE`\n    * `DEBUG`\n    * `INFO`\n    * `SUCCESS`\n    * `WARNING`\n    * `ERROR`\n    * `CRITICAL`\n    \n    :param level: the log level string\n    \"\"\"\n    logger.remove(0)\n    my_filter = MyFilter(level)\n    logger.add(sys.stderr, filter=my_filter, level=0)\n\n\n# Stuff that might be useful\n\n\ndef read_at(buff: BinaryIO, offset: int, size: int = -1) -> bytes:\n    idx = buff.tell()\n    buff.seek(offset)\n    d = buff.read(size)\n    buff.seek(idx)\n    return d\n\n\ndef readFile(filename: str, binary: bool = True) -> bytes:\n    \"\"\"\n    Open and read a file\n    :param filename: filename to open and read\n    :param binary: `True` if the file should be read as binary\n    :return: bytes if binary is `True`, str otherwise\n    \"\"\"\n    with open(filename, 'rb' if binary else 'r') as f:\n        return f.read()\n\n\ndef get_certificate_name_string(\n    name: Union[dict, Name], short: bool = False, delimiter: str = ', '\n) -> str:\n    \"\"\"\n    Format the Name type of a X509 Certificate in a human readable form.\n\n    :param name: Name object to return the DN from\n    :param short: Use short form (default: False)\n    :param delimiter: Delimiter string or character between two parts (default: ', ')\n\n    :returns: the name string\n    \"\"\"\n    if isinstance(name, Name):  # asn1crypto.x509.Name):\n        name = name.native\n\n    # For the shortform, we have a lookup table\n    # See RFC4514 for more details\n    _ = {\n        'business_category': (\"businessCategory\", \"businessCategory\"),\n        'serial_number': (\"serialNumber\", \"serialNumber\"),\n        'country_name': (\"C\", \"countryName\"),\n        'postal_code': (\"postalCode\", \"postalCode\"),\n        'state_or_province_name': (\"ST\", \"stateOrProvinceName\"),\n        'locality_name': (\"L\", \"localityName\"),\n        'street_address': (\"street\", \"streetAddress\"),\n        'organization_name': (\"O\", \"organizationName\"),\n        'organizational_unit_name': (\"OU\", \"organizationalUnitName\"),\n        'title': (\"title\", \"title\"),\n        'common_name': (\"CN\", \"commonName\"),\n        'initials': (\"initials\", \"initials\"),\n        'generation_qualifier': (\"generationQualifier\", \"generationQualifier\"),\n        'surname': (\"SN\", \"surname\"),\n        'given_name': (\"GN\", \"givenName\"),\n        'name': (\"name\", \"name\"),\n        'pseudonym': (\"pseudonym\", \"pseudonym\"),\n        'dn_qualifier': (\"dnQualifier\", \"dnQualifier\"),\n        'telephone_number': (\"telephoneNumber\", \"telephoneNumber\"),\n        'email_address': (\"E\", \"emailAddress\"),\n        'domain_component': (\"DC\", \"domainComponent\"),\n        'name_distinguisher': (\"nameDistinguisher\", \"nameDistinguisher\"),\n        'organization_identifier': (\n            \"organizationIdentifier\",\n            \"organizationIdentifier\",\n        ),\n    }\n    return delimiter.join(\n        [\n            \"{}={}\".format(\n                _.get(attr, (attr, attr))[0 if short else 1], name[attr]\n            )\n            for attr in name\n        ]\n    )\n\n\ndef parse_public(data):\n    from asn1crypto import keys, pem, x509\n\n    \"\"\"\n    Loads a public key from a DER or PEM-formatted input.\n    Supports RSA, DSA, EC public keys, and X.509 certificates.\n\n    :param data: A byte string of the public key or certificate\n    :raises ValueError: If the input data is not a known format\n    :return: A keys.PublicKeyInfo object containing the parsed public key\n    \"\"\"\n\n    # Check if the data is in PEM format (starts with \"-----\")\n    if pem.detect(data):\n        type_name, _, der_bytes = pem.unarmor(data)\n        if type_name in ['PRIVATE KEY', 'RSA PRIVATE KEY']:\n            raise ValueError(\n                \"The data specified appears to be a private key, not a public key.\"\n            )\n    else:\n        # If not PEM, assume it's DER-encoded\n        der_bytes = data\n\n    # Try to parse the data as PublicKeyInfo (standard public key structure)\n    try:\n        public_key_info = keys.PublicKeyInfo.load(der_bytes)\n        public_key_info.native  # Fully parse the object (asn1crypto is lazy)\n        return public_key_info\n    except ValueError:\n        pass  # Not a PublicKeyInfo structure\n\n    # Try to parse the data as an X.509 certificate\n    try:\n        certificate = x509.Certificate.load(der_bytes)\n        public_key_info = certificate['tbs_certificate'][\n            'subject_public_key_info'\n        ]\n        public_key_info.native  # Fully parse the object\n        return public_key_info\n    except ValueError:\n        pass  # Not a certificate\n\n    # Try to parse the data as RSAPublicKey\n    try:\n        rsa_public_key = keys.RSAPublicKey.load(der_bytes)\n        rsa_public_key.native  # Fully parse the object\n        # Wrap the RSAPublicKey in PublicKeyInfo\n        return keys.PublicKeyInfo.wrap(rsa_public_key, 'rsa')\n    except ValueError:\n        pass  # Not an RSAPublicKey structure\n\n    raise ValueError(\n        \"The data specified does not appear to be a known public key or certificate format.\"\n    )\n\n\ndef calculate_fingerprint(key_object):\n    \"\"\"\n    Calculates a SHA-256 fingerprint of the public key based on its components.\n\n    :param key_object: A keys.PublicKeyInfo object containing the parsed public key\n    :return: The fingerprint of the public key as a byte string\n    \"\"\"\n\n    to_hash = None\n\n    # RSA Public Key\n    if key_object.algorithm == 'rsa':\n        key = key_object['public_key'].parsed\n        # Prepare string with modulus and public exponent\n        to_hash = '%d:%d' % (\n            key['modulus'].native,\n            key['public_exponent'].native,\n        )\n\n    # DSA Public Key\n    elif key_object.algorithm == 'dsa':\n        key = key_object['public_key'].parsed\n        params = key_object['algorithm']['parameters']\n        # Prepare string with p, q, g, and public key\n        to_hash = '%d:%d:%d:%d' % (\n            params['p'].native,\n            params['q'].native,\n            params['g'].native,\n            key.native,\n        )\n\n    # EC Public Key\n    elif key_object.algorithm == 'ec':\n        public_key = key_object['public_key'].native\n        # Prepare byte string with curve name and public key\n        to_hash = '%s:' % key_object.curve[1]\n        to_hash = to_hash.encode('utf-8') + public_key\n\n    # Ensure to_hash is encoded as bytes if it's a string\n    if isinstance(to_hash, str):\n        to_hash = to_hash.encode('utf-8')\n\n    # Return the SHA-256 hash of the formatted key data\n    return hashlib.sha256(to_hash).digest()\n"
  },
  {
    "path": "libs/apkInspector/__init__.py",
    "content": "__version__ = \"1.3.6\"\n"
  },
  {
    "path": "libs/apkInspector/axml.py",
    "content": "import io\nimport logging\nimport struct\nimport random\n\nfrom .extract import extract_file_based_on_header_info\nfrom .headers import ZipEntry\nfrom .helpers import escape_xml_entities\n\nlogging.basicConfig(\n    level=logging.DEBUG,\n    format='%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d -> %(funcName)s : %(message)s'\n)\n\n\nclass ResChunkHeader:\n    \"\"\"\n    Chunk header used throughout the axml.\n    This header is essential as it contains information about the header size but also the total size of the chunk\n    the header belongs to.\n    \"\"\"\n\n    def __init__(self, header_type, header_size, total_size, data):\n        self.type = header_type\n        self.header_size = header_size\n        self.total_size = total_size\n        self.data = data\n\n    @classmethod\n    def parse(cls, file):\n        \"\"\"\n        Read the header type (2 bytes), header size (2 bytes), and entry size (4 bytes).\n\n        :param file: the xml file e.g. with open('/path/AndroidManifest.xml', 'rb') as file\n        :type file: bytesIO\n        :return: Returns an instance of itself\n        :rtype: ResChunkHeader\n        \"\"\"\n        header_data = file.read(8)\n        if len(header_data) < 8:\n            # End of file\n            return None\n        header_type, header_size, total_size = struct.unpack('<HHI', header_data)\n        return cls(header_type, header_size, total_size, header_data)\n\n\nclass ResStringPoolHeader:\n    \"\"\"\n    It reads the string pool header which contains information about the StringPool.\n    \"\"\"\n\n    def __init__(self, header: ResChunkHeader, string_count, style_count, flags, strings_start,\n                 styles_start, data):\n        self.header = header\n        self.string_count = string_count\n        self.style_count = style_count\n        self.flags = flags\n        self.strings_start = strings_start\n        self.styles_start = styles_start\n        self.data = data\n\n    @classmethod\n    def parse(cls, file):\n        \"\"\"\n        Read and parse ResStringPoolHeader from the file.\n\n        :param file: the xml file right after the header has been read.\n        :type file: bytesIO\n        :return: Returns an instance of itself\n        :rtype: ResStringPoolHeader\n        \"\"\"\n        header = ResChunkHeader.parse(file)\n        string_pool_header_data = file.read(20)\n        string_count, style_count, flags, strings_start, styles_start = struct.unpack('<IIIII', string_pool_header_data)\n        return cls(header, string_count, style_count, flags, strings_start,\n                   styles_start, string_pool_header_data)\n\n\nclass StringPoolType:\n    \"\"\"\n    The stringPool class which is a composition of the ResStringPoolHeader\n    along with the string offsets and the string data.\n    \"\"\"\n\n    def __init__(self, string_pool_header: ResStringPoolHeader, string_offsets, strings, string_pool_data):\n        self.str_header = string_pool_header\n        self.string_offsets = string_offsets\n        self.string_list = strings\n        self.data = string_pool_data\n\n    @classmethod\n    def read_string_offsets(cls, file, num_of_strings, end_absolute_offset):\n        \"\"\"\n        Reads the offset available for each string. Requires to know the number of strings available beforehand.\n\n        :param file: the xml file right after the string pool header has been read.\n        :type file: bytesIO\n        :param num_of_strings: the calculated number of strings available\n        :type num_of_strings: int\n        :param end_absolute_offset: the absolute value of the offset where the offsets finish.\n        :type end_absolute_offset: int\n        :return: Returns a list of strings offsets.\n        :rtype: list\n        \"\"\"\n        string_offsets = []\n        for i in range(0, num_of_strings):\n            string_offsets.append(struct.unpack('<I', file.read(4))[0])\n        # sanity check as after reading the last string we should be at the end offset as calculated\n        if file.tell() != end_absolute_offset:\n            logging.warning(\n                f\"Current file read:{file.tell()} is not as expected to the start of the stringData:{end_absolute_offset})\")\n        return string_offsets\n\n    @classmethod\n    def read_string_offset(cls, file, position):\n        try:\n            file.seek(position * 4)\n            string_offset = struct.unpack('<I', file.read(4))[0]\n            return string_offset\n        except Exception as e:\n            logging.error(f\"String offset at position {position} failed to be read: {e}\")\n            return None\n\n    @classmethod\n    def decode_stringpool_mixed_string(cls, file, is_utf8, end_stringpool_offset):\n        \"\"\"\n        Handling the different encoding possibilities that can be met.\n\n        :param file: the xml file at the offset where the string is to be read\n        :type file: bytesIO\n        :param is_utf8: boolean to check if a utf8 string is expected\n        :type is_utf8: bool\n        :param end_stringpool_offset:\n        :type end_stringpool_offset: int\n        :return: Returns the decoded string\n        :rtype: str\n        \"\"\"\n        if not is_utf8:\n            # Handle UTF-16 encoded strings\n            u16len = struct.unpack('<H', file.read(2))[0]\n            if u16len & 0x8000 == 0:\n                # Regular UTF-16 string\n                content = file.read(u16len * 2).decode('utf-16le')\n            else:\n                # UTF-16 string with fixup\n                u16len_fix = struct.unpack('<H', file.read(2))[0]\n                real_length = ((u16len & 0x7FFF) << 16) | u16len_fix\n                if real_length > end_stringpool_offset:\n                    return \"\"\n                # TODO:a check for non null-terminated strings should be here as well\n                content = file.read(real_length * 2).decode('utf-16le')\n        else:\n            # Handle UTF-8 encoded strings\n            u16len = struct.unpack('B', file.read(1))[0]\n            file.read(1)\n            u8len = u16len\n            content = file.read(u8len).decode('utf-8', errors='replace')\n            # TODO: fixup is needed here as well, like for the utf16 case\n\n        return content\n\n    @classmethod\n    def read_strings(cls, file, string_offsets, strings_start, is_utf8):\n        \"\"\"\n        Gets the actual strings based on the offsets retrieved from read_string_offsets().\n\n        :param file: the xml file right after the string pool offsets have been read\n        :type file: bytesIO\n        :param string_offsets: see -> read_string_offsets()\n        :type string_offsets: list\n        :param strings_start: the offset at which the string data starts\n        :type strings_start: int\n        :param is_utf8: boolean to check if a utf8 string is expected\n        :type is_utf8: bool\n        :return: Returns a list of the string data\n        :rtype: list\n        \"\"\"\n        strings = []\n        for offset in string_offsets:\n            # Calculate the absolute offset within the string data +8 for the file header\n            absolute_offset = strings_start + offset + 8  # TODO: update this to get the file header size\n            # Move the file pointer to the start of the string\n            file.seek(absolute_offset)\n            # Read the length of the string (in bytes)\n            content = cls.decode_stringpool_mixed_string(file, is_utf8, strings_start + string_offsets[-1])\n            strings.append(content)\n        return strings\n\n    @classmethod\n    def read_string(cls, file, string_offset, strings_start, is_utf8, end_stringpool_offset):\n        \"\"\"\n        Read a string from the string pool when the offset of it is known already.\n\n        :param file: the string pool data parsed as bytes\n        :type file: io.bytesIO\n        :param string_offset: the offset at which the string is located in the string pool\n        :type string_offset: int\n        :param strings_start: the offset at which the string data starts\n        :type strings_start: int\n        :param is_utf8: boolean to check if a utf8 string is expected\n        :type is_utf8: bool\n        :param end_stringpool_offset: the offset at which the string pool ends\n        :type end_stringpool_offset: int\n        :return: Returns the string or None\n        :rtype: str or None\n        \"\"\"\n        absolute_offset = strings_start + string_offset - 28\n        if file.getbuffer().nbytes < absolute_offset:\n            return None\n        file.seek(absolute_offset)\n        string = cls.decode_stringpool_mixed_string(file, is_utf8, end_stringpool_offset)\n        return string\n\n    @classmethod\n    def get_string_from_pool(cls, position, string_pool_data, end_stringpool_offset, strings_start, is_utf8):\n        \"\"\"\n        Retrieve a single string from the String Pool, given its position. It first gets the correct offset of the\n        string and then reads the string.\n\n        :param position: The position of the string to be retrieved\n        :type position: int\n        :param string_pool_data: the string pool data parsed as bytes\n        :type string_pool_data: io.BytesIO\n        :param end_stringpool_offset: the offset at which the string pool ends\n        :type end_stringpool_offset: int\n        :param strings_start: the offset at which the string data starts\n        :type strings_start: int\n        :param is_utf8: boolean to check if a utf8 string is expected\n        :type is_utf8: bool\n        :return: Returns the string or None\n        :rtype: str or None\n        \"\"\"\n        try:\n            string_offset = cls.read_string_offset(string_pool_data, position)\n            if string_offset is None:\n                return None\n            return cls.read_string(string_pool_data, string_offset, strings_start, is_utf8, end_stringpool_offset)\n        except Exception as e:\n            logging.exception(f\"Exception while retrieving string from pool: {e}\")\n            return None\n\n    @classmethod\n    def parse_lite(cls, file):\n        \"\"\"\n        A 'lite' parser that gets the header and then reads the rest of the chunk as a blob of bytes.\n\n        :param file: the AndroidManifest.xml file\n        :type file: bytesIO\n        :return: returns the header and the chunk data\n        :rtype: tuple(ResStringPoolHeader, bytes)\n        \"\"\"\n        ResStringPool_header = ResStringPoolHeader.parse(file)\n        string_pool_data = read_remaining(file, ResStringPool_header.header)\n        while True:  # read any null bytes remaining\n            cur_pos = file.tell()\n            if file.read(2) == b'\\x80\\x01':\n                file.seek(cur_pos)\n                break\n            file.seek(cur_pos)\n            file.read(1)\n        return ResStringPool_header, string_pool_data\n\n    @classmethod\n    def parse(cls, file):\n        \"\"\"\n        Parse the string pool to acquire the strings used within the axml.\n\n        :param file: the xml file right after the file header is read\n        :type file: bytesIO\n        :return: Returns an instance of itself\n        :rtype: StringPoolType\n        \"\"\"\n        string_pool_header = ResStringPoolHeader.parse(file)\n        string_pool_start = file.tell()\n        size_of_strings_offsets = string_pool_header.strings_start - 28\n        # it should be divisible by 4, as 4 bytes are per offset, so we can get accurately the # of strings\n        num_of_strings = size_of_strings_offsets // 4\n        if not (size_of_strings_offsets / 4).is_integer():\n            logging.warning(f\"The number of strings in the string pool is not a integer number.\")\n        string_offsets = cls.read_string_offsets(file, num_of_strings, string_pool_header.strings_start + 8)\n        is_utf8 = bool(string_pool_header.flags & (1 << 8))\n        string_list = cls.read_strings(file, string_offsets, string_pool_header.strings_start, is_utf8)\n        while True:  # read any null bytes remaining\n            cur_pos = file.tell()\n            if file.read(2) == b'\\x80\\x01':\n                file.seek(cur_pos)\n                break\n            file.seek(cur_pos)\n            file.read(1)\n            if file.getbuffer().nbytes < file.tell() + 8:\n                raise ValueError(\"Resource Map header was not detected.\")\n        string_pool_end = file.tell()\n        file.seek(string_pool_start)\n        string_pool_data = file.read(string_pool_end - string_pool_start)\n        return cls(\n            string_pool_header,\n            string_offsets,\n            string_list,\n            string_pool_data\n        )\n\n\nclass XmlResourceMapType:\n    \"\"\"\n    Resource map class, with the header and the resource IDs.\n    \"\"\"\n\n    def __init__(self, header, resids, resids_data):\n        self.header = header\n        self.resids = resids\n        self.data = resids_data\n\n    @classmethod\n    def parse_lite(cls, file):\n        \"\"\"\n        A 'lite' parser that gets the header and then reads the rest of the chunk as a blob of bytes.\n\n        :param file: the AndroidManifest.xml file\n        :type file: bytesIO\n        :return: returns the header and the chunk data\n        :rtype: tuple(ResChunkHeader, bytes)\n        \"\"\"\n        resource_map_header = ResChunkHeader.parse(file)\n        resource_map_data = read_remaining(file, resource_map_header)\n        return resource_map_header, resource_map_data\n\n    @classmethod\n    def parse(cls, file):\n        \"\"\"\n        Parse the resource map and get the resource IDs.\n\n        :param file: the xml file right after the string pool is read\n        :type file: bytesIO\n        :return: Returns an instance of itself\n        :rtype: XmlResourceMapType\n        \"\"\"\n        header = ResChunkHeader.parse(file)\n        num_resids = (header.total_size - header.header_size) // 4\n        resids_data = file.read(num_resids * 4)\n        chunks = [resids_data[i:i + 4] for i in range(0, len(resids_data), 4)]\n        resids = [struct.unpack('<I', chunk)[0] for chunk in chunks]\n\n        return cls(header, resids, resids_data)\n\n\nclass ResXMLHeader:\n    \"\"\"\n    Chunk header used as a header for the elements.\n    This header represents the header for the rest of the elements besides the initial header, the string pool and\n    the resource map.\n    \"\"\"\n\n    def __init__(self, header: ResChunkHeader, data):\n        self.header = header\n        # self.xml_header_line_number = header_line_number  # not useful\n        # self.xml_header_comment = header_comment          # not useful\n        self.data = data\n\n    @classmethod\n    def parse(cls, file):\n        \"\"\"\n        Supporting header for the elements besides the initial header, the string pool and\n        the resource map.\n\n        :param file: the xml file e.g. with open('/path/AndroidManifest.xml', 'rb') as file\n        :type file: bytesIO\n        :return: Returns an instance of itself\n        :rtype: ResXMLHeader\n        \"\"\"\n        header = ResChunkHeader.parse(file)\n        header_data = b''\n        if header.header_size > 8:\n            header_data = file.read(header.header_size - 8)\n        return cls(header, header_data)\n\n\nclass XmlStartNamespace:\n    \"\"\"\n    The actual start of the xml, after this the elements of the xml will be found.\n    \"\"\"\n\n    def __init__(self, header: ResXMLHeader, ext, ext_data):\n        self.header = header\n        self.ext = ext  # [prefix_index, uri_index]\n        self.data = ext_data\n\n    @classmethod\n    def parse(cls, file, header_t: ResXMLHeader):\n        \"\"\"\n        Parse the starting element of a Namespace\n        :param file: the axml already pointing at the right offset\n        :type file: bytesIO\n        :param header_t: the already read header of the chunk\n        :type header_t: ResXMLHeader\n        :return: an instance of itself\n        :rtype: XmlStartNamespace\n        \"\"\"\n        num_exts = (header_t.header.total_size - header_t.header.header_size) // 4\n        ext_data = file.read(num_exts * 4)\n        chunks = [ext_data[i:i + 4] for i in range(0, len(ext_data), 4)]\n        ext = [struct.unpack('<I', chunk)[0] for chunk in chunks]\n        return cls(header_t, ext, ext_data)\n\n\nclass XmlEndNamespace:\n    \"\"\"\n    Class to represent the end of a Namespace.\n    \"\"\"\n\n    def __init__(self, header: ResXMLHeader, prefix_namespace_index, uri_index, end_namespace_data):\n        self.header = header\n        self.prefix_namespace_index = prefix_namespace_index\n        self.uri_index = uri_index\n        self.data = end_namespace_data\n\n    @classmethod\n    def parse(cls, file, header_t: ResXMLHeader):\n        \"\"\"\n        Parse the ending element of a Namespace.\n\n        :param file: the axml already pointing at the right offset\n        :type file: bytesIO\n        :param header_t: the already read header of the chunk\n        :type header_t: ResXMLHeader\n        :return: an instance of itself\n        :rtype: XmlEndNamespace\n        \"\"\"\n        end_namespace_data = file.read(8)\n        prefix_namespace_index, uri_index = struct.unpack('<II', end_namespace_data)\n        return cls(header_t, prefix_namespace_index, uri_index, end_namespace_data)\n\n\nclass XmlAttributeElement:\n    \"\"\"\n    The attributes within each element within the axml, should be described by this class.\n    \"\"\"\n\n    def __init__(self, full_namespace_index, name_index, raw_value_index, typed_value_size, typed_value_res0,\n                 typed_value_datatype, typed_value_data):\n        self.full_namespace_index = full_namespace_index\n        self.name_index = name_index\n        self.raw_value_index = raw_value_index\n        self.typed_value_size = typed_value_size\n        self.typed_value_res0 = typed_value_res0\n        self.typed_value_datatype = typed_value_datatype\n        self.typed_value_data = typed_value_data\n\n    @classmethod\n    def parse(cls, file, attr_count, attr_size):\n        \"\"\"\n        The method is responsible to parse and retrieve the attributes of an element based on the attribute count.\n        There are many datatypes that are not read according to the specification (at least for now), but that does\n        not affect the main goal of the tool, therefore it is not a priority. For the presentation of the values\n        another check is occurring in the process_attributes method.\n\n        :param file: the axml already pointing at the right offset\n        :type file: BytesIO\n        :param attr_count: The attribute count value part of XmlStartElement.attrext\n        :type attr_count: int\n        :param attr_size: The attribute size value part of XmlStartElement\n        :type attr_size: int\n        :return: List of attributes\n        :rtype: list\n        \"\"\"\n        attrs = []\n        for _ in range(0, attr_count):\n            tn = file.tell()\n            full_namespace_index = struct.unpack('<I', file.read(4))[0]\n            name_index = struct.unpack('<I', file.read(4))[0]\n            raw_value_index = struct.unpack('<I', file.read(4))[0]\n            typed_value_size = struct.unpack('<H', file.read(2))[0]\n            typed_value_res0 = struct.unpack('<B', file.read(1))[0]\n            typed_value_datatype = struct.unpack('<B', file.read(1))[0]\n            if typed_value_datatype == 4:\n                typed_value_data = round(struct.unpack('<f', file.read(4))[0], 1)\n            elif typed_value_datatype == 5:\n                typed_value_data = struct.unpack('<I', file.read(4))[0]\n            elif typed_value_datatype == 16:\n                typed_value_data = struct.unpack('<i', file.read(4))[0]\n            else:\n                typed_value_data = struct.unpack('<I', file.read(4))[0]\n            attrs.append(cls(full_namespace_index, name_index, raw_value_index, typed_value_size, typed_value_res0,\n                             typed_value_datatype, typed_value_data))\n            if file.tell() - tn != attr_size:  # check for any dummy data in between attributes\n                file.read(attr_size - (file.tell() - tn))\n        return attrs\n\n\nclass XmlStartElement:\n    \"\"\"\n    The starting point of an element, its attributes are described by XmlAttributeElement.\n    The attrext contains information about the element including the attribute count.\n    \"\"\"\n\n    def __init__(self, header: ResXMLHeader, attrext, attributes, start_element_data):\n        self.header = header\n        self.attrext = attrext\n        self.attributes = attributes\n        self.data = start_element_data\n\n    @classmethod\n    def parse(cls, file, header_t: ResXMLHeader):\n        \"\"\"\n        Parse the current element\n\n        :param file: the axml already pointing at the right offset\n        :type file: BytesIO\n        :param header_t: the already read header of the chunk\n        :type header_t: ResXMLHeader\n        :return: an instance of itself\n        :rtype: XmlStartElement\n        \"\"\"\n        attrext_data = file.read(20)\n        full_namespace_index, name_index, attr_start, attr_size, attr_count, id_index, class_index, style_index = struct.unpack(\n            '<IIHHHHHH', attrext_data)\n        attrext = [full_namespace_index, name_index, attr_start, attr_size, attr_count, id_index, class_index,\n                   style_index]\n        if attr_start != 20:\n            # Cover for dummy data between ResXMLTree_attrExt and the 1st ResXMLTree_attribute\n            gap_size = attr_start - 20\n            file.read(gap_size)\n        attributes_data = file.read(attr_size * attr_count)\n        attributes = XmlAttributeElement.parse(io.BytesIO(attributes_data), attr_count, attr_size)\n        return cls(header_t, attrext, attributes, (attrext_data + attributes_data))\n\n\nclass XmlEndElement:\n    \"\"\"\n    The end of an element, where the attrext contains the necessary information on which element it ends.\n    \"\"\"\n\n    def __init__(self, header: ResXMLHeader, attrext, attrext_data):\n        self.header = header\n        self.attrext = attrext\n        self.data = attrext_data\n\n    @classmethod\n    def parse(cls, file, header_t: ResXMLHeader):\n        \"\"\"\n        Parse the end of an element.\n\n        :param file: the axml already pointing at the right offset\n        :type file: bytesIO\n        :param header_t: the already read header of the chunk\n        :type header_t: ResXMLHeader\n        :return: an instance of itself\n        :rtype: XmlEndElement\n        \"\"\"\n        attrext_data = file.read(8)\n        full_namespace_index, name_index = struct.unpack('<II', attrext_data)\n        attrext = [full_namespace_index, name_index]\n        return cls(header_t, attrext, attrext_data)\n\n\nclass XmlcDataElement:\n    \"\"\"\n    A class to cover any CDATA section\n    https://developer.android.com/reference/org/w3c/dom/CDATASection\n    \"\"\"\n\n    def __init__(self, header: ResXMLHeader, data_index, typed_value_size, typed_value_res0,\n                 typed_value_datatype, typed_value_data, cdata_data):\n        self.header = header\n        self.data_index = data_index\n        self.typed_value_size = typed_value_size\n        self.typed_value_res0 = typed_value_res0\n        self.typed_value_datatype = typed_value_datatype\n        self.typed_value_data = typed_value_data\n        self.data = cdata_data\n\n    @classmethod\n    def parse(cls, file, header_t: ResXMLHeader):\n        \"\"\"\n        Parse the CDATA element.\n\n        :param file: the axml already pointing at the right offset\n        :type file: bytesIO\n        :param header_t: the already read header of the chunk\n        :type header_t: ResXMLHeader\n        :return: an instance of itself\n        :rtype: XmlcDataElement\n        \"\"\"\n        cdata_data = file.read(12)\n        data_index, typed_value_size, typed_value_res0, typed_value_datatype, typed_value_data = struct.unpack('<IHBBI', cdata_data)\n        return cls(header_t, data_index, typed_value_size, typed_value_res0,\n                   typed_value_datatype, typed_value_data, cdata_data)\n\n\nclass ManifestStruct:\n    \"\"\"\n    A class to represent the AndroidManifest as a composition\n    \"\"\"\n\n    def __init__(self, header: ResChunkHeader, string_pool: StringPoolType, resource_map: XmlResourceMapType, elements):\n        self.header = header\n        self.string_pool = string_pool\n        self.resource_map = resource_map\n        self.elements = elements\n\n    @staticmethod\n    def check_reached_element(file: io.BytesIO):\n        \"\"\"\n        Static method to check if the next element right after the resource map chunk has been reached.\n        Android tolerates unknown chunk types, so we only need to verify\n        there's enough data for a header and that the header size is plausible.\n        Reference: AOSP ResXMLTree::setTo()\n\n        :param file: The AndroidManifest file\n        :type file: io.BytesIO\n        \"\"\"\n        min_size = 8  # 2 bytes type, 2 bytes header_size, 4 bytes total_size\n        while True:\n            cur_pos = file.tell()\n            if file.getbuffer().nbytes < cur_pos + min_size:\n                break  # not enough data for a header\n            try:\n                _type, _header_size, _size = struct.unpack('<HHL', file.read(8))\n                file.seek(cur_pos)\n                if min_size <= _header_size <= _size:\n                    return True  # Valid header, regardless of type\n            except struct.error:\n                break\n            file.seek(cur_pos + 1)  # Try next byte if not valid\n\n    @staticmethod\n    def parse_next_header(file):\n        \"\"\"\n        Dispatcher method to parse the next available header. It takes into account to move on past the header if it\n        contains extra info besides the standard ones.\n        The dispatcher automatically picks the correct processing method for each chunk type.\n\n        :param file: the axml that will be processed\n        :type file: bytesIO\n        :raises NotImplementedError: The chunk type identified is not supported\n        :return: Dispatches to the appropriate processing method for each chunk type.\n        \"\"\"\n        chunk_header_total = ResXMLHeader.parse(file)\n        chunk_header = chunk_header_total.header\n        if chunk_header is None:  # end of file\n            return None\n        chunk_type = hex(chunk_header.type)\n        handler = chunk_type_handlers.get(chunk_type, chunk_type_handlers['default'])\n        return handler(file, chunk_header_total)\n\n    @staticmethod\n    def process_elements(file, num_of_elements=None):\n        \"\"\"\n        It starts processing the remaining chunks **after** the resource map chunk.\n\n        :param file: the axml that will be processed\n        :type file: BytesIO\n        :param num_of_elements: how many elements should it process\n        :type num_of_elements: int\n        :return: Returns all the elements found as their corresponding classes and whether dummy data were found in between.\n        :rtype: set(list, set(bool, bool))\n        \"\"\"\n        elements = []\n        while True:\n            cur_pos = file.tell()\n            if file.getbuffer().nbytes < cur_pos + 8:\n                # we reached the end of the file\n                break\n            ManifestStruct.check_reached_element(file)\n            resXMLTree_node = ResXMLHeader.parse(file)\n            cur_elem_data = read_remaining(file, resXMLTree_node.header)\n            elem_data = resXMLTree_node.header.data + resXMLTree_node.data + cur_elem_data\n            element = ManifestStruct.parse_next_header(io.BytesIO(elem_data))\n            if isinstance(element, dict) and \"raw\" in element:\n                logging.warning(f\"Unknown chunk type found: {element['type']}\")\n                continue  # TODO: consider value in collecting this!\n            elements.append(element)\n            if num_of_elements is None:\n                continue\n            if len(elements) == num_of_elements:\n                break\n        return elements\n\n    def get_manifest(self):\n        \"\"\"\n        Method to return the AndroidManifest created from this instance\n\n        :return: The AndroidManifest.xml as a string\n        :rtype: str\n        \"\"\"\n        manifest = create_manifest(self.elements, self.string_pool.string_list)\n        return manifest\n\n    @staticmethod\n    def parse_lite(manifest, num_of_elements=None):\n        \"\"\"\n        Parse the AndroidManifest with a limit on the elements to be parsed after the string pool. The goal of this method\n        is to make it possible to partially parse the AndroidManifest and allow faster parsing when needed. Only the\n        header is parsed from each chunk, and the rest are there as blobs of bytes.\n\n        :param manifest: The manifest to be processed\n        :type manifest: bytesIO\n        :param num_of_elements: How many elements of the manifest to process. Usually 3 are enough to get basic info about it.\n        :type num_of_elements: int\n        :return: A tuple containing four elements: ResChunkHeader, [ResStringPoolHeader, string_pool_data], [ResChunkHeader, resource_map_data], elements\n        :rtype: tuple (ResChunkHeader_init, [ResStringPoolHeader, bytes], [ResChunkHeader, bytes], list of bytes)\n        \"\"\"\n        ResChunkHeader_init = ResChunkHeader.parse(manifest)\n        ResStringPool_header, string_pool_data = StringPoolType.parse_lite(manifest)\n        resource_map_header, resource_map_data = XmlResourceMapType.parse_lite(manifest)\n        elements = ManifestStruct.process_elements(manifest, num_of_elements=num_of_elements)\n        return ResChunkHeader_init, [ResStringPool_header, string_pool_data], [resource_map_header,\n                                                                               resource_map_data], elements\n\n    @classmethod\n    def parse(cls, file):\n        \"\"\"\n        A composition of the rest of the classes available in the apkInspector.axml module, to form the AndroidManifest structure.\n\n        :param file: the axml that will be processed\n        :type file: bytesIO\n        :return: an instance of itself\n        :rtype: ManifestStruct\n        \"\"\"\n        header = ResChunkHeader.parse(file)\n        string_pool = StringPoolType.parse(file)\n        resource_map = XmlResourceMapType.parse(file)\n        elements = cls.process_elements(file)\n        return cls(header, string_pool, resource_map, elements)\n\n\ndef handle_unknown_chunk(file: io.BytesIO, header_t: ResXMLHeader):\n    \"\"\"\n    Default handler for unknown chunk types.\n    # ResourceTypes.cpp skips unrecognized chunk types\n    # as long as their size and header are valid.\n    # Reference: AOSP ResXMLTree::setTo() and ResXMLParser::nextNode()\n    \"\"\"\n    data = read_remaining(file, header_t.header)\n    # Optional: return raw chunk for logging or malware analysis\n    return {\n        \"type\": hex(header_t.header.type),\n        \"raw\": data\n    }\n\n\nchunk_type_handlers = {\n    '0x100': XmlStartNamespace.parse,  # RES_XML_START_NAMESPACE_TYPE\n    '0x101': XmlEndNamespace.parse,  # RES_XML_END_NAMESPACE_TYPE\n    '0x102': XmlStartElement.parse,  # RES_XML_START_ELEMENT_TYPE\n    '0x103': XmlEndElement.parse,  # RES_XML_END_ELEMENT_TYPE\n    '0x104': XmlcDataElement.parse,  # RES_XML_CDATA_TYPE\n    'default': handle_unknown_chunk  # fallback\n}\n\ndef read_remaining(file: io.BytesIO, header: ResChunkHeader):\n    \"\"\"\n\n    :param file: the current file that is being processed\n    :type file: io.BytesIO\n    :param header: the header of the current chunk of instance ResChunkHeader\n    :type header: ResChunkHeader\n    :return: Returns the remaining bytes of the chunk except the header\n    :rtype: bytes\n    \"\"\"\n    remaining_to_be_read = header.total_size - header.header_size\n    return file.read(remaining_to_be_read)\n\n\ndef process_attributes(attributes, string_list, ns_dict):\n    \"\"\"\n    Helps in processing the representation of attributes found in each element of the axml. It should be noted that not\n    all datatypes are taken into account, meaning that the values of certain attributes might not be represented properly.\n\n    :param attributes: the attributes of an XmlStartElement object as returned by XmlAttributeElement.parse()\n    :type attributes: list\n    :param string_list: the string data list from the String Pool\n    :type string_list: list\n    :param ns_dict: a namespace dictionary based on the XmlStartNamespace elements found\n    :type ns_dict: dict\n    :return: returns a string of all the attributes with their values\n    :rtype: str\n    \"\"\"\n    attribute_list = []\n    for attr in attributes:\n        try:\n            name = string_list[attr.name_index]\n        except:\n            continue\n        if not name:  # It happens that the attr.name_index points to an empty string in StringPool and you have to use\n            # the public.xml. It falls outside the scope of the tool, so I am not going to solve it for now.\n            name = f'Unknown_Attribute_Name_{random.randint(1000, 9999)}'\n        if \"\\n\" in name:\n            # may be obfuscated attribute - https://github.com/REAndroid/APKEditor\n            continue\n        if attr.typed_value_datatype == 1:  # reference type\n            value = f\"@{attr.typed_value_data}\"\n        elif attr.typed_value_datatype == 3:  # string type\n            try:\n                value = escape_xml_entities(string_list[attr.typed_value_data])\n            except:\n                value = attr.typed_value_data\n        elif attr.typed_value_datatype == 17:  # int-hex type\n            value = \"0x{:08X}\".format(attr.typed_value_data)\n        elif attr.typed_value_datatype == 18:  # boolean type\n            value = \"true\" if bool(attr.typed_value_data) else \"false\"\n        elif attr.typed_value_datatype == 0:  # null, used for CData\n            return name\n        else:\n            # TODO: Not accurate enough, values should be represented based on which datatype. Good enough for now\n            value = str(attr.typed_value_data)\n        if attr.full_namespace_index < len(string_list):\n            namespace = string_list[attr.full_namespace_index]\n            if not namespace:  # Same as with the empty name, points to an empty string in StringPool.\n                namespace = 'android'\n            try:\n                attribute_list.append(f'{ns_dict[namespace]}:{name}=\"{value}\"')\n            except:\n                attribute_list.append(f'{namespace.split(\"/\")[-1]}:{name}=\"{value}\"')\n        else:\n            attribute_list.append(f'{name}=\"{value}\"')\n\n    return ' '.join(attribute_list)\n\n\ndef create_manifest(elements, string_list):\n    \"\"\"\n    Method to create the readable XML AndroidManifest.xml file based on the elements discovered from the processed APK\n\n    :param elements: The parsed elements as returned by process_elements()[0]\n    :type elements: list\n    :param string_list: The string pool data\n    :type string_list: list\n    :return: The AndroidManifest.xml as a string\n    :rtype: str\n    \"\"\"\n    android_manifest_xml = []\n    namespaces = {}\n    ns_dict = {}\n    ns_declared = []\n    for element in elements:\n        if isinstance(element, XmlStartNamespace):\n            if element.ext[0] < len(string_list) or element.ext[1] < len(string_list):\n                namespaces[string_list[element.ext[0]]] = f'xmlns:{string_list[element.ext[0]]}=\"{string_list[element.ext[1]]}\"'\n                ns_dict[string_list[element.ext[1]]] = string_list[element.ext[0]]\n        elif isinstance(element, XmlStartElement):\n            attributes = process_attributes(element.attributes, string_list, ns_dict)\n            attr_ns_list = set(ns.split(':')[0] for ns in attributes.split(' ') if ':' in ns)\n            tmp_ns = []  # TODO: Somewhat hacky way to add namespaces/ Maybe improve in future depending on needs\n            for vl in attr_ns_list:\n                if vl not in ns_declared:\n                    if vl in namespaces:\n                        tmp_ns.append(namespaces[vl])\n                    elif vl == 'android':\n                        tmp_ns.append(f'xmlns:android=\"http://schemas.android.com/apk/res/android\"')\n                    ns_declared.append(vl)\n            if tmp_ns:\n                tag_line = f\"<{string_list[element.attrext[1]]} {' '.join(tmp_ns)} {attributes}>\\n\" if attributes else f\"<{string_list[element.attrext[1]]}>\\n\"\n            else:\n                tag_line = f\"<{string_list[element.attrext[1]]} {attributes}>\\n\" if attributes else f\"<{string_list[element.attrext[1]]}>\\n\"\n            android_manifest_xml.append(tag_line)\n        elif isinstance(element, XmlcDataElement):\n            if android_manifest_xml[-1][-1] == '\\n':\n                android_manifest_xml[-1] = android_manifest_xml[-1].replace('\\n',\n                                                                            string_list[element.data_index])\n        elif isinstance(element, XmlEndElement):\n            name = string_list[element.attrext[1]]\n            closing_tag = f\"</{name}>\" if name == \"manifest\" else f\"</{name}>\\n\"\n            android_manifest_xml.append(closing_tag)\n    return ''.join(android_manifest_xml)\n\n\ndef get_manifest(raw_manifest):\n    \"\"\"\n    Helper method to directly return the AndroidManifest file as created by create_manifest()\n\n    :param raw_manifest: expects the encoded AndroidManifest.xml file as a file-like object\n    :type raw_manifest: bytesIO\n    :return: returns the decoded AndroidManifest file\n    :rtype: str\n    \"\"\"\n    manifest_object = ManifestStruct.parse(raw_manifest)\n    return manifest_object.get_manifest()\n\n\ndef parse_apk_for_manifest(inc_apk, raw: bool = False, lite: bool = False, num_of_elements: int = 3):\n    \"\"\"\n    Helper method to retrieve the AndroidManifest directly from an APK, either by providing the APK itself or the path.\n\n    :param inc_apk: The path of the APK file or the APK itself\n    :type inc_apk: str\n    :param raw: Boolean parameter to define whether the manifest is provided as string or bytes\n    :type raw: bool\n    :param lite: Boolean parameter to define whether the lite parsing would occur or not\n    :type lite: bool\n    :param num_of_elements: Number of elements to parse from the APK\n    :type num_of_elements: int\n    :return: Returns the AndroidManifest.xml as string\n    :rtype: str\n    \"\"\"\n    if raw:\n        apk_file = inc_apk\n    else:\n        with open(inc_apk, 'rb') as apk:\n            apk_file = io.BytesIO(apk.read())\n\n    entry_manifest = ZipEntry.parse_single(apk_file, \"AndroidManifest.xml\")\n    manifest_local = entry_manifest.local_headers[\"AndroidManifest.xml\"].to_dict()\n    manifest_bytes = extract_file_based_on_header_info(apk_file, manifest_local,\n                                                       entry_manifest.central_directory.entries[\n                                                           \"AndroidManifest.xml\"].to_dict())[0]\n    if lite:\n        manifest = get_manifest_lite(io.BytesIO(manifest_bytes), num_of_elements=num_of_elements)\n    else:\n        manifest = get_manifest(io.BytesIO(manifest_bytes))\n    return manifest\n\n\ndef get_manifest_lite(manifest: io.BytesIO, num_of_elements: int):\n    \"\"\"\n    A method to provide 'lite' parsing of the AndroidManifest in order to retrieve a few details as fast as possible.\n    Based on the integer 'num_of_elements' being passed as a parameter, it will attempt to fetch this many chunks right\n    after the 'resource map' chunk and will get the attributes values of these elements if they are of instance XmlStartElement\n\n    :param manifest: The manifest to be processed\n    :type manifest: io.BytesIO\n    :param num_of_elements:\n    :type num_of_elements: int\n    :return: Returns a dictionary of the attributes discovered\n    :rtype: dict\n    \"\"\"\n    (ResChunkHeader_init,\n     [string_pool_ResChunkHeader, string_pool_data],\n     [resource_map_header, resource_map_data], elements) = ManifestStruct.parse_lite(manifest,\n                                                                                     num_of_elements=num_of_elements)\n    end_stringpool_offset = string_pool_ResChunkHeader.header.total_size + 8\n    strings_start = string_pool_ResChunkHeader.strings_start\n    is_utf8 = bool(string_pool_ResChunkHeader.flags & (1 << 8))\n    attributes_dict = {}\n    for element in elements:\n        if isinstance(element, XmlStartElement):\n            for attr in element.attributes:\n                if isinstance(attr, XmlAttributeElement):\n                    attr_name = StringPoolType.get_string_from_pool(attr.name_index, io.BytesIO(string_pool_data),\n                                                                    end_stringpool_offset, strings_start, is_utf8)\n                    attribute_value = get_attribute_value(attr_name, attr, end_stringpool_offset, strings_start,\n                                                          is_utf8, io.BytesIO(string_pool_data))\n                    attributes_dict[attr_name] = attribute_value\n    return attributes_dict\n\n\ndef get_attribute_value(attr_name, attribute, end_stringpool_offset, strings_start, is_utf8, string_pool_data):\n    \"\"\"\n    Gets the value for a single attribute\n\n    :param attr_name: The attribute name as it has been retrieved by the string pool\n    :type attr_name: str\n    :param attribute: the parsed attribute itself\n    :type attribute: XmlAttributeElement\n    :param end_stringpool_offset: The end of string pool offset\n    :type end_stringpool_offset: int\n    :param strings_start: the strings start offset for the string pool\n    :type strings_start: int\n    :param is_utf8: boolean to check if a utf8 string is expected\n    :type is_utf8: bool\n    :param string_pool_data: The string pool data as io.BytesIO\n    :type string_pool_data: io.BytesIO\n    :return: returns the attribute value\n    :rtype: str\n    \"\"\"\n    try:\n        if attribute.typed_value_datatype == 1:  # reference type\n            return f\"@{attribute.typed_value_data}\"\n        elif attribute.typed_value_datatype == 3:  # string type\n            str_pool_loc = StringPoolType.get_string_from_pool(attribute.typed_value_data, string_pool_data,\n                                                               end_stringpool_offset,\n                                                               strings_start, is_utf8)\n            return escape_xml_entities(str_pool_loc) if str_pool_loc else str(attribute.typed_value_data)\n        elif attribute.typed_value_datatype == 4:  # float type\n            str_pool_loc = StringPoolType.get_string_from_pool(attribute.typed_value_data, string_pool_data,\n                                                               end_stringpool_offset,\n                                                               strings_start, is_utf8)\n            if not str_pool_loc:\n                str_pool_loc = StringPoolType.get_string_from_pool(attribute.raw_value_index, string_pool_data,\n                                                                   end_stringpool_offset,\n                                                                   strings_start, is_utf8)\n            return str_pool_loc if str_pool_loc else str(attribute.typed_value_data)\n        elif attribute.typed_value_datatype == 17:  # int-hex type\n            return f\"0x{attribute.typed_value_data:08X}\"\n        elif attribute.typed_value_datatype == 18:  # boolean type\n            return \"true\" if attribute.typed_value_data else \"false\"\n        else:\n            return str(attribute.typed_value_data)\n    except Exception as e:\n        logging.exception(f\"Exception processing attribute {attr_name}: {e}\")\n        return str(attribute.typed_value_data)\n"
  },
  {
    "path": "libs/apkInspector/extract.py",
    "content": "import logging\nimport zlib\nimport os\n\n\ndef extract_file_based_on_header_info(apk_file, local_header_info, central_directory_info):\n    \"\"\"\n    Extracts a single file from the apk_file based on the information provided from the offset and the header_info.\n    It takes into account that the compression method provided might not be STORED or DEFLATED! The returned\n    'indicator', shows what compression method was used. Besides the standard STORED/DEFLATE it may return\n    'DEFLATED_TAMPERED', which means that the compression method found was not DEFLATED(8) but it should have been,\n    and 'STORED_TAMPERED' which means that the compression method found was not STORED(0) but should have been.\n\n    :param apk_file: The APK file e.g. with open('test.apk', 'rb') as apk_file\n    :type apk_file: bytesIO\n    :param local_header_info: The local header dictionary info for that specific filename\n    :type local_header_info: dict\n    :param central_directory_info: The central directory entry for that specific filename\n    :type central_directory_info: dict\n    :return: Returns the actual extracted data for that file along with an indication of whether a static analysis evasion technique was used or not.\n    :rtype: set(bytes, str)\n    \"\"\"\n    filename_length = local_header_info[\"file_name_length\"]\n    if local_header_info[\"compressed_size\"] == 0 or local_header_info[\"uncompressed_size\"] == 0:\n        compressed_size = central_directory_info[\"compressed_size\"]\n        uncompressed_size = central_directory_info[\"uncompressed_size\"]\n    else:\n        compressed_size = local_header_info[\"compressed_size\"]\n        uncompressed_size = local_header_info[\"uncompressed_size\"]\n\n    extra_field_length = local_header_info[\"extra_field_length\"]\n    compression_method = local_header_info[\"compression_method\"]\n    # Skip the offset + local header to reach the compressed data\n    local_header_size = 30  # Size of the local header in bytes\n    offset = central_directory_info[\"relative_offset_of_local_file_header\"]\n    apk_file.seek(offset + local_header_size + filename_length + extra_field_length)\n    if compression_method == 0:  # Stored (no compression)\n        uncompressed_data = apk_file.read(uncompressed_size)\n        extracted_data = uncompressed_data\n        indicator = 'STORED'\n    elif compression_method == 8:\n        compressed_data = apk_file.read(compressed_size)\n        # -15 for windows size due to raw stream with no header or trailer\n        extracted_data = zlib.decompress(compressed_data, -15)\n        indicator = 'DEFLATED'\n    elif compressed_size == uncompressed_size:\n        compressed_data = apk_file.read(uncompressed_size)\n        extracted_data = compressed_data\n        indicator = 'STORED_TAMPERED'\n    else:\n        cur_loc = apk_file.tell()\n        try:\n            compressed_data = apk_file.read(compressed_size)\n            c_obj = zlib.decompressobj(-15)\n            extracted_data = c_obj.decompress(compressed_data)\n            if not c_obj.eof or c_obj.unused_data or c_obj.unconsumed_tail:\n                raise ValueError(\"Invalid or non-pure deflate\")\n            indicator = 'DEFLATED_TAMPERED'\n        except Exception as e:\n            logging.debug(e)\n            apk_file.seek(cur_loc)\n            compressed_data = apk_file.read(uncompressed_size)\n            extracted_data = compressed_data\n            indicator = 'STORED_TAMPERED'\n    return extracted_data, indicator\n\n\ndef extract_all_files_from_central_directory(apk_file, central_directory_entries, local_header_entries, output_dir):\n    \"\"\"\n    Extracts all files from an APK based on the entries detected in the central_directory_entries.\n\n    :param apk_file: The APK file e.g. with open('test.apk', 'rb') as apk_file\n    :type apk_file: bytesIO\n    :param central_directory_entries: The dictionary with all the entries for the central directory\n    :type central_directory_entries: dict\n    :param local_header_entries: The dictionary with all the local header entries\n    :type local_header_entries: dict\n    :param output_dir: The output directory where to save the files.\n    :type output_dir: str\n    :return: Returns 0 if no errors, 1 if an exception and 2 if the output directory already exists\n    :rtype: int\n    \"\"\"\n    try:\n        # Check if the output directory already exists\n        if os.path.exists(output_dir):\n            print(\"Extraction aborted. Output directory already exists.\")\n            return 2\n        # Create the output directory or overwrite if it already exists\n        os.makedirs(output_dir, exist_ok=True)\n        # Iterate over central directory entries\n        for filename, cd_header_info in central_directory_entries.items():\n            if not filename:\n                # to account for the cases where an empty filename entry is added\n                continue\n            # Extract the file using the local header information\n            extracted_data = \\\n                extract_file_based_on_header_info(apk_file, local_header_entries[filename], cd_header_info)[0]\n            # Construct the output file path\n            output_path = os.path.join(output_dir, filename)\n            # Create directories if necessary\n            os.makedirs(os.path.dirname(output_path), exist_ok=True)\n            # Write the extracted data to the output file\n            with open(output_path, 'wb') as output_file:\n                output_file.write(extracted_data)\n        return 0\n    except Exception as e:\n        print(f\"Error extracting files: {e}\")\n        return 1\n"
  },
  {
    "path": "libs/apkInspector/headers.py",
    "content": "import io\nimport logging\nimport os\nimport struct\nfrom typing import Dict\n\nfrom .extract import extract_file_based_on_header_info, extract_all_files_from_central_directory\nfrom .helpers import pretty_print_header, save_to_json, save_data_to_file\n\n\nclass EndOfCentralDirectoryRecord:\n    \"\"\"\n    A class to provide details about the end of central directory record.\n    \"\"\"\n    def __init__(self, signature, number_of_this_disk, disk_where_central_directory_starts,\n                 number_of_central_directory_records_on_this_disk,\n                 total_number_of_central_directory_records, size_of_central_directory,\n                 offset_of_start_of_central_directory, comment_length, comment):\n        self.signature = signature\n        self.number_of_this_disk = number_of_this_disk\n        self.disk_where_central_directory_starts = disk_where_central_directory_starts\n        self.number_of_central_directory_records_on_this_disk = number_of_central_directory_records_on_this_disk\n        self.total_number_of_central_directory_records = total_number_of_central_directory_records\n        self.size_of_central_directory = size_of_central_directory\n        self.offset_of_start_of_central_directory = offset_of_start_of_central_directory\n        self.comment_length = comment_length\n        self.comment = comment\n\n    @classmethod\n    def parse(cls, apk_file):\n        \"\"\"\n        Method to locate the \"end of central directory record signature\" as the first step of the correct process of\n        reading a ZIP archive. Should be noted that certain APKs do not follow the zip specification and declare multiple\n        \"end of central directory records\". For this reason the search for the corresponding signature of the eocd starts\n        from the end of the apk.\n\n        :param apk_file: The already read/loaded data of the APK file e.g. with open('test.apk', 'rb') as apk_file\n        :type apk_file: bytesIO\n        :return: Returns the end of central directory record with all the information available if the corresponding signature is found. If not, then it returns None.\n        :rtype: EndOfCentralDirectoryRecord or None\n        \"\"\"\n        chunk_size = 1024\n        offset = 0\n        signature_offset = -1\n        file_size = apk_file.seek(0, 2)\n        while offset < file_size:\n            position = max(0, file_size - offset - chunk_size)\n            apk_file.seek(position)\n            chunk = apk_file.read(chunk_size)\n            if not chunk:\n                break\n            signature_offset = chunk.rfind(b'\\x50\\x4b\\x05\\x06')  # EOCD signature\n            if signature_offset != -1:\n                eo_central_directory_offset = position + signature_offset\n                break  # Found EOCD signature\n            # Adjust offset to overlap by 4 bytes\n            offset += chunk_size - 4\n\n        if signature_offset == -1:\n            raise ValueError(\"End of central directory record (EOCD) signature not found\")\n        apk_file.seek(eo_central_directory_offset)\n\n        signature = apk_file.read(4)\n        number_of_this_disk = struct.unpack('<H', apk_file.read(2))[0]\n        disk_where_central_directory_starts = struct.unpack('<H', apk_file.read(2))[0]\n        number_of_central_directory_records_on_this_disk = struct.unpack('<H', apk_file.read(2))[0]\n        total_number_of_central_directory_records = struct.unpack('<H', apk_file.read(2))[0]\n        size_of_central_directory = struct.unpack('<I', apk_file.read(4))[0]\n        offset_of_start_of_central_directory = struct.unpack('<I', apk_file.read(4))[0]\n        comment_length = struct.unpack('<H', apk_file.read(2))[0]\n        comment = struct.unpack(f'<{comment_length}s', apk_file.read(comment_length))[0].decode('utf-8', 'ignore')\n        return cls(\n            signature,\n            number_of_this_disk,\n            disk_where_central_directory_starts,\n            number_of_central_directory_records_on_this_disk,\n            total_number_of_central_directory_records,\n            size_of_central_directory,\n            offset_of_start_of_central_directory,\n            comment_length,\n            comment\n        )\n\n    def to_dict(self):\n        \"\"\"\n        Represent the class as a dictionary.\n\n        :return: returns the dictionary\n        :rtype: dict\n        \"\"\"\n        return {\n            \"signature\": self.signature,\n            \"number_of_this_disk\": self.number_of_this_disk,\n            \"disk_where_central_directory_starts\": self.disk_where_central_directory_starts,\n            \"number_of_central_directory_records_on_this_disk\": self.number_of_central_directory_records_on_this_disk,\n            \"total_number_of_central_directory_records\": self.total_number_of_central_directory_records,\n            \"size_of_central_directory\": self.size_of_central_directory,\n            \"offset_of_start_of_central_directory\": self.offset_of_start_of_central_directory,\n            \"comment_length\": self.comment_length,\n            \"comment\": self.comment\n        }\n\n    @classmethod\n    def from_dict(cls, entry_dict):\n        \"\"\"\n        Convert a dictionary back to an instance of the class.\n\n        :param entry_dict: the dictionary\n        :type entry_dict: dict\n        :return: the instance of the class\n        :rtype: EndOfCentralDirectoryRecord\n        \"\"\"\n        return cls(**entry_dict)\n\n\nclass CentralDirectoryEntry:\n    \"\"\"\n    A class representing each entry in the central directory.\n    \"\"\"\n    def __init__(self, version_made_by, version_needed_to_extract, general_purpose_bit_flag,\n                 compression_method, file_last_modification_time, file_last_modification_date,\n                 crc32_of_uncompressed_data, compressed_size, uncompressed_size, file_name_length,\n                 extra_field_length, file_comment_length, disk_number_where_file_starts,\n                 internal_file_attributes, external_file_attributes, relative_offset_of_local_file_header,\n                 filename, extra_field, file_comment, offset_in_central_directory):\n        self.version_made_by = version_made_by\n        self.version_needed_to_extract = version_needed_to_extract\n        self.general_purpose_bit_flag = general_purpose_bit_flag\n        self.compression_method = compression_method\n        self.file_last_modification_time = file_last_modification_time\n        self.file_last_modification_date = file_last_modification_date\n        self.crc32_of_uncompressed_data = crc32_of_uncompressed_data\n        self.compressed_size = compressed_size\n        self.uncompressed_size = uncompressed_size\n        self.file_name_length = file_name_length\n        self.extra_field_length = extra_field_length\n        self.file_comment_length = file_comment_length\n        self.disk_number_where_file_starts = disk_number_where_file_starts\n        self.internal_file_attributes = internal_file_attributes\n        self.external_file_attributes = external_file_attributes\n        self.relative_offset_of_local_file_header = relative_offset_of_local_file_header\n        self.filename = filename\n        self.extra_field = extra_field\n        self.file_comment = file_comment\n        self.offset_in_central_directory = offset_in_central_directory\n\n    def to_dict(self):\n        \"\"\"\n        Represent the class as a dictionary.\n\n        :return: returns the dictionary\n        :rtype: dict\n        \"\"\"\n        return {\n            \"version_made_by\": self.version_made_by,\n            \"version_needed_to_extract\": self.version_needed_to_extract,\n            \"general_purpose_bit_flag\": self.general_purpose_bit_flag,\n            \"compression_method\": self.compression_method,\n            \"file_last_modification_time\": self.file_last_modification_time,\n            \"file_last_modification_date\": self.file_last_modification_date,\n            \"crc32_of_uncompressed_data\": self.crc32_of_uncompressed_data,\n            \"compressed_size\": self.compressed_size,\n            \"uncompressed_size\": self.uncompressed_size,\n            \"file_name_length\": self.file_name_length,\n            \"extra_field_length\": self.extra_field_length,\n            \"file_comment_length\": self.file_comment_length,\n            \"disk_number_where_file_starts\": self.disk_number_where_file_starts,\n            \"internal_file_attributes\": self.internal_file_attributes,\n            \"external_file_attributes\": self.external_file_attributes,\n            \"relative_offset_of_local_file_header\": self.relative_offset_of_local_file_header,\n            \"filename\": self.filename,\n            \"extra_field\": self.extra_field,\n            \"file_comment\": self.file_comment,\n            \"offset_in_central_directory\": self.offset_in_central_directory\n        }\n\n    @classmethod\n    def from_dict(cls, entry_dict):\n        \"\"\"\n        Convert a dictionary back to an instance of the class.\n\n        :param entry_dict: the dictionary\n        :type entry_dict: dict\n        :return: the instance of the class\n        :rtype: CentralDirectoryEntry\n        \"\"\"\n        return cls(**entry_dict)\n\n\nclass CentralDirectory:\n    \"\"\"\n    The CentralDirectory containing all the CentralDirectoryEntry entries discovered.\n    The entries are listed as a dictionary where the filename is the key.\n    \"\"\"\n    def __init__(self, entries):\n        self.entries = entries\n\n    @classmethod\n    def parse(cls, apk_file, eocd: EndOfCentralDirectoryRecord = None):\n        \"\"\"\n        Method that is used to parse the central directory header according to the specification\n        https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.9.TXT\n        based on the offset provided by the end of central directory record: eocd.offset_of_start_of_central_directory.\n\n        :param apk_file: The already read/loaded data of the APK file e.g. with open('test.apk', 'rb') as apk_file\n        :type apk_file: bytesIO\n        :param eocd: End of central directory record\n        :type eocd: EndOfCentralDirectoryRecord\n        :return: Returns a dictionary with all the entries discovered. The filename of each entry is used as the key. Besides the fields defined by the specification, each entry has an additional field named 'Offset in the central directory header', which includes the offset of the entry in the central directory itself.\n        :rtype: CentralDirectory\n        \"\"\"\n        if not eocd:\n            eocd = EndOfCentralDirectoryRecord.parse(apk_file)\n        apk_file.seek(eocd.offset_of_start_of_central_directory)\n        if apk_file.tell() != eocd.offset_of_start_of_central_directory:\n            raise ValueError(f\"Failed to find the offset for the central directory within the file!\")\n\n        central_directory_entries = {}\n        while True:\n            c_offset = apk_file.tell()\n            signature = apk_file.read(4)\n            if signature != b'\\x50\\x4b\\x01\\x02':\n                break  # Reached the end of the central directory\n            version_made_by = struct.unpack('<H', apk_file.read(2))[0]\n            version_needed_to_extract = struct.unpack('<H', apk_file.read(2))[0]\n            general_purpose_bit_flag = struct.unpack('<H', apk_file.read(2))[0]\n            compression_method = struct.unpack('<H', apk_file.read(2))[0]\n            file_last_modification_time = struct.unpack('<H', apk_file.read(2))[0]\n            file_last_modification_date = struct.unpack('<H', apk_file.read(2))[0]\n            crc32_of_uncompressed_data = struct.unpack('<I', apk_file.read(4))[0]\n            compressed_size = struct.unpack('<I', apk_file.read(4))[0]\n            uncompressed_size = struct.unpack('<I', apk_file.read(4))[0]\n            file_name_length = struct.unpack('<H', apk_file.read(2))[0]\n            extra_field_length = struct.unpack('<H', apk_file.read(2))[0]\n            file_comment_length = struct.unpack('<H', apk_file.read(2))[0]\n            disk_number_where_file_starts = struct.unpack('<H', apk_file.read(2))[0]\n            internal_file_attributes = struct.unpack('<H', apk_file.read(2))[0]\n            external_file_attributes = struct.unpack('<I', apk_file.read(4))[0]\n            relative_offset_of_local_file_header = struct.unpack('<I', apk_file.read(4))[0]\n            filename = struct.unpack(f'<{file_name_length}s', apk_file.read(file_name_length))[0].decode('utf-8', 'ignore')\n            extra_field = struct.unpack(f'<{extra_field_length}s', apk_file.read(extra_field_length))[0].decode('utf-8', 'ignore')\n            file_comment = struct.unpack(f'<{file_comment_length}s', apk_file.read(file_comment_length))[0].decode('utf-8', 'ignore')\n            offset_in_central_directory = c_offset\n\n            central_directory_entry = CentralDirectoryEntry(\n                version_made_by, version_needed_to_extract, general_purpose_bit_flag, compression_method,\n                file_last_modification_time, file_last_modification_date, crc32_of_uncompressed_data,\n                compressed_size, uncompressed_size, file_name_length, extra_field_length, file_comment_length,\n                disk_number_where_file_starts, internal_file_attributes, external_file_attributes,\n                relative_offset_of_local_file_header, filename, extra_field, file_comment,\n                offset_in_central_directory\n            )\n            central_directory_entries[central_directory_entry.filename] = central_directory_entry\n\n        return cls(central_directory_entries)\n\n    def to_dict(self):\n        \"\"\"\n        Represent the class as a dictionary.\n\n        :return: returns the dictionary\n        :rtype: dict\n        \"\"\"\n        return {filename: entry.to_dict() for filename, entry in self.entries.items()}\n\n    @classmethod\n    def from_dict(cls, entry_dict):\n        \"\"\"\n        Convert a dictionary back to an instance of the class.\n\n        :param entry_dict: the dictionary\n        :type entry_dict: dict\n        :return: the instance of the class\n        :rtype: CentralDirectory\n        \"\"\"\n        entries = {}\n        for filename, entry_data in entry_dict.items():\n            entry_instance = CentralDirectoryEntry.from_dict(entry_data)\n            entries[filename] = entry_instance\n        return cls(entries=entries)\n\n\nclass LocalHeaderRecord:\n    \"\"\"\n    The local header for each entry discovered.\n    \"\"\"\n    def __init__(self, version_needed_to_extract, general_purpose_bit_flag,\n                 compression_method, file_last_modification_time, file_last_modification_date,\n                 crc32_of_uncompressed_data, compressed_size, uncompressed_size, file_name_length,\n                 extra_field_length, filename, extra_field):\n\n        self.version_needed_to_extract = version_needed_to_extract\n        self.general_purpose_bit_flag = general_purpose_bit_flag\n        self.compression_method = compression_method\n        self.file_last_modification_time = file_last_modification_time\n        self.file_last_modification_date = file_last_modification_date\n        self.crc32_of_uncompressed_data = crc32_of_uncompressed_data\n        self.compressed_size = compressed_size\n        self.uncompressed_size = uncompressed_size\n        self.file_name_length = file_name_length\n        self.extra_field_length = extra_field_length\n        self.filename = filename\n        self.extra_field = extra_field\n\n    @classmethod\n    def parse(cls, apk_file, entry_of_interest: CentralDirectoryEntry):\n        \"\"\"\n        Method that attempts to read the local file header according to the specification https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.9.TXT.\n\n        :param apk_file: The already read/loaded data of the APK file e.g. with open('test.apk', 'rb') as apk_file\n        :type apk_file: bytesIO\n        :param entry_of_interest: The central directory header of the specific entry of interest\n        :type entry_of_interest: CentralDirectoryEntry\n        :return: Returns a dictionary with the local header information or None if it failed to find the header.\n        :rtype: LocalHeaderRecord or None\n        \"\"\"\n        apk_file.seek(entry_of_interest.relative_offset_of_local_file_header)\n        header_signature = apk_file.read(4)\n\n        if not header_signature == b'\\x50\\x4b\\x03\\x04':\n            logging.warning(\"Does not seem to be the start of a local header!\")\n            return None\n        else:\n            version_needed_to_extract = struct.unpack('<H', apk_file.read(2))[0]\n            general_purpose_bit_flag = struct.unpack('<H', apk_file.read(2))[0]\n            compression_method = struct.unpack('<H', apk_file.read(2))[0]\n            file_last_modification_time = struct.unpack('<H', apk_file.read(2))[0]\n            file_last_modification_date = struct.unpack('<H', apk_file.read(2))[0]\n            crc32_of_uncompressed_data = struct.unpack('<I', apk_file.read(4))[0]\n            compressed_size = struct.unpack('<I', apk_file.read(4))[0]\n            uncompressed_size = struct.unpack('<I', apk_file.read(4))[0]\n            file_name_length = struct.unpack('<H', apk_file.read(2))[0]\n            extra_field_length = struct.unpack('<H', apk_file.read(2))[0]\n            try:\n                filename = struct.unpack(f'<{file_name_length}s', apk_file.read(file_name_length))[0].decode('utf-8', 'ignore')\n                extra_field = struct.unpack(f'<{extra_field_length}s', apk_file.read(extra_field_length))[0].decode('utf-8', 'ignore')\n            except:\n                filename = entry_of_interest.filename\n                extra_field = entry_of_interest.extra_field\n        return cls(\n            version_needed_to_extract, general_purpose_bit_flag, compression_method,\n            file_last_modification_time, file_last_modification_date, crc32_of_uncompressed_data,\n            compressed_size, uncompressed_size, file_name_length, extra_field_length,\n            filename, extra_field)\n\n    def to_dict(self):\n        \"\"\"\n        Represent the class as a dictionary.\n\n        :return: returns the dictionary\n        :rtype: dict\n        \"\"\"\n        return {\n            \"version_needed_to_extract\": self.version_needed_to_extract,\n            \"general_purpose_bit_flag\": self.general_purpose_bit_flag,\n            \"compression_method\": self.compression_method,\n            \"file_last_modification_time\": self.file_last_modification_time,\n            \"file_last_modification_date\": self.file_last_modification_date,\n            \"crc32_of_uncompressed_data\": self.crc32_of_uncompressed_data,\n            \"compressed_size\": self.compressed_size,\n            \"uncompressed_size\": self.uncompressed_size,\n            \"file_name_length\": self.file_name_length,\n            \"extra_field_length\": self.extra_field_length,\n            \"filename\": self.filename,\n            \"extra_field\": self.extra_field\n        }\n\n    @classmethod\n    def from_dict(cls, entry_dict):\n        \"\"\"\n        Convert a dictionary back to an instance of the class.\n\n        :param entry_dict: the dictionary\n        :type entry_dict: dict\n        :return: the instance of the class\n        :rtype: LocalHeaderRecord\n        \"\"\"\n        return cls(**entry_dict)\n\n\nclass ZipEntry:\n    \"\"\"\n    Is the actual APK represented as a composition of the previous classes, which are: the EndOfCentralDirectoryRecord, the CentralDirectory and a dictionary of values of LocalHeaderRecord.\n    \"\"\"\n    def __init__(self, zip_bytes, eocd: EndOfCentralDirectoryRecord, central_directory: CentralDirectory,\n                 local_headers: Dict[str, LocalHeaderRecord]):\n        self.zip = zip_bytes\n        self.eocd = eocd\n        self.central_directory = central_directory\n        self.local_headers = local_headers\n\n    @classmethod\n    def parse(cls, inc_apk, raw: bool = True):\n        \"\"\"\n        Method to start processing an APK. The raw (bytes) APK may be passed or the path to it.\n\n        :param inc_apk: the incoming apk, either path or bytes\n        :type inc_apk: str or bytesIO\n        :param raw: boolean flag to specify whether it is the raw apk in bytes or not\n        :type raw: bool\n        :return: returns the instance of the class\n        :rtype: ZipEntry\n        \"\"\"\n        if raw:\n            apk_file = inc_apk\n        else:\n            with open(inc_apk, 'rb') as apk:\n                apk_file = io.BytesIO(apk.read())\n        eocd = EndOfCentralDirectoryRecord.parse(apk_file)\n        central_directory = CentralDirectory.parse(apk_file, eocd)\n        local_headers = {}\n        for entry in central_directory.entries:\n            local_header_entry = LocalHeaderRecord.parse(apk_file, central_directory.entries[entry])\n            if local_header_entry:\n                local_headers[local_header_entry.filename] = local_header_entry\n        return cls(apk_file, eocd, central_directory, local_headers)\n\n    @classmethod\n    def parse_single(cls, apk_file, filename, eocd: EndOfCentralDirectoryRecord = None,\n                     central_directory: CentralDirectory = None):\n        \"\"\"\n        Similar to parse, but instead of parsing the entire APK, it only targets the specified file.\n\n        :param apk_file: The apk file expected raw\n        :type apk_file: bytesIO\n        :param filename: the filename of the file to be parsed\n        :type filename: str\n        :param eocd: Optionally, the instance of the end of central directory from the APK\n        :type eocd: EndOfCentralDirectoryRecord(, optional)\n        :param central_directory: Optionally, the instance of the central directory record\n        :type central_directory: CentralDirectory(, optional)\n        :return: returns the instance of the class\n        :rtype: ZipEntry\n        \"\"\"\n        if not eocd or not central_directory:\n            eocd = EndOfCentralDirectoryRecord.parse(apk_file)\n            central_directory = CentralDirectory.parse(apk_file, eocd)\n        local_header = {filename: LocalHeaderRecord.parse(apk_file, central_directory.entries[filename])}\n        return cls(apk_file, eocd, central_directory, local_header)\n\n    def to_dict(self):\n        \"\"\"\n        Represent the class as a dictionary.\n\n        :return: returns the dictionary\n        :rtype: dict\n        \"\"\"\n        return {\n            \"end_of_central_directory\": self.eocd.to_dict(),\n            \"central_directory\": self.central_directory.to_dict(),\n            \"local_headers\": {filename: entry.to_dict() for filename, entry in self.local_headers.items()}\n        }\n\n    def get_central_directory_entry_dict(self, filename):\n        \"\"\"\n        Method to retrieve the central directory entry for a specific filename.\n\n        :param filename: the filename of the file to search for in the central directory\n        :type filename: str\n        :return: returns a dictionary of the central directory entry or None if the filename is not found\n        :rtype: dict\n        \"\"\"\n        if filename in self.central_directory.entries:\n            return self.central_directory.entries[filename].to_dict()\n        else:\n            raise KeyError(f\"Key: {filename} was not found within the central directory entries!\")\n\n    def get_local_header_dict(self, filename):\n        \"\"\"\n        Method to retrieve the local header of a specific filename.\n\n        :param filename: the filename of the entry to search for among the local headers\n        :type filename: str\n        :return: returns a ditionary of the local header entry or None if the filename is not found\n        :rtype: dict\n        \"\"\"\n        if filename in self.local_headers:\n            return self.local_headers[filename].to_dict()\n        else:\n            raise KeyError(f\"Key: {filename} was not found within the local headers list!\")\n\n    def read(self, name, save: bool = False):\n        \"\"\"\n        Method to utilize the extract module and extract a single entry from the APK based on the filename.\n\n        :param name: the name of the file to be read/extracted\n        :type name: str\n        :param save: boolean to define whether the extracted file should be saved as well or not\n        :type save: bool(, optional)\n        :return: returns the raw bytes of the filename that was extracted\n        :rtype: bytes\n        \"\"\"\n        extracted_file = extract_file_based_on_header_info(self.zip, self.get_local_header_dict(name),\n                                                           self.get_central_directory_entry_dict(name))[0]\n        if save:\n            save_data_to_file(f\"EXTRACTED_{name}\", extracted_file)\n        return extracted_file\n\n    def infolist(self) -> Dict[str, CentralDirectoryEntry]:\n        \"\"\"\n        List of information about the entries in the central directory.\n\n        :return: returns a dictionary where the keys are the filenames and the values are each an instance of the CentralDirectoryEntry\n        :rtype: dict\n        \"\"\"\n        return self.central_directory.entries\n\n    def namelist(self):\n        \"\"\"\n        List of the filenames included in the central directory.\n\n        :return: returns the list of the filenames\n        :rtype: list\n        \"\"\"\n        return [vl for vl in self.central_directory.to_dict()]\n\n    def extract_all(self, extract_path, apk_name):\n        \"\"\"\n        Extracts all the contents of the APK.\n\n        :param extract_path: where to extract it\n        :type extract_path: str\n        :param apk_name: the name of the apk\n        :type apk_name: str\n        \"\"\"\n        output_path = os.path.join(extract_path, apk_name)\n        if not extract_all_files_from_central_directory(self.zip, self.to_dict()[\"central_directory\"],\n                                                        self.to_dict()[\"local_headers\"], output_path):\n            logging.info(f\"Extraction successful for: {apk_name}\")\n\n\ndef print_headers_of_filename(cd_h_of_file, local_header_of_file):\n    \"\"\"\n    Prints out the details for both the central directory header and the local file header. Useful for the CLI.\n\n    :param cd_h_of_file: central directory header of a filename as it may be retrieved from headers_of_filename\n    :type cd_h_of_file: dict\n    :param local_header_of_file: local header dictionary of a filename as it may be retrieved from headers_of_filename\n    :type local_header_of_file: dict\n    \"\"\"\n    if not cd_h_of_file or not local_header_of_file:\n        logging.info(\"Are you sure the filename exists?\")\n        return\n    pretty_print_header(\"CENTRAL DIRECTORY\")\n    for k in cd_h_of_file:\n        if k == 'Relative offset of local file header' or k == 'Offset in the central directory header':\n            print(f\"{k:40} : {hex(int(cd_h_of_file[k]))} | {cd_h_of_file[k]}\")\n        else:\n            print(f\"{k:40} : {cd_h_of_file[k]}\")\n    pretty_print_header(\"LOCAL HEADER\")\n    for k in local_header_of_file:\n        print(f\"{k:40} : {local_header_of_file[k]}\")\n\n\ndef show_and_save_info_of_headers(entries, apk_name, header_type: str, export: bool, show: bool):\n    \"\"\"\n    Print information for each entry for the central directory header and allow to possibly export to JSON.\n\n    :param entries: The dictionary with all the entries for the central directory\n    :type entries: dict\n    :param apk_name: String with the name of the APK, so it can be used for the export.\n    :type apk_name: str\n    :param header_type: What type of header that is, either central_directory or local, to be used for the export\n    :type header_type: str\n    :param export: Boolean for exporting or not to JSON\n    :type export: bool\n    :param show: Boolean for printing or not the entries\n    :type show: bool\n    \"\"\"\n    if show:\n        for entry in entries:\n            pretty_print_header(entry)\n            print(entries[entry])\n    if export:\n        save_to_json(f\"{apk_name}_{header_type}_header.json\", entries)\n"
  },
  {
    "path": "libs/apkInspector/helpers.py",
    "content": "import json\n\n\ndef pretty_print_header(header_text, width=50, char='-'):\n    \"\"\"\n    Formatting output used for the CLI\n\n    :param header_text: The text to be displayed\n    :type header_text: str\n    :param width: total width of the display\n    :type width: int\n    :param char: which char to be used as a filler\n    :type char: str\n    \"\"\"\n    padding = max(0, width - len(header_text)) // 2\n    formatted_header = f\"\\n{char * padding} {header_text} {char * padding}\"\n    print(formatted_header)\n\n\ndef save_data_to_file(filename, data):\n    \"\"\"\n    Write data to file\n\n    :param data: the actual data\n    :type data: bytes\n    :param filename: file to be saved in\n    :type filename: str\n    \"\"\"\n    try:\n        with open(filename, 'wb') as output_file:\n            output_file.write(data)\n        print(f\"Data saved to {filename}\")\n    except Exception as e:\n        print(f\"Error while saving data to {filename}: {e}\")\n\n\ndef save_to_json(filename, dictionary):\n    \"\"\"\n    Simple method to save a dictionary as JSON into the filename.\n\n    :param filename: the name of the file to be saved as\n    :type filename: str\n    :param dictionary: the dictionary to be saved as JSON\n    :type dictionary: dict\n    \"\"\"\n    with open(filename, \"w\") as h_file:\n        json.dump(dictionary, h_file, indent=4)\n\n\ndef escape_xml_entities(data):\n    \"\"\"\n    Escaping characters that cant be included within an XML file.\n\n    :param data: The string to escape\n    :type data: str\n    :return: The escaped output\n    :rtype: str\n    \"\"\"\n    replacements = {\n        '<': '&lt;',\n        '>': '&gt;',\n        '&': '&amp;',\n        '\"': '&quot;',\n        \"'\": '&apos;'\n    }\n    return ''.join(replacements.get(c, c) for c in data)"
  },
  {
    "path": "libs/apkInspector/indicators.py",
    "content": "import io\nimport logging\nimport struct\n\nfrom .extract import extract_file_based_on_header_info\nfrom .headers import ZipEntry\nfrom .axml import ResChunkHeader, StringPoolType, XmlResourceMapType, XmlStartElement, ManifestStruct, ResXMLHeader, \\\n    read_remaining\n\n\ndef count_eocd(apk_file):\n    \"\"\"\n    Counter for the number of time the end of central directory record was found.\n\n    :param apk_file: The APK file e.g. with open('test.apk', 'rb') as apk_file\n    :type apk_file: bytesIO\n    :return: The count of how many times the end of central directory record was found\n    :rtype: int\n    \"\"\"\n    apk_file.seek(0)\n    content = apk_file.read()\n    return content.count(b'\\x50\\x4b\\x05\\x06')\n\n\ndef zip_tampering_indicators(apk_file, strict: bool):\n    \"\"\"\n    Method to check the for indicators of tampering in the ZIP structure of the APK. These tamperings in the ZIP\n    structure, serve as a method of evasion against static analysis tools.\n\n    :param apk_file: The APK file e.g. with open('test.apk', 'rb') as apk_file\n    :type apk_file: bytesIO\n    :param strict: Whether to be checking strictly or not. Utilizing the application set that was used also for the tests here https://github.com/erev0s/apkInspector/tree/main/tests/top_apps, we tested what kind of indicators would be returned. It turns out that in some cases the local header and the central directory entry for the same file do not have the same values for some keys. So the strict checking was added, to be able to exclude these rare but possible occasions.\n    :type strict: bool\n    :return: Returns a dictionary with the detected indicators.\n    :rtype: dict\n    \"\"\"\n    zip_tampering_indicators_dict = {}\n    if strict:\n        # This is added as strict as a few legitimate APKs do have it for some reason\n        count = count_eocd(apk_file)\n        if count > 1:\n            zip_tampering_indicators_dict['eocd_count'] = count\n    zipentry_dict = ZipEntry.parse(apk_file).to_dict()\n    empty_keys = any(k == \"\" or k is None for k in zipentry_dict[\"central_directory\"].keys())\n    if empty_keys:\n        zip_tampering_indicators_dict['empty_keys'] = empty_keys\n    unique_keys = list(zipentry_dict[\"central_directory\"].keys() ^ zipentry_dict[\"local_headers\"].keys())\n    common_keys = list(set(zipentry_dict[\"central_directory\"].keys()) & set(zipentry_dict[\"local_headers\"].keys()))\n    if unique_keys:\n        zip_tampering_indicators_dict['unique_entries'] = unique_keys\n    for key in common_keys:\n        cd_entry = zipentry_dict[\"central_directory\"][key]\n        lh_entry = zipentry_dict[\"local_headers\"][key]\n        temp = {}\n        if cd_entry['compression_method'] not in [0, 8]:\n            temp['central compression method'] = cd_entry['compression_method']\n        if lh_entry['compression_method'] not in [0, 8]:\n            temp['local compression method'] = lh_entry['compression_method']\n        if cd_entry['compression_method'] not in [0, 8] or lh_entry['compression_method'] not in [0, 8]:\n            indicator = \\\n                extract_file_based_on_header_info(apk_file, lh_entry, cd_entry)[\n                    1]\n            temp['actual compression method'] = indicator\n        df_keys = local_and_central_header_discrepancies(cd_entry, lh_entry, strict)\n        if df_keys:\n            temp['differing headers'] = df_keys\n        if not temp:\n            continue\n        zip_tampering_indicators_dict[key] = temp\n    return zip_tampering_indicators_dict\n\n\ndef local_and_central_header_discrepancies(dict1, dict2, strict: bool):\n    \"\"\"\n    Checking discrepancies between local header values and central directory values\n\n    :param dict1: the central directory dictionary\n    :type dict1: dict\n    :param dict2: the local headers dictionary\n    :type dict2: dict\n    :param strict: Boolean for strict checking the headers or not\n    :type strict: bool\n    :return: Returns a list with the common keys between the dictionaries that have different values.\n    :rtype: list\n    \"\"\"\n    common_keys = set(dict1.keys()) & set(dict2.keys())\n    differences = {key: (dict1[key], dict2[key]) for key in common_keys if dict1[key] != dict2[key]}\n    # Display the keys with differing values\n    keys = []\n    for key, values in dict(sorted(differences.items())).items():\n        # strict checking or not: excluding these as they differ often\n        if not strict and key in ['extra_field', 'extra_field_length', 'crc32_of_uncompressed_data', 'compressed_size',\n                                  'uncompressed_size']:\n            continue\n        keys.append(key)\n    return keys\n\n\ndef process_elements_indicators(file):\n    \"\"\"\n    It starts processing the remaining chunks **after** the resource map chunk.\n    It also returns whether dummy data have been found between the elements, so it can be reported that the apk employed\n    this evasion technique. The difference between the process_elements method found in the axml module is that in this\n    case it does not take into account the total size of the element as stated in the header, but tries to parse the\n    contents regardless. This means that it will detect any dummy data injected after the actual data.\n\n    :param file: the axml that will be processed\n    :type file: BytesIO\n    :return: Returns all the elements found as their corresponding classes and whether dummy data were found in between.\n    :rtype: set(list, set(bool, bool))\n    \"\"\"\n    elements = []\n    dummy_data_between_elements = False\n    wrong_end_namespace_size = False\n    unknown_chunk_type = False\n    min_size = 8\n    while True:\n        cur_pos = file.tell()\n        if file.getbuffer().nbytes < cur_pos + min_size:\n            # we reached the end of the file\n            break\n        _type, _header_size, _size = struct.unpack('<HHL', file.read(8))\n        file.seek(cur_pos)\n        if not (min_size <= _header_size <= _size):\n            if _type == 257 and _size < min_size:\n                wrong_end_namespace_size = True\n                file.read(24)\n                continue\n            file.seek(cur_pos + 1)\n            dummy_data_between_elements = True\n            continue\n        res_node = ResXMLHeader.parse(file)\n        if res_node.header is None:\n            break\n        tail = read_remaining(file, res_node.header)\n        raw_chunk = res_node.header.data + res_node.data + tail\n        elem = ManifestStruct.parse_next_header(io.BytesIO(raw_chunk))\n        if isinstance(elem, dict) and \"raw\" in elem:\n            unknown_chunk_type = True\n            continue\n\n        elements.append(elem)\n    return elements, (dummy_data_between_elements, wrong_end_namespace_size, unknown_chunk_type)\n\n\ndef manifest_tampering_indicators(manifest):\n    \"\"\"\n    Method to check for indicators of tampering in the AndroidManifest.xml\n\n    :param manifest: The AndroidManifest file to check\n    :type manifest: bytesIO\n    :return: Returns a dictionary with the indicators of tampering for the AndroidManifest\n    :rtype: dict\n    \"\"\"\n    chunkHeader = ResChunkHeader.parse(manifest)\n    manifest_tampering_indicators_dict = {}\n    if chunkHeader.type != 3:\n        manifest_tampering_indicators_dict['unexpected_starting_signature_of_androidmanifest'] = hex(chunkHeader.type)\n    string_pool = StringPoolType.parse(manifest)\n    if len(string_pool.string_offsets) != string_pool.str_header.string_count:\n        manifest_tampering_indicators_dict['string_pool'] = {'string_count': string_pool.str_header.string_count,\n                                                             'real_string_count': len(string_pool.string_offsets)}\n    XmlResourceMapType.parse(manifest)\n    elements, dummy = process_elements_indicators(manifest)\n    for element in elements:\n        if isinstance(element, XmlStartElement):\n            for attr in element.attributes:\n                if element.attrext[3] != 20:\n                    manifest_tampering_indicators_dict['unexpected_attribute_size'] = True\n                if element.attrext[2] != 20:\n                    manifest_tampering_indicators_dict['unexpected_attribute_start'] = True\n                if 0 <= attr.name_index < len(string_pool.string_list):\n                    if string_pool.string_list[attr.name_index] == \"\":\n                        manifest_tampering_indicators_dict['unexpected_attribute_names'] = True\n    if dummy[0]:\n        manifest_tampering_indicators_dict['invalid_data_between_elements'] = True\n    if dummy[1]:\n        manifest_tampering_indicators_dict['zero_size_header_for_namespace_end_nodes'] = True\n    if dummy[2]:\n        manifest_tampering_indicators_dict['unknown_chunk_type'] = True\n    return manifest_tampering_indicators_dict\n\n\ndef apk_tampering_check(apk_file, strict: bool):\n    \"\"\"\n    Method to combine the check for tampering in the zip structure and in the AndroidManifest and return the results.\n\n    :param apk_file: The apk file to check\n    :type apk_file: bytesIO\n    :param strict: A boolean to strictly check all fields or not. Suggested value: False\n    :type strict: bool\n    :return: Returns a combined dictionary with the results from the zip_tampering_indicators and the manifest_tampering_indicators\n    :rtype: dict\n    \"\"\"\n    zip_tampering_indicators_dict = zip_tampering_indicators(apk_file, strict)\n    zipentry = ZipEntry.parse(apk_file)\n    cd_h_of_file = zipentry.get_central_directory_entry_dict(\"AndroidManifest.xml\")\n    local_header_of_file = zipentry.get_local_header_dict(\"AndroidManifest.xml\")\n    manifest = io.BytesIO(extract_file_based_on_header_info(apk_file, local_header_of_file, cd_h_of_file)[0])\n    manifest_tampering_indicators_dict = manifest_tampering_indicators(manifest)\n    return {'zip tampering': zip_tampering_indicators_dict, 'manifest tampering': manifest_tampering_indicators_dict}\n"
  },
  {
    "path": "libs/apkInspectorCLI/__init__.py",
    "content": "\n"
  },
  {
    "path": "libs/apkInspectorCLI/main.py",
    "content": "import argparse\nimport io\nimport os\n\nfrom apkInspector import __version__ as version\nfrom apkInspector.extract import extract_file_based_on_header_info, extract_all_files_from_central_directory\nfrom apkInspector.headers import print_headers_of_filename, ZipEntry, show_and_save_info_of_headers\nfrom apkInspector.helpers import save_data_to_file, pretty_print_header\nfrom apkInspector.indicators import apk_tampering_check\nfrom apkInspector.axml import get_manifest\n\n\ndef print_nested_dict(dictionary, parent_key=''):\n    for key, value in dictionary.items():\n        if isinstance(value, dict):\n            print_nested_dict(value, parent_key=f\"{parent_key}\")\n        else:\n            full_key = f\"{parent_key}->{key}\" if parent_key else key\n            print(f\"{full_key}: {value}\")\n\n\ndef get_apk_files(path):\n    # If the path is a single file, return it as a list if it's an APK\n    if os.path.isfile(path):\n        return [path]\n\n    # If the path is a directory, return a list of all APK files in it\n    elif os.path.isdir(path):\n        return [os.path.join(path, f) for f in os.listdir(path) if\n                f.endswith('.apk') and os.path.isfile(os.path.join(path, f))]\n\n    # If the path is invalid or not an APK file, return an empty list\n    return []\n\n\ndef main():\n    parser = argparse.ArgumentParser(description='apkInspector is a tool designed to provide detailed insights into '\n                                                 'the zip structure of APK files, offering the '\n                                                 'capability to extract content and decode the AndroidManifest.xml '\n                                                 'file.')\n    parser.add_argument('-apk', help='A single APK to inspect or a directory where multiple APKs may reside.')\n    parser.add_argument('-f', '--filename', help='Filename to provide info for')\n    parser.add_argument('-ll', '--list-local', action='store_true', help='List all files by name from local headers')\n    parser.add_argument('-lc', '--list-central', action='store_true', help='List all files by name from central '\n                                                                           'directory header')\n    parser.add_argument('-la', '--list-all', action='store_true',\n                        help='List all files from both central directory and local headers')\n    parser.add_argument('-e', '--export', action='store_true',\n                        help='Export to JSON. What you list from the other flags, will be exported')\n    parser.add_argument('-x', '--extract', action='store_true', help='Attempt to extract the file specified by the -f '\n                                                                     'flag')\n    parser.add_argument('-xa', '--extract-all', action='store_true', help='Attempt to extract all files detected in '\n                                                                          'the central directory header')\n    parser.add_argument('-m', '--manifest', action='store_true',\n                        help='Extract and decode the AndroidManifest.xml')\n    parser.add_argument('-sm', '--specify-manifest', help='Pass an encoded AndroidManifest.xml file to be decoded')\n    parser.add_argument('-a', '--analyze', action='store_true',\n                        help='Check an APK for static analysis evasion techniques')\n    parser.add_argument('-v', '--version', action='store_true', help='Retrieves version information')\n    args = parser.parse_args()\n\n    if args.version:\n        mm = \"\"\"\n#                 _     _____                                 _                \n#                | |   |_   _|                               | |               \n#    __ _  _ __  | | __  | |   _ __   ___  _ __    ___   ___ | |_   ___   _ __ \n#   / _` || '_ \\ | |/ /  | |  | '_ \\ / __|| '_ \\  / _ \\ / __|| __| / _ \\ | '__|\n#  | (_| || |_) ||   <  _| |_ | | | |\\__ \\| |_) ||  __/| (__ | |_ | (_) || |   \n#   \\__,_|| .__/ |_|\\_\\ \\___/ |_| |_||___/| .__/  \\___| \\___| \\__| \\___/ |_|   \n#         | |                             | |                                  \n#         |_|                             |_|                                  \n\"\"\"\n        print(mm)\n        print(f\"apkInspector Library Version: {version}\")\n        print(f\"Copyright 2025 erev0s <projects@erev0s.com>\\n\")\n        return\n    print(f\"apkInspector Version: {version}\")\n    print(f\"Copyright 2025 erev0s <projects@erev0s.com>\\n\")\n    if args.apk is None and args.specify_manifest is None:\n        parser.error('APK file or AndroidManifest.xml file is required')\n    if not (args.specify_manifest is None) != (args.apk is None):\n        parser.error(\n            'Please specify an apk file with flag \"-apk\" or an AndroidManifest.xml file with flag \"-sm\", but not both.')\n    if args.apk:\n        apk_files = get_apk_files(args.apk)\n        if not apk_files:\n            print(f\"No APK files found at: {args.apk}\")\n            return\n        for apk in apk_files:\n            pretty_print_header(f\"Results for {apk}:\")\n            apk_name = os.path.splitext(apk)[0]\n            with open(apk, 'rb') as apk_file:\n                zipentry = ZipEntry.parse(apk_file)\n                if args.filename and args.extract:\n                    cd_h_of_file = zipentry.get_central_directory_entry_dict(args.filename)\n                    if cd_h_of_file is None:\n                        print(f\"It appears that file: {args.filename} is not among the entries of the central directory!\")\n                        return\n                    local_header_of_file = zipentry.get_local_header_dict(args.filename)\n                    print_headers_of_filename(cd_h_of_file, local_header_of_file)\n                    extracted_data = extract_file_based_on_header_info(apk_file, local_header_of_file, cd_h_of_file)[0]\n                    save_data_to_file(f\"EXTRACTED_{args.filename}\", extracted_data)\n                elif args.filename:\n                    cd_h_of_file = zipentry.get_central_directory_entry_dict(args.filename)\n                    if cd_h_of_file is None:\n                        print(f\"It appears that file: {args.filename} is not among the entries of the central directory!\")\n                        return\n                    local_header_of_file = zipentry.get_local_header_dict(args.filename)\n                    print_headers_of_filename(cd_h_of_file, local_header_of_file)\n                elif args.extract_all:\n                    print(f\"Number of entries: {len(zipentry.central_directory.entries)}\")\n                    if not extract_all_files_from_central_directory(apk_file, zipentry.to_dict()[\"central_directory\"], zipentry.to_dict()[\"local_headers\"], apk_name):\n                        print(f\"Extraction successful for: {apk_name}\")\n                elif args.list_local:\n                    show_and_save_info_of_headers(zipentry.to_dict()[\"local_headers\"], apk_name, \"local\", args.export, True)\n                    print(f\"Local headers list complete. Export: {args.export}\")\n                elif args.list_central:\n                    show_and_save_info_of_headers(zipentry.to_dict()[\"central_directory\"], apk_name, \"central\", args.export, True)\n                    print(f\"Central header list complete. Export: {args.export}\")\n                elif args.list_all:\n                    show_and_save_info_of_headers(zipentry.to_dict()[\"central_directory\"], apk_name, \"local\", args.export, True)\n                    show_and_save_info_of_headers(zipentry.to_dict()[\"local_headers\"], apk_name, \"local\", args.export, True)\n                    print(f\"Central and local headers list complete. Export: {args.export}\")\n                elif args.manifest:\n                    cd_h_of_file = zipentry.get_central_directory_entry_dict(\"AndroidManifest.xml\")\n                    local_header_of_file = zipentry.get_local_header_dict(\"AndroidManifest.xml\")\n                    extracted_data = io.BytesIO(\n                        extract_file_based_on_header_info(apk_file, local_header_of_file, cd_h_of_file)[0])\n                    manifest = get_manifest(extracted_data)\n                    with open(\"decoded_AndroidManifest.xml\", \"w\", encoding=\"utf-8\") as xml_file:\n                        xml_file.write(manifest)\n                    print(\"AndroidManifest was saved as: decoded_AndroidManifest.xml\")\n                elif args.analyze:\n                    tamperings = apk_tampering_check(zipentry.zip, False)\n                    if tamperings['zip tampering']:\n                        print(\n                            f\"\\nThe zip structure was tampered with using the following patterns:\\n\")\n                        print_nested_dict(tamperings['zip tampering'])\n                    else:\n                        print(f\"No files were detected were a tampering in the zip structure was present.\")\n                    if tamperings['manifest tampering']:\n                        print(f\"\\n\\nThe AndroidManifest.xml file was tampered using the following patterns:\\n\")\n                        print_nested_dict(tamperings['manifest tampering'])\n                    else:\n                        print(f\"The AndroidManifest.xml file does not seem to be tampered structurally.\")\n                else:\n                    parser.print_help()\n    elif args.specify_manifest:\n        with open(args.specify_manifest, 'rb') as enc_manifest:\n            manifest = get_manifest(io.BytesIO(enc_manifest.read()))\n            with open(\"decoded_AndroidManifest.xml\", \"w\", encoding=\"utf-8\") as xml_file:\n                xml_file.write(manifest)\n            print(\"AndroidManifest was saved as: decoded_AndroidManifest.xml\")\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "libs/apkinspector-1.3.6.dist-info/METADATA",
    "content": "Metadata-Version: 2.4\nName: apkInspector\nVersion: 1.3.6\nSummary: apkInspector is a tool designed to provide detailed insights into the zip structure of APK files, offering the capability to extract content and decode the AndroidManifest.xml file.\nLicense: Apache-2.0\nLicense-File: LICENSE\nAuthor: erev0s\nAuthor-email: projects@erev0s.com\nRequires-Python: >=3.5,<4.0\nClassifier: License :: OSI Approved :: Apache Software License\nClassifier: Programming Language :: Python :: 3\nClassifier: Programming Language :: Python :: 3.5\nClassifier: Programming Language :: Python :: 3.6\nClassifier: Programming Language :: Python :: 3.7\nClassifier: Programming Language :: Python :: 3.8\nClassifier: Programming Language :: Python :: 3.9\nClassifier: Programming Language :: Python :: 3.10\nClassifier: Programming Language :: Python :: 3.11\nClassifier: Programming Language :: Python :: 3.12\nClassifier: Programming Language :: Python :: 3.13\nClassifier: Programming Language :: Python :: 3.14\nProject-URL: Repository, https://github.com/erev0s/apkInspector\nDescription-Content-Type: text/markdown\n\n![apkInspector](https://i.imgur.com/hTzyIDG.png) \n![PyPI - Version](https://img.shields.io/pypi/v/apkInspector)  [![CI](https://github.com/erev0s/apkInspector/actions/workflows/ci.yml/badge.svg)](https://github.com/erev0s/apkInspector/actions/workflows/ci.yml)  [![codecov](https://codecov.io/gh/erev0s/apkInspector/graph/badge.svg?token=A3YXHGXUXF)](https://codecov.io/gh/erev0s/apkInspector)\n# apkInspector\napkInspector is a tool designed to provide detailed insights into the zip structure of APK files, offering the capability to extract content and decode the AndroidManifest.xml file. What sets APKInspector apart is its adherence to the zip specification during APK parsing, eliminating the need for reliance on external libraries. This independence, allows APKInspector to be highly adaptable, effectively emulating Android's installation process for APKs that cannot be parsed using standard libraries. The main goal is to enable users to conduct static analysis on APKs that employ evasion techniques, especially when conventional methods prove ineffective.\n\nPlease check [this blog post](https://erev0s.com/blog/unmasking-evasive-threats-with-apkinspector/) for more details.\n\n## How to install\n[apkInspector is available through PyPI](https://pypi.org/project/apkInspector/)\n~~~~\npip install apkInspector\n~~~~\n\nor you can clone this repository and build and install locally:\n~~~~\ngit clone https://github.com/erev0s/apkInspector.git\ncd apkInspector\npoetry build\npip install dist/apkInspector-Version_here.tar.gz\n~~~~\n\n## Documentation\nDocumentation created based on the docstrings, is available through Sphinx:  \nhttps://erev0s.github.io/apkInspector/\n\n\n## CLI\napkInspector offers a command line tool with the same name, with the following options;\n\n~~~~\n$ apkInspector -h\nusage: apkInspector [-h] [-apk APK] [-f FILENAME] [-ll] [-lc] [-la] [-e] [-x] [-xa] [-m] [-sm SPECIFY_MANIFEST] [-a] [-v]\n\napkInspector is a tool designed to provide detailed insights into the zip structure of APK files, offering the capability to extract content and decode the AndroidManifest.xml file.\n\noptions:\n  -h, --help            show this help message and exit\n  -apk APK              A single APK to inspect or a directory where multiple APKs may reside.\n  -f FILENAME, --filename FILENAME\n                        Filename to provide info for\n  -ll, --list-local     List all files by name from local headers\n  -lc, --list-central   List all files by name from central directory header\n  -la, --list-all       List all files from both central directory and local headers\n  -e, --export          Export to JSON. What you list from the other flags, will be exported\n  -x, --extract         Attempt to extract the file specified by the -f flag\n  -xa, --extract-all    Attempt to extract all files detected in the central directory header\n  -m, --manifest        Extract and decode the AndroidManifest.xml\n  -sm SPECIFY_MANIFEST, --specify-manifest SPECIFY_MANIFEST\n                        Pass an encoded AndroidManifest.xml file to be decoded\n  -a, --analyze         Check an APK for static analysis evasion techniques\n  -v, --version         Retrieves version information\n~~~~\n\n\n## Library\nThe library component of apkInspector is designed with extensibility in mind, allowing other tools to seamlessly integrate its functionality. This flexibility empowers developers to leverage the capabilities of apkInspector within their own applications and workflows. To facilitate clear comprehension and ease of use, comprehensive docstrings accompany all primary methods, providing valuable insights into their functionality, expected arguments, and return values. These detailed explanations serve as invaluable guides, ensuring that developers can quickly grasp the inner workings of apkInspector's core features and smoothly incorporate them into their projects.\n\n### Features offered\n - Find end of central directory record\n - Parse central directory of APK and get details about each entry\n - Get details local header for each entry\n - Extract single or all files within an APK\n - Decode AndroidManifest.xml file\n - Identify Tampering Indicators:\n   - End of Central Directory record defined multiple times\n   - Unknown compression methods\n   - Compressed entry with empty filename\n   - Unexpected starting signature of AndroidManifest.xml\n   - Tampered StringCount value\n   - Strings surpassing maximum length\n   - Invalid data between elements\n   - Unexpected attribute start\n   - Unexpected attribute size\n   - Unexpected attribute names or values\n   - Zero size header for namespace end nodes\n\n\nThe command-line interface (CLI) serves as a practical illustration of how the methods provided by the library have been employed.\n\n## Reliability\nPlease take [a look at the results](https://github.com/erev0s/apkInspector/tree/main/tests/top_apps) from testing apkInspector against a set of top Play Store applications\n\n## Planned to-do\n - Improve documentation (add examples)\n - Improve code coverage\n\n## Contributions\nWe welcome contributions from the open-source community to help improve and enhance apkInspector. Whether you're a developer, tester, or documentation enthusiast, your contributions are valuable.\n\n## :rocket: apkInspector is being used by :rocket: : \n - [androguard](https://github.com/androguard/androguard/)\n - [medusa](https://github.com/Ch0pin/medusa)\n\n## Presentation of the tool and the research behind it\n - Defcon 32 | [PDF](docs/presentation/apkinspector-Defon32-presentation.pdf)\n\n## Disclaimer\nIt should be kept in mind that apkInspector is an evolving project, a work in progress. As such, users should anticipate occasional bugs and anticipate updates and upgrades as the tool continues to mature and enhance its functionality. Your feedback and contributions to apkInspector are highly appreciated as we work together to improve and refine its capabilities.\n"
  },
  {
    "path": "libs/apkinspector-1.3.6.dist-info/RECORD",
    "content": "apkInspector/__init__.py,sha256=5ZbAQtod5QalTI1C2N07edlxplzG_Q2XvGOSyOok4uA,22\napkInspector/axml.py,sha256=H3lCARrjCG1qXSZKaDAE1SlA5qusFo0_opyJMe1MYnQ,42979\napkInspector/extract.py,sha256=l67RV3-4N-UAj5KrJ2kNQcOqhSgg4giKz3xoIWznUjw,5525\napkInspector/headers.py,sha256=ifCdPus6E-D5WNDT4dC8TnT_Ox8Td8QpJrgunKHDdmQ,27490\napkInspector/helpers.py,sha256=jOwnhbF045nLGqAAHM0J6BFOQiKZqrbn4Wl87IRcXmY,1717\napkInspector/indicators.py,sha256=oyx3bRs8W_r8G0IyGjv1sh1LWJJZWxZysaqFUumSBL8,9776\napkInspectorCLI/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1\napkInspectorCLI/main.py,sha256=bDVu6l2gUYgbC48zJ-mc0p_ffDlMnkuIqT_Y3hSxPO0,9647\napkinspector-1.3.6.dist-info/METADATA,sha256=bx9ts_-ZtNOMvRCL4RIIkGcwVFsbW-YNvHO-YZBI2B0,6972\napkinspector-1.3.6.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88\napkinspector-1.3.6.dist-info/entry_points.txt,sha256=372URr2Adghe3EWniKARBJtFboxJfbfIrR9jKjtXmVY,58\napkinspector-1.3.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357\napkinspector-1.3.6.dist-info/RECORD,,\n"
  },
  {
    "path": "libs/apkinspector-1.3.6.dist-info/WHEEL",
    "content": "Wheel-Version: 1.0\nGenerator: poetry-core 2.2.1\nRoot-Is-Purelib: true\nTag: py3-none-any\n"
  },
  {
    "path": "libs/apkinspector-1.3.6.dist-info/entry_points.txt",
    "content": "[console_scripts]\napkInspector=apkInspectorCLI.main:main\n\n"
  },
  {
    "path": "libs/apkinspector-1.3.6.dist-info/licenses/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "libs/asn1crypto/__init__.py",
    "content": "# coding: utf-8\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom .version import __version__, __version_info__\n\n__all__ = [\n    '__version__',\n    '__version_info__',\n    'load_order',\n]\n\n\ndef load_order():\n    \"\"\"\n    Returns a list of the module and sub-module names for asn1crypto in\n    dependency load order, for the sake of live reloading code\n\n    :return:\n        A list of unicode strings of module names, as they would appear in\n        sys.modules, ordered by which module should be reloaded first\n    \"\"\"\n\n    return [\n        'asn1crypto._errors',\n        'asn1crypto._int',\n        'asn1crypto._ordereddict',\n        'asn1crypto._teletex_codec',\n        'asn1crypto._types',\n        'asn1crypto._inet',\n        'asn1crypto._iri',\n        'asn1crypto.version',\n        'asn1crypto.pem',\n        'asn1crypto.util',\n        'asn1crypto.parser',\n        'asn1crypto.core',\n        'asn1crypto.algos',\n        'asn1crypto.keys',\n        'asn1crypto.x509',\n        'asn1crypto.crl',\n        'asn1crypto.csr',\n        'asn1crypto.ocsp',\n        'asn1crypto.cms',\n        'asn1crypto.pdf',\n        'asn1crypto.pkcs12',\n        'asn1crypto.tsp',\n        'asn1crypto',\n    ]\n"
  },
  {
    "path": "libs/asn1crypto/_errors.py",
    "content": "# coding: utf-8\n\n\"\"\"\nExports the following items:\n\n - unwrap()\n - APIException()\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport re\nimport textwrap\n\n\nclass APIException(Exception):\n    \"\"\"\n    An exception indicating an API has been removed from asn1crypto\n    \"\"\"\n\n    pass\n\n\ndef unwrap(string, *params):\n    \"\"\"\n    Takes a multi-line string and does the following:\n\n     - dedents\n     - converts newlines with text before and after into a single line\n     - strips leading and trailing whitespace\n\n    :param string:\n        The string to format\n\n    :param *params:\n        Params to interpolate into the string\n\n    :return:\n        The formatted string\n    \"\"\"\n\n    output = textwrap.dedent(string)\n\n    # Unwrap lines, taking into account bulleted lists, ordered lists and\n    # underlines consisting of = signs\n    if output.find('\\n') != -1:\n        output = re.sub('(?<=\\\\S)\\n(?=[^ \\n\\t\\\\d\\\\*\\\\-=])', ' ', output)\n\n    if params:\n        output = output % params\n\n    output = output.strip()\n\n    return output\n"
  },
  {
    "path": "libs/asn1crypto/_inet.py",
    "content": "# coding: utf-8\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport socket\nimport struct\n\nfrom ._errors import unwrap\nfrom ._types import byte_cls, bytes_to_list, str_cls, type_name\n\n\ndef inet_ntop(address_family, packed_ip):\n    \"\"\"\n    Windows compatibility shim for socket.inet_ntop().\n\n    :param address_family:\n        socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6\n\n    :param packed_ip:\n        A byte string of the network form of an IP address\n\n    :return:\n        A unicode string of the IP address\n    \"\"\"\n\n    if address_family not in set([socket.AF_INET, socket.AF_INET6]):\n        raise ValueError(unwrap(\n            '''\n            address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),\n            not %s\n            ''',\n            repr(socket.AF_INET),\n            repr(socket.AF_INET6),\n            repr(address_family)\n        ))\n\n    if not isinstance(packed_ip, byte_cls):\n        raise TypeError(unwrap(\n            '''\n            packed_ip must be a byte string, not %s\n            ''',\n            type_name(packed_ip)\n        ))\n\n    required_len = 4 if address_family == socket.AF_INET else 16\n    if len(packed_ip) != required_len:\n        raise ValueError(unwrap(\n            '''\n            packed_ip must be %d bytes long - is %d\n            ''',\n            required_len,\n            len(packed_ip)\n        ))\n\n    if address_family == socket.AF_INET:\n        return '%d.%d.%d.%d' % tuple(bytes_to_list(packed_ip))\n\n    octets = struct.unpack(b'!HHHHHHHH', packed_ip)\n\n    runs_of_zero = {}\n    longest_run = 0\n    zero_index = None\n    for i, octet in enumerate(octets + (-1,)):\n        if octet != 0:\n            if zero_index is not None:\n                length = i - zero_index\n                if length not in runs_of_zero:\n                    runs_of_zero[length] = zero_index\n                longest_run = max(longest_run, length)\n                zero_index = None\n        elif zero_index is None:\n            zero_index = i\n\n    hexed = [hex(o)[2:] for o in octets]\n\n    if longest_run < 2:\n        return ':'.join(hexed)\n\n    zero_start = runs_of_zero[longest_run]\n    zero_end = zero_start + longest_run\n\n    return ':'.join(hexed[:zero_start]) + '::' + ':'.join(hexed[zero_end:])\n\n\ndef inet_pton(address_family, ip_string):\n    \"\"\"\n    Windows compatibility shim for socket.inet_ntop().\n\n    :param address_family:\n        socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6\n\n    :param ip_string:\n        A unicode string of an IP address\n\n    :return:\n        A byte string of the network form of the IP address\n    \"\"\"\n\n    if address_family not in set([socket.AF_INET, socket.AF_INET6]):\n        raise ValueError(unwrap(\n            '''\n            address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),\n            not %s\n            ''',\n            repr(socket.AF_INET),\n            repr(socket.AF_INET6),\n            repr(address_family)\n        ))\n\n    if not isinstance(ip_string, str_cls):\n        raise TypeError(unwrap(\n            '''\n            ip_string must be a unicode string, not %s\n            ''',\n            type_name(ip_string)\n        ))\n\n    if address_family == socket.AF_INET:\n        octets = ip_string.split('.')\n        error = len(octets) != 4\n        if not error:\n            ints = []\n            for o in octets:\n                o = int(o)\n                if o > 255 or o < 0:\n                    error = True\n                    break\n                ints.append(o)\n\n        if error:\n            raise ValueError(unwrap(\n                '''\n                ip_string must be a dotted string with four integers in the\n                range of 0 to 255, got %s\n                ''',\n                repr(ip_string)\n            ))\n\n        return struct.pack(b'!BBBB', *ints)\n\n    error = False\n    omitted = ip_string.count('::')\n    if omitted > 1:\n        error = True\n    elif omitted == 0:\n        octets = ip_string.split(':')\n        error = len(octets) != 8\n    else:\n        begin, end = ip_string.split('::')\n        begin_octets = begin.split(':')\n        end_octets = end.split(':')\n        missing = 8 - len(begin_octets) - len(end_octets)\n        octets = begin_octets + (['0'] * missing) + end_octets\n\n    if not error:\n        ints = []\n        for o in octets:\n            o = int(o, 16)\n            if o > 65535 or o < 0:\n                error = True\n                break\n            ints.append(o)\n\n        return struct.pack(b'!HHHHHHHH', *ints)\n\n    raise ValueError(unwrap(\n        '''\n        ip_string must be a valid ipv6 string, got %s\n        ''',\n        repr(ip_string)\n    ))\n"
  },
  {
    "path": "libs/asn1crypto/_int.py",
    "content": "# coding: utf-8\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\n\ndef fill_width(bytes_, width):\n    \"\"\"\n    Ensure a byte string representing a positive integer is a specific width\n    (in bytes)\n\n    :param bytes_:\n        The integer byte string\n\n    :param width:\n        The desired width as an integer\n\n    :return:\n        A byte string of the width specified\n    \"\"\"\n\n    while len(bytes_) < width:\n        bytes_ = b'\\x00' + bytes_\n    return bytes_\n"
  },
  {
    "path": "libs/asn1crypto/_iri.py",
    "content": "# coding: utf-8\n\n\"\"\"\nFunctions to convert unicode IRIs into ASCII byte string URIs and back. Exports\nthe following items:\n\n - iri_to_uri()\n - uri_to_iri()\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom encodings import idna  # noqa\nimport codecs\nimport re\nimport sys\n\nfrom ._errors import unwrap\nfrom ._types import byte_cls, str_cls, type_name, bytes_to_list, int_types\n\nif sys.version_info < (3,):\n    from urlparse import urlsplit, urlunsplit\n    from urllib import (\n        quote as urlquote,\n        unquote as unquote_to_bytes,\n    )\n\nelse:\n    from urllib.parse import (\n        quote as urlquote,\n        unquote_to_bytes,\n        urlsplit,\n        urlunsplit,\n    )\n\n\ndef iri_to_uri(value, normalize=False):\n    \"\"\"\n    Encodes a unicode IRI into an ASCII byte string URI\n\n    :param value:\n        A unicode string of an IRI\n\n    :param normalize:\n        A bool that controls URI normalization\n\n    :return:\n        A byte string of the ASCII-encoded URI\n    \"\"\"\n\n    if not isinstance(value, str_cls):\n        raise TypeError(unwrap(\n            '''\n            value must be a unicode string, not %s\n            ''',\n            type_name(value)\n        ))\n\n    scheme = None\n    # Python 2.6 doesn't split properly is the URL doesn't start with http:// or https://\n    if sys.version_info < (2, 7) and not value.startswith('http://') and not value.startswith('https://'):\n        real_prefix = None\n        prefix_match = re.match('^[^:]*://', value)\n        if prefix_match:\n            real_prefix = prefix_match.group(0)\n            value = 'http://' + value[len(real_prefix):]\n        parsed = urlsplit(value)\n        if real_prefix:\n            value = real_prefix + value[7:]\n            scheme = _urlquote(real_prefix[:-3])\n    else:\n        parsed = urlsplit(value)\n\n    if scheme is None:\n        scheme = _urlquote(parsed.scheme)\n    hostname = parsed.hostname\n    if hostname is not None:\n        hostname = hostname.encode('idna')\n    # RFC 3986 allows userinfo to contain sub-delims\n    username = _urlquote(parsed.username, safe='!$&\\'()*+,;=')\n    password = _urlquote(parsed.password, safe='!$&\\'()*+,;=')\n    port = parsed.port\n    if port is not None:\n        port = str_cls(port).encode('ascii')\n\n    netloc = b''\n    if username is not None:\n        netloc += username\n        if password:\n            netloc += b':' + password\n        netloc += b'@'\n    if hostname is not None:\n        netloc += hostname\n    if port is not None:\n        default_http = scheme == b'http' and port == b'80'\n        default_https = scheme == b'https' and port == b'443'\n        if not normalize or (not default_http and not default_https):\n            netloc += b':' + port\n\n    # RFC 3986 allows a path to contain sub-delims, plus \"@\" and \":\"\n    path = _urlquote(parsed.path, safe='/!$&\\'()*+,;=@:')\n    # RFC 3986 allows the query to contain sub-delims, plus \"@\", \":\" , \"/\" and \"?\"\n    query = _urlquote(parsed.query, safe='/?!$&\\'()*+,;=@:')\n    # RFC 3986 allows the fragment to contain sub-delims, plus \"@\", \":\" , \"/\" and \"?\"\n    fragment = _urlquote(parsed.fragment, safe='/?!$&\\'()*+,;=@:')\n\n    if normalize and query is None and fragment is None and path == b'/':\n        path = None\n\n    # Python 2.7 compat\n    if path is None:\n        path = ''\n\n    output = urlunsplit((scheme, netloc, path, query, fragment))\n    if isinstance(output, str_cls):\n        output = output.encode('latin1')\n    return output\n\n\ndef uri_to_iri(value):\n    \"\"\"\n    Converts an ASCII URI byte string into a unicode IRI\n\n    :param value:\n        An ASCII-encoded byte string of the URI\n\n    :return:\n        A unicode string of the IRI\n    \"\"\"\n\n    if not isinstance(value, byte_cls):\n        raise TypeError(unwrap(\n            '''\n            value must be a byte string, not %s\n            ''',\n            type_name(value)\n        ))\n\n    parsed = urlsplit(value)\n\n    scheme = parsed.scheme\n    if scheme is not None:\n        scheme = scheme.decode('ascii')\n\n    username = _urlunquote(parsed.username, remap=[':', '@'])\n    password = _urlunquote(parsed.password, remap=[':', '@'])\n    hostname = parsed.hostname\n    if hostname:\n        hostname = hostname.decode('idna')\n    port = parsed.port\n    if port and not isinstance(port, int_types):\n        port = port.decode('ascii')\n\n    netloc = ''\n    if username is not None:\n        netloc += username\n        if password:\n            netloc += ':' + password\n        netloc += '@'\n    if hostname is not None:\n        netloc += hostname\n    if port is not None:\n        netloc += ':' + str_cls(port)\n\n    path = _urlunquote(parsed.path, remap=['/'], preserve=True)\n    query = _urlunquote(parsed.query, remap=['&', '='], preserve=True)\n    fragment = _urlunquote(parsed.fragment)\n\n    return urlunsplit((scheme, netloc, path, query, fragment))\n\n\ndef _iri_utf8_errors_handler(exc):\n    \"\"\"\n    Error handler for decoding UTF-8 parts of a URI into an IRI. Leaves byte\n    sequences encoded in %XX format, but as part of a unicode string.\n\n    :param exc:\n        The UnicodeDecodeError exception\n\n    :return:\n        A 2-element tuple of (replacement unicode string, integer index to\n        resume at)\n    \"\"\"\n\n    bytes_as_ints = bytes_to_list(exc.object[exc.start:exc.end])\n    replacements = ['%%%02x' % num for num in bytes_as_ints]\n    return (''.join(replacements), exc.end)\n\n\ncodecs.register_error('iriutf8', _iri_utf8_errors_handler)\n\n\ndef _urlquote(string, safe=''):\n    \"\"\"\n    Quotes a unicode string for use in a URL\n\n    :param string:\n        A unicode string\n\n    :param safe:\n        A unicode string of character to not encode\n\n    :return:\n        None (if string is None) or an ASCII byte string of the quoted string\n    \"\"\"\n\n    if string is None or string == '':\n        return None\n\n    # Anything already hex quoted is pulled out of the URL and unquoted if\n    # possible\n    escapes = []\n    if re.search('%[0-9a-fA-F]{2}', string):\n        # Try to unquote any percent values, restoring them if they are not\n        # valid UTF-8. Also, requote any safe chars since encoded versions of\n        # those are functionally different than the unquoted ones.\n        def _try_unescape(match):\n            byte_string = unquote_to_bytes(match.group(0))\n            unicode_string = byte_string.decode('utf-8', 'iriutf8')\n            for safe_char in list(safe):\n                unicode_string = unicode_string.replace(safe_char, '%%%02x' % ord(safe_char))\n            return unicode_string\n        string = re.sub('(?:%[0-9a-fA-F]{2})+', _try_unescape, string)\n\n        # Once we have the minimal set of hex quoted values, removed them from\n        # the string so that they are not double quoted\n        def _extract_escape(match):\n            escapes.append(match.group(0).encode('ascii'))\n            return '\\x00'\n        string = re.sub('%[0-9a-fA-F]{2}', _extract_escape, string)\n\n    output = urlquote(string.encode('utf-8'), safe=safe.encode('utf-8'))\n    if not isinstance(output, byte_cls):\n        output = output.encode('ascii')\n\n    # Restore the existing quoted values that we extracted\n    if len(escapes) > 0:\n        def _return_escape(_):\n            return escapes.pop(0)\n        output = re.sub(b'%00', _return_escape, output)\n\n    return output\n\n\ndef _urlunquote(byte_string, remap=None, preserve=None):\n    \"\"\"\n    Unquotes a URI portion from a byte string into unicode using UTF-8\n\n    :param byte_string:\n        A byte string of the data to unquote\n\n    :param remap:\n        A list of characters (as unicode) that should be re-mapped to a\n        %XX encoding. This is used when characters are not valid in part of a\n        URL.\n\n    :param preserve:\n        A bool - indicates that the chars to be remapped if they occur in\n        non-hex form, should be preserved. E.g. / for URL path.\n\n    :return:\n        A unicode string\n    \"\"\"\n\n    if byte_string is None:\n        return byte_string\n\n    if byte_string == b'':\n        return ''\n\n    if preserve:\n        replacements = ['\\x1A', '\\x1C', '\\x1D', '\\x1E', '\\x1F']\n        preserve_unmap = {}\n        for char in remap:\n            replacement = replacements.pop(0)\n            preserve_unmap[replacement] = char\n            byte_string = byte_string.replace(char.encode('ascii'), replacement.encode('ascii'))\n\n    byte_string = unquote_to_bytes(byte_string)\n\n    if remap:\n        for char in remap:\n            byte_string = byte_string.replace(char.encode('ascii'), ('%%%02x' % ord(char)).encode('ascii'))\n\n    output = byte_string.decode('utf-8', 'iriutf8')\n\n    if preserve:\n        for replacement, original in preserve_unmap.items():\n            output = output.replace(replacement, original)\n\n    return output\n"
  },
  {
    "path": "libs/asn1crypto/_ordereddict.py",
    "content": "# Copyright (c) 2009 Raymond Hettinger\n#\n# Permission is hereby granted, free of charge, to any person\n# obtaining a copy of this software and associated documentation files\n# (the \"Software\"), to deal in the Software without restriction,\n# including without limitation the rights to use, copy, modify, merge,\n# publish, distribute, sublicense, and/or sell copies of the Software,\n# and to permit persons to whom the Software is furnished to do so,\n# subject to the following conditions:\n#\n#     The above copyright notice and this permission notice shall be\n#     included in all copies or substantial portions of the Software.\n#\n#     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n#     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n#     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n#     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n#     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n#     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n#     OTHER DEALINGS IN THE SOFTWARE.\n\nimport sys\n\nif not sys.version_info < (2, 7):\n\n    from collections import OrderedDict\n\nelse:\n\n    from UserDict import DictMixin\n\n    class OrderedDict(dict, DictMixin):\n\n        def __init__(self, *args, **kwds):\n            if len(args) > 1:\n                raise TypeError('expected at most 1 arguments, got %d' % len(args))\n            try:\n                self.__end\n            except AttributeError:\n                self.clear()\n            self.update(*args, **kwds)\n\n        def clear(self):\n            self.__end = end = []\n            end += [None, end, end]  # sentinel node for doubly linked list\n            self.__map = {}          # key --> [key, prev, next]\n            dict.clear(self)\n\n        def __setitem__(self, key, value):\n            if key not in self:\n                end = self.__end\n                curr = end[1]\n                curr[2] = end[1] = self.__map[key] = [key, curr, end]\n            dict.__setitem__(self, key, value)\n\n        def __delitem__(self, key):\n            dict.__delitem__(self, key)\n            key, prev, next_ = self.__map.pop(key)\n            prev[2] = next_\n            next_[1] = prev\n\n        def __iter__(self):\n            end = self.__end\n            curr = end[2]\n            while curr is not end:\n                yield curr[0]\n                curr = curr[2]\n\n        def __reversed__(self):\n            end = self.__end\n            curr = end[1]\n            while curr is not end:\n                yield curr[0]\n                curr = curr[1]\n\n        def popitem(self, last=True):\n            if not self:\n                raise KeyError('dictionary is empty')\n            if last:\n                key = reversed(self).next()\n            else:\n                key = iter(self).next()\n            value = self.pop(key)\n            return key, value\n\n        def __reduce__(self):\n            items = [[k, self[k]] for k in self]\n            tmp = self.__map, self.__end\n            del self.__map, self.__end\n            inst_dict = vars(self).copy()\n            self.__map, self.__end = tmp\n            if inst_dict:\n                return (self.__class__, (items,), inst_dict)\n            return self.__class__, (items,)\n\n        def keys(self):\n            return list(self)\n\n        setdefault = DictMixin.setdefault\n        update = DictMixin.update\n        pop = DictMixin.pop\n        values = DictMixin.values\n        items = DictMixin.items\n        iterkeys = DictMixin.iterkeys\n        itervalues = DictMixin.itervalues\n        iteritems = DictMixin.iteritems\n\n        def __repr__(self):\n            if not self:\n                return '%s()' % (self.__class__.__name__,)\n            return '%s(%r)' % (self.__class__.__name__, self.items())\n\n        def copy(self):\n            return self.__class__(self)\n\n        @classmethod\n        def fromkeys(cls, iterable, value=None):\n            d = cls()\n            for key in iterable:\n                d[key] = value\n            return d\n\n        def __eq__(self, other):\n            if isinstance(other, OrderedDict):\n                if len(self) != len(other):\n                    return False\n                for p, q in zip(self.items(), other.items()):\n                    if p != q:\n                        return False\n                return True\n            return dict.__eq__(self, other)\n\n        def __ne__(self, other):\n            return not self == other\n"
  },
  {
    "path": "libs/asn1crypto/_teletex_codec.py",
    "content": "# coding: utf-8\n\n\"\"\"\nImplementation of the teletex T.61 codec. Exports the following items:\n\n - register()\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport codecs\n\n\nclass TeletexCodec(codecs.Codec):\n\n    def encode(self, input_, errors='strict'):\n        return codecs.charmap_encode(input_, errors, ENCODING_TABLE)\n\n    def decode(self, input_, errors='strict'):\n        return codecs.charmap_decode(input_, errors, DECODING_TABLE)\n\n\nclass TeletexIncrementalEncoder(codecs.IncrementalEncoder):\n\n    def encode(self, input_, final=False):\n        return codecs.charmap_encode(input_, self.errors, ENCODING_TABLE)[0]\n\n\nclass TeletexIncrementalDecoder(codecs.IncrementalDecoder):\n\n    def decode(self, input_, final=False):\n        return codecs.charmap_decode(input_, self.errors, DECODING_TABLE)[0]\n\n\nclass TeletexStreamWriter(TeletexCodec, codecs.StreamWriter):\n\n    pass\n\n\nclass TeletexStreamReader(TeletexCodec, codecs.StreamReader):\n\n    pass\n\n\ndef teletex_search_function(name):\n    \"\"\"\n    Search function for teletex codec that is passed to codecs.register()\n    \"\"\"\n\n    if name != 'teletex':\n        return None\n\n    return codecs.CodecInfo(\n        name='teletex',\n        encode=TeletexCodec().encode,\n        decode=TeletexCodec().decode,\n        incrementalencoder=TeletexIncrementalEncoder,\n        incrementaldecoder=TeletexIncrementalDecoder,\n        streamreader=TeletexStreamReader,\n        streamwriter=TeletexStreamWriter,\n    )\n\n\ndef register():\n    \"\"\"\n    Registers the teletex codec\n    \"\"\"\n\n    codecs.register(teletex_search_function)\n\n\n# http://en.wikipedia.org/wiki/ITU_T.61\nDECODING_TABLE = (\n    '\\u0000'\n    '\\u0001'\n    '\\u0002'\n    '\\u0003'\n    '\\u0004'\n    '\\u0005'\n    '\\u0006'\n    '\\u0007'\n    '\\u0008'\n    '\\u0009'\n    '\\u000A'\n    '\\u000B'\n    '\\u000C'\n    '\\u000D'\n    '\\u000E'\n    '\\u000F'\n    '\\u0010'\n    '\\u0011'\n    '\\u0012'\n    '\\u0013'\n    '\\u0014'\n    '\\u0015'\n    '\\u0016'\n    '\\u0017'\n    '\\u0018'\n    '\\u0019'\n    '\\u001A'\n    '\\u001B'\n    '\\u001C'\n    '\\u001D'\n    '\\u001E'\n    '\\u001F'\n    '\\u0020'\n    '\\u0021'\n    '\\u0022'\n    '\\ufffe'\n    '\\ufffe'\n    '\\u0025'\n    '\\u0026'\n    '\\u0027'\n    '\\u0028'\n    '\\u0029'\n    '\\u002A'\n    '\\u002B'\n    '\\u002C'\n    '\\u002D'\n    '\\u002E'\n    '\\u002F'\n    '\\u0030'\n    '\\u0031'\n    '\\u0032'\n    '\\u0033'\n    '\\u0034'\n    '\\u0035'\n    '\\u0036'\n    '\\u0037'\n    '\\u0038'\n    '\\u0039'\n    '\\u003A'\n    '\\u003B'\n    '\\u003C'\n    '\\u003D'\n    '\\u003E'\n    '\\u003F'\n    '\\u0040'\n    '\\u0041'\n    '\\u0042'\n    '\\u0043'\n    '\\u0044'\n    '\\u0045'\n    '\\u0046'\n    '\\u0047'\n    '\\u0048'\n    '\\u0049'\n    '\\u004A'\n    '\\u004B'\n    '\\u004C'\n    '\\u004D'\n    '\\u004E'\n    '\\u004F'\n    '\\u0050'\n    '\\u0051'\n    '\\u0052'\n    '\\u0053'\n    '\\u0054'\n    '\\u0055'\n    '\\u0056'\n    '\\u0057'\n    '\\u0058'\n    '\\u0059'\n    '\\u005A'\n    '\\u005B'\n    '\\ufffe'\n    '\\u005D'\n    '\\ufffe'\n    '\\u005F'\n    '\\ufffe'\n    '\\u0061'\n    '\\u0062'\n    '\\u0063'\n    '\\u0064'\n    '\\u0065'\n    '\\u0066'\n    '\\u0067'\n    '\\u0068'\n    '\\u0069'\n    '\\u006A'\n    '\\u006B'\n    '\\u006C'\n    '\\u006D'\n    '\\u006E'\n    '\\u006F'\n    '\\u0070'\n    '\\u0071'\n    '\\u0072'\n    '\\u0073'\n    '\\u0074'\n    '\\u0075'\n    '\\u0076'\n    '\\u0077'\n    '\\u0078'\n    '\\u0079'\n    '\\u007A'\n    '\\ufffe'\n    '\\u007C'\n    '\\ufffe'\n    '\\ufffe'\n    '\\u007F'\n    '\\u0080'\n    '\\u0081'\n    '\\u0082'\n    '\\u0083'\n    '\\u0084'\n    '\\u0085'\n    '\\u0086'\n    '\\u0087'\n    '\\u0088'\n    '\\u0089'\n    '\\u008A'\n    '\\u008B'\n    '\\u008C'\n    '\\u008D'\n    '\\u008E'\n    '\\u008F'\n    '\\u0090'\n    '\\u0091'\n    '\\u0092'\n    '\\u0093'\n    '\\u0094'\n    '\\u0095'\n    '\\u0096'\n    '\\u0097'\n    '\\u0098'\n    '\\u0099'\n    '\\u009A'\n    '\\u009B'\n    '\\u009C'\n    '\\u009D'\n    '\\u009E'\n    '\\u009F'\n    '\\u00A0'\n    '\\u00A1'\n    '\\u00A2'\n    '\\u00A3'\n    '\\u0024'\n    '\\u00A5'\n    '\\u0023'\n    '\\u00A7'\n    '\\u00A4'\n    '\\ufffe'\n    '\\ufffe'\n    '\\u00AB'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\u00B0'\n    '\\u00B1'\n    '\\u00B2'\n    '\\u00B3'\n    '\\u00D7'\n    '\\u00B5'\n    '\\u00B6'\n    '\\u00B7'\n    '\\u00F7'\n    '\\ufffe'\n    '\\ufffe'\n    '\\u00BB'\n    '\\u00BC'\n    '\\u00BD'\n    '\\u00BE'\n    '\\u00BF'\n    '\\ufffe'\n    '\\u0300'\n    '\\u0301'\n    '\\u0302'\n    '\\u0303'\n    '\\u0304'\n    '\\u0306'\n    '\\u0307'\n    '\\u0308'\n    '\\ufffe'\n    '\\u030A'\n    '\\u0327'\n    '\\u0332'\n    '\\u030B'\n    '\\u0328'\n    '\\u030C'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\ufffe'\n    '\\u2126'\n    '\\u00C6'\n    '\\u00D0'\n    '\\u00AA'\n    '\\u0126'\n    '\\ufffe'\n    '\\u0132'\n    '\\u013F'\n    '\\u0141'\n    '\\u00D8'\n    '\\u0152'\n    '\\u00BA'\n    '\\u00DE'\n    '\\u0166'\n    '\\u014A'\n    '\\u0149'\n    '\\u0138'\n    '\\u00E6'\n    '\\u0111'\n    '\\u00F0'\n    '\\u0127'\n    '\\u0131'\n    '\\u0133'\n    '\\u0140'\n    '\\u0142'\n    '\\u00F8'\n    '\\u0153'\n    '\\u00DF'\n    '\\u00FE'\n    '\\u0167'\n    '\\u014B'\n    '\\ufffe'\n)\nENCODING_TABLE = codecs.charmap_build(DECODING_TABLE)\n"
  },
  {
    "path": "libs/asn1crypto/_types.py",
    "content": "# coding: utf-8\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport inspect\nimport sys\n\n\nif sys.version_info < (3,):\n    str_cls = unicode  # noqa\n    byte_cls = str\n    int_types = (int, long)  # noqa\n\n    def bytes_to_list(byte_string):\n        return [ord(b) for b in byte_string]\n\n    chr_cls = chr\n\nelse:\n    str_cls = str\n    byte_cls = bytes\n    int_types = int\n\n    bytes_to_list = list\n\n    def chr_cls(num):\n        return bytes([num])\n\n\ndef type_name(value):\n    \"\"\"\n    Returns a user-readable name for the type of an object\n\n    :param value:\n        A value to get the type name of\n\n    :return:\n        A unicode string of the object's type name\n    \"\"\"\n\n    if inspect.isclass(value):\n        cls = value\n    else:\n        cls = value.__class__\n    if cls.__module__ in set(['builtins', '__builtin__']):\n        return cls.__name__\n    return '%s.%s' % (cls.__module__, cls.__name__)\n"
  },
  {
    "path": "libs/asn1crypto/algos.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for various algorithms using in various aspects of public\nkey cryptography. Exports the following items:\n\n - AlgorithmIdentifier()\n - AnyAlgorithmIdentifier()\n - DigestAlgorithm()\n - DigestInfo()\n - DSASignature()\n - EncryptionAlgorithm()\n - HmacAlgorithm()\n - KdfAlgorithm()\n - Pkcs5MacAlgorithm()\n - SignedDigestAlgorithm()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom ._errors import unwrap\nfrom ._int import fill_width\nfrom .util import int_from_bytes, int_to_bytes\nfrom .core import (\n    Any,\n    Choice,\n    Integer,\n    Null,\n    ObjectIdentifier,\n    OctetString,\n    Sequence,\n    Void,\n)\n\n\n# Structures and OIDs in this file are pulled from\n# https://tools.ietf.org/html/rfc3279, https://tools.ietf.org/html/rfc4055,\n# https://tools.ietf.org/html/rfc5758, https://tools.ietf.org/html/rfc7292,\n# http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf\n\nclass AlgorithmIdentifier(Sequence):\n    _fields = [\n        ('algorithm', ObjectIdentifier),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n\nclass _ForceNullParameters(object):\n    \"\"\"\n    Various structures based on AlgorithmIdentifier require that the parameters\n    field be core.Null() for certain OIDs. This mixin ensures that happens.\n    \"\"\"\n\n    # The following attribute, plus the parameters spec callback and custom\n    # __setitem__ are all to handle a situation where parameters should not be\n    # optional and must be Null for certain OIDs. More info at\n    # https://tools.ietf.org/html/rfc4055#page-15 and\n    # https://tools.ietf.org/html/rfc4055#section-2.1\n    _null_algos = set([\n        '1.2.840.113549.1.1.1',    # rsassa_pkcs1v15 / rsaes_pkcs1v15 / rsa\n        '1.2.840.113549.1.1.11',   # sha256_rsa\n        '1.2.840.113549.1.1.12',   # sha384_rsa\n        '1.2.840.113549.1.1.13',   # sha512_rsa\n        '1.2.840.113549.1.1.14',   # sha224_rsa\n        '1.3.14.3.2.26',           # sha1\n        '2.16.840.1.101.3.4.2.4',  # sha224\n        '2.16.840.1.101.3.4.2.1',  # sha256\n        '2.16.840.1.101.3.4.2.2',  # sha384\n        '2.16.840.1.101.3.4.2.3',  # sha512\n    ])\n\n    def _parameters_spec(self):\n        if self._oid_pair == ('algorithm', 'parameters'):\n            algo = self['algorithm'].native\n            if algo in self._oid_specs:\n                return self._oid_specs[algo]\n\n        if self['algorithm'].dotted in self._null_algos:\n            return Null\n\n        return None\n\n    _spec_callbacks = {\n        'parameters': _parameters_spec\n    }\n\n    # We have to override this since the spec callback uses the value of\n    # algorithm to determine the parameter spec, however default values are\n    # assigned before setting a field, so a default value can't be based on\n    # another field value (unless it is a default also). Thus we have to\n    # manually check to see if the algorithm was set and parameters is unset,\n    # and then fix the value as appropriate.\n    def __setitem__(self, key, value):\n        res = super(_ForceNullParameters, self).__setitem__(key, value)\n        if key != 'algorithm':\n            return res\n        if self['algorithm'].dotted not in self._null_algos:\n            return res\n        if self['parameters'].__class__ != Void:\n            return res\n        self['parameters'] = Null()\n        return res\n\n\nclass HmacAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.3.14.3.2.10': 'des_mac',\n        '1.2.840.113549.2.7': 'sha1',\n        '1.2.840.113549.2.8': 'sha224',\n        '1.2.840.113549.2.9': 'sha256',\n        '1.2.840.113549.2.10': 'sha384',\n        '1.2.840.113549.2.11': 'sha512',\n        '1.2.840.113549.2.12': 'sha512_224',\n        '1.2.840.113549.2.13': 'sha512_256',\n        '2.16.840.1.101.3.4.2.13': 'sha3_224',\n        '2.16.840.1.101.3.4.2.14': 'sha3_256',\n        '2.16.840.1.101.3.4.2.15': 'sha3_384',\n        '2.16.840.1.101.3.4.2.16': 'sha3_512',\n    }\n\n\nclass HmacAlgorithm(Sequence):\n    _fields = [\n        ('algorithm', HmacAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n\nclass DigestAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.2.2': 'md2',\n        '1.2.840.113549.2.5': 'md5',\n        '1.3.14.3.2.26': 'sha1',\n        '2.16.840.1.101.3.4.2.4': 'sha224',\n        '2.16.840.1.101.3.4.2.1': 'sha256',\n        '2.16.840.1.101.3.4.2.2': 'sha384',\n        '2.16.840.1.101.3.4.2.3': 'sha512',\n        '2.16.840.1.101.3.4.2.5': 'sha512_224',\n        '2.16.840.1.101.3.4.2.6': 'sha512_256',\n        '2.16.840.1.101.3.4.2.7': 'sha3_224',\n        '2.16.840.1.101.3.4.2.8': 'sha3_256',\n        '2.16.840.1.101.3.4.2.9': 'sha3_384',\n        '2.16.840.1.101.3.4.2.10': 'sha3_512',\n        '2.16.840.1.101.3.4.2.11': 'shake128',\n        '2.16.840.1.101.3.4.2.12': 'shake256',\n        '2.16.840.1.101.3.4.2.17': 'shake128_len',\n        '2.16.840.1.101.3.4.2.18': 'shake256_len',\n    }\n\n\nclass DigestAlgorithm(_ForceNullParameters, Sequence):\n    _fields = [\n        ('algorithm', DigestAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n\n# This structure is what is signed with a SignedDigestAlgorithm\nclass DigestInfo(Sequence):\n    _fields = [\n        ('digest_algorithm', DigestAlgorithm),\n        ('digest', OctetString),\n    ]\n\n\nclass MaskGenAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.1.8': 'mgf1',\n    }\n\n\nclass MaskGenAlgorithm(Sequence):\n    _fields = [\n        ('algorithm', MaskGenAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'mgf1': DigestAlgorithm\n    }\n\n\nclass TrailerField(Integer):\n    _map = {\n        1: 'trailer_field_bc',\n    }\n\n\nclass RSASSAPSSParams(Sequence):\n    _fields = [\n        (\n            'hash_algorithm',\n            DigestAlgorithm,\n            {\n                'explicit': 0,\n                'default': {'algorithm': 'sha1'},\n            }\n        ),\n        (\n            'mask_gen_algorithm',\n            MaskGenAlgorithm,\n            {\n                'explicit': 1,\n                'default': {\n                    'algorithm': 'mgf1',\n                    'parameters': {'algorithm': 'sha1'},\n                },\n            }\n        ),\n        (\n            'salt_length',\n            Integer,\n            {\n                'explicit': 2,\n                'default': 20,\n            }\n        ),\n        (\n            'trailer_field',\n            TrailerField,\n            {\n                'explicit': 3,\n                'default': 'trailer_field_bc',\n            }\n        ),\n    ]\n\n\nclass SignedDigestAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.3.14.3.2.3': 'md5_rsa',\n        '1.3.14.3.2.29': 'sha1_rsa',\n        '1.3.14.7.2.3.1': 'md2_rsa',\n        '1.2.840.113549.1.1.2': 'md2_rsa',\n        '1.2.840.113549.1.1.4': 'md5_rsa',\n        '1.2.840.113549.1.1.5': 'sha1_rsa',\n        '1.2.840.113549.1.1.14': 'sha224_rsa',\n        '1.2.840.113549.1.1.11': 'sha256_rsa',\n        '1.2.840.113549.1.1.12': 'sha384_rsa',\n        '1.2.840.113549.1.1.13': 'sha512_rsa',\n        '1.2.840.113549.1.1.10': 'rsassa_pss',\n        '1.2.840.10040.4.3': 'sha1_dsa',\n        '1.3.14.3.2.13': 'sha1_dsa',\n        '1.3.14.3.2.27': 'sha1_dsa',\n        '2.16.840.1.101.3.4.3.1': 'sha224_dsa',\n        '2.16.840.1.101.3.4.3.2': 'sha256_dsa',\n        '1.2.840.10045.4.1': 'sha1_ecdsa',\n        '1.2.840.10045.4.3.1': 'sha224_ecdsa',\n        '1.2.840.10045.4.3.2': 'sha256_ecdsa',\n        '1.2.840.10045.4.3.3': 'sha384_ecdsa',\n        '1.2.840.10045.4.3.4': 'sha512_ecdsa',\n        '2.16.840.1.101.3.4.3.9': 'sha3_224_ecdsa',\n        '2.16.840.1.101.3.4.3.10': 'sha3_256_ecdsa',\n        '2.16.840.1.101.3.4.3.11': 'sha3_384_ecdsa',\n        '2.16.840.1.101.3.4.3.12': 'sha3_512_ecdsa',\n        # For when the digest is specified elsewhere in a Sequence\n        '1.2.840.113549.1.1.1': 'rsassa_pkcs1v15',\n        '1.2.840.10040.4.1': 'dsa',\n        '1.2.840.10045.4': 'ecdsa',\n        # RFC 8410 -- https://tools.ietf.org/html/rfc8410\n        '1.3.101.112': 'ed25519',\n        '1.3.101.113': 'ed448',\n    }\n\n    _reverse_map = {\n        'dsa': '1.2.840.10040.4.1',\n        'ecdsa': '1.2.840.10045.4',\n        'md2_rsa': '1.2.840.113549.1.1.2',\n        'md5_rsa': '1.2.840.113549.1.1.4',\n        'rsassa_pkcs1v15': '1.2.840.113549.1.1.1',\n        'rsassa_pss': '1.2.840.113549.1.1.10',\n        'sha1_dsa': '1.2.840.10040.4.3',\n        'sha1_ecdsa': '1.2.840.10045.4.1',\n        'sha1_rsa': '1.2.840.113549.1.1.5',\n        'sha224_dsa': '2.16.840.1.101.3.4.3.1',\n        'sha224_ecdsa': '1.2.840.10045.4.3.1',\n        'sha224_rsa': '1.2.840.113549.1.1.14',\n        'sha256_dsa': '2.16.840.1.101.3.4.3.2',\n        'sha256_ecdsa': '1.2.840.10045.4.3.2',\n        'sha256_rsa': '1.2.840.113549.1.1.11',\n        'sha384_ecdsa': '1.2.840.10045.4.3.3',\n        'sha384_rsa': '1.2.840.113549.1.1.12',\n        'sha512_ecdsa': '1.2.840.10045.4.3.4',\n        'sha512_rsa': '1.2.840.113549.1.1.13',\n        'sha3_224_ecdsa': '2.16.840.1.101.3.4.3.9',\n        'sha3_256_ecdsa': '2.16.840.1.101.3.4.3.10',\n        'sha3_384_ecdsa': '2.16.840.1.101.3.4.3.11',\n        'sha3_512_ecdsa': '2.16.840.1.101.3.4.3.12',\n        'ed25519': '1.3.101.112',\n        'ed448': '1.3.101.113',\n    }\n\n\nclass SignedDigestAlgorithm(_ForceNullParameters, Sequence):\n    _fields = [\n        ('algorithm', SignedDigestAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'rsassa_pss': RSASSAPSSParams,\n    }\n\n    @property\n    def signature_algo(self):\n        \"\"\"\n        :return:\n            A unicode string of \"rsassa_pkcs1v15\", \"rsassa_pss\", \"dsa\",\n            \"ecdsa\", \"ed25519\" or \"ed448\"\n        \"\"\"\n\n        algorithm = self['algorithm'].native\n\n        algo_map = {\n            'md2_rsa': 'rsassa_pkcs1v15',\n            'md5_rsa': 'rsassa_pkcs1v15',\n            'sha1_rsa': 'rsassa_pkcs1v15',\n            'sha224_rsa': 'rsassa_pkcs1v15',\n            'sha256_rsa': 'rsassa_pkcs1v15',\n            'sha384_rsa': 'rsassa_pkcs1v15',\n            'sha512_rsa': 'rsassa_pkcs1v15',\n            'rsassa_pkcs1v15': 'rsassa_pkcs1v15',\n            'rsassa_pss': 'rsassa_pss',\n            'sha1_dsa': 'dsa',\n            'sha224_dsa': 'dsa',\n            'sha256_dsa': 'dsa',\n            'dsa': 'dsa',\n            'sha1_ecdsa': 'ecdsa',\n            'sha224_ecdsa': 'ecdsa',\n            'sha256_ecdsa': 'ecdsa',\n            'sha384_ecdsa': 'ecdsa',\n            'sha512_ecdsa': 'ecdsa',\n            'sha3_224_ecdsa': 'ecdsa',\n            'sha3_256_ecdsa': 'ecdsa',\n            'sha3_384_ecdsa': 'ecdsa',\n            'sha3_512_ecdsa': 'ecdsa',\n            'ecdsa': 'ecdsa',\n            'ed25519': 'ed25519',\n            'ed448': 'ed448',\n        }\n        if algorithm in algo_map:\n            return algo_map[algorithm]\n\n        raise ValueError(unwrap(\n            '''\n            Signature algorithm not known for %s\n            ''',\n            algorithm\n        ))\n\n    @property\n    def hash_algo(self):\n        \"\"\"\n        :return:\n            A unicode string of \"md2\", \"md5\", \"sha1\", \"sha224\", \"sha256\",\n            \"sha384\", \"sha512\", \"sha512_224\", \"sha512_256\" or \"shake256\"\n        \"\"\"\n\n        algorithm = self['algorithm'].native\n\n        algo_map = {\n            'md2_rsa': 'md2',\n            'md5_rsa': 'md5',\n            'sha1_rsa': 'sha1',\n            'sha224_rsa': 'sha224',\n            'sha256_rsa': 'sha256',\n            'sha384_rsa': 'sha384',\n            'sha512_rsa': 'sha512',\n            'sha1_dsa': 'sha1',\n            'sha224_dsa': 'sha224',\n            'sha256_dsa': 'sha256',\n            'sha1_ecdsa': 'sha1',\n            'sha224_ecdsa': 'sha224',\n            'sha256_ecdsa': 'sha256',\n            'sha384_ecdsa': 'sha384',\n            'sha512_ecdsa': 'sha512',\n            'ed25519': 'sha512',\n            'ed448': 'shake256',\n        }\n        if algorithm in algo_map:\n            return algo_map[algorithm]\n\n        if algorithm == 'rsassa_pss':\n            return self['parameters']['hash_algorithm']['algorithm'].native\n\n        raise ValueError(unwrap(\n            '''\n            Hash algorithm not known for %s\n            ''',\n            algorithm\n        ))\n\n\nclass Pbkdf2Salt(Choice):\n    _alternatives = [\n        ('specified', OctetString),\n        ('other_source', AlgorithmIdentifier),\n    ]\n\n\nclass Pbkdf2Params(Sequence):\n    _fields = [\n        ('salt', Pbkdf2Salt),\n        ('iteration_count', Integer),\n        ('key_length', Integer, {'optional': True}),\n        ('prf', HmacAlgorithm, {'default': {'algorithm': 'sha1'}}),\n    ]\n\n\nclass KdfAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.5.12': 'pbkdf2'\n    }\n\n\nclass KdfAlgorithm(Sequence):\n    _fields = [\n        ('algorithm', KdfAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'pbkdf2': Pbkdf2Params\n    }\n\n\nclass DHParameters(Sequence):\n    \"\"\"\n    Original Name: DHParameter\n    Source: ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-3.asc section 9\n    \"\"\"\n\n    _fields = [\n        ('p', Integer),\n        ('g', Integer),\n        ('private_value_length', Integer, {'optional': True}),\n    ]\n\n\nclass KeyExchangeAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.3.1': 'dh',\n    }\n\n\nclass KeyExchangeAlgorithm(Sequence):\n    _fields = [\n        ('algorithm', KeyExchangeAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'dh': DHParameters,\n    }\n\n\nclass Rc2Params(Sequence):\n    _fields = [\n        ('rc2_parameter_version', Integer, {'optional': True}),\n        ('iv', OctetString),\n    ]\n\n\nclass Rc5ParamVersion(Integer):\n    _map = {\n        16: 'v1-0'\n    }\n\n\nclass Rc5Params(Sequence):\n    _fields = [\n        ('version', Rc5ParamVersion),\n        ('rounds', Integer),\n        ('block_size_in_bits', Integer),\n        ('iv', OctetString, {'optional': True}),\n    ]\n\n\nclass Pbes1Params(Sequence):\n    _fields = [\n        ('salt', OctetString),\n        ('iterations', Integer),\n    ]\n\n\nclass CcmParams(Sequence):\n    # https://tools.ietf.org/html/rfc5084\n    # aes_ICVlen: 4 | 6 | 8 | 10 | 12 | 14 | 16\n    _fields = [\n        ('aes_nonce', OctetString),\n        ('aes_icvlen', Integer),\n    ]\n\n\nclass PSourceAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.1.9': 'p_specified',\n    }\n\n\nclass PSourceAlgorithm(Sequence):\n    _fields = [\n        ('algorithm', PSourceAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'p_specified': OctetString\n    }\n\n\nclass RSAESOAEPParams(Sequence):\n    _fields = [\n        (\n            'hash_algorithm',\n            DigestAlgorithm,\n            {\n                'explicit': 0,\n                'default': {'algorithm': 'sha1'}\n            }\n        ),\n        (\n            'mask_gen_algorithm',\n            MaskGenAlgorithm,\n            {\n                'explicit': 1,\n                'default': {\n                    'algorithm': 'mgf1',\n                    'parameters': {'algorithm': 'sha1'}\n                }\n            }\n        ),\n        (\n            'p_source_algorithm',\n            PSourceAlgorithm,\n            {\n                'explicit': 2,\n                'default': {\n                    'algorithm': 'p_specified',\n                    'parameters': b''\n                }\n            }\n        ),\n    ]\n\n\nclass DSASignature(Sequence):\n    \"\"\"\n    An ASN.1 class for translating between the OS crypto library's\n    representation of an (EC)DSA signature and the ASN.1 structure that is part\n    of various RFCs.\n\n    Original Name: DSS-Sig-Value\n    Source: https://tools.ietf.org/html/rfc3279#section-2.2.2\n    \"\"\"\n\n    _fields = [\n        ('r', Integer),\n        ('s', Integer),\n    ]\n\n    @classmethod\n    def from_p1363(cls, data):\n        \"\"\"\n        Reads a signature from a byte string encoding accordint to IEEE P1363,\n        which is used by Microsoft's BCryptSignHash() function.\n\n        :param data:\n            A byte string from BCryptSignHash()\n\n        :return:\n            A DSASignature object\n        \"\"\"\n\n        r = int_from_bytes(data[0:len(data) // 2])\n        s = int_from_bytes(data[len(data) // 2:])\n        return cls({'r': r, 's': s})\n\n    def to_p1363(self):\n        \"\"\"\n        Dumps a signature to a byte string compatible with Microsoft's\n        BCryptVerifySignature() function.\n\n        :return:\n            A byte string compatible with BCryptVerifySignature()\n        \"\"\"\n\n        r_bytes = int_to_bytes(self['r'].native)\n        s_bytes = int_to_bytes(self['s'].native)\n\n        int_byte_length = max(len(r_bytes), len(s_bytes))\n        r_bytes = fill_width(r_bytes, int_byte_length)\n        s_bytes = fill_width(s_bytes, int_byte_length)\n\n        return r_bytes + s_bytes\n\n\nclass EncryptionAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.3.14.3.2.7': 'des',\n        '1.2.840.113549.3.7': 'tripledes_3key',\n        '1.2.840.113549.3.2': 'rc2',\n        '1.2.840.113549.3.4': 'rc4',\n        '1.2.840.113549.3.9': 'rc5',\n        # From http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html#AES\n        '2.16.840.1.101.3.4.1.1': 'aes128_ecb',\n        '2.16.840.1.101.3.4.1.2': 'aes128_cbc',\n        '2.16.840.1.101.3.4.1.3': 'aes128_ofb',\n        '2.16.840.1.101.3.4.1.4': 'aes128_cfb',\n        '2.16.840.1.101.3.4.1.5': 'aes128_wrap',\n        '2.16.840.1.101.3.4.1.6': 'aes128_gcm',\n        '2.16.840.1.101.3.4.1.7': 'aes128_ccm',\n        '2.16.840.1.101.3.4.1.8': 'aes128_wrap_pad',\n        '2.16.840.1.101.3.4.1.21': 'aes192_ecb',\n        '2.16.840.1.101.3.4.1.22': 'aes192_cbc',\n        '2.16.840.1.101.3.4.1.23': 'aes192_ofb',\n        '2.16.840.1.101.3.4.1.24': 'aes192_cfb',\n        '2.16.840.1.101.3.4.1.25': 'aes192_wrap',\n        '2.16.840.1.101.3.4.1.26': 'aes192_gcm',\n        '2.16.840.1.101.3.4.1.27': 'aes192_ccm',\n        '2.16.840.1.101.3.4.1.28': 'aes192_wrap_pad',\n        '2.16.840.1.101.3.4.1.41': 'aes256_ecb',\n        '2.16.840.1.101.3.4.1.42': 'aes256_cbc',\n        '2.16.840.1.101.3.4.1.43': 'aes256_ofb',\n        '2.16.840.1.101.3.4.1.44': 'aes256_cfb',\n        '2.16.840.1.101.3.4.1.45': 'aes256_wrap',\n        '2.16.840.1.101.3.4.1.46': 'aes256_gcm',\n        '2.16.840.1.101.3.4.1.47': 'aes256_ccm',\n        '2.16.840.1.101.3.4.1.48': 'aes256_wrap_pad',\n        # From PKCS#5\n        '1.2.840.113549.1.5.13': 'pbes2',\n        '1.2.840.113549.1.5.1': 'pbes1_md2_des',\n        '1.2.840.113549.1.5.3': 'pbes1_md5_des',\n        '1.2.840.113549.1.5.4': 'pbes1_md2_rc2',\n        '1.2.840.113549.1.5.6': 'pbes1_md5_rc2',\n        '1.2.840.113549.1.5.10': 'pbes1_sha1_des',\n        '1.2.840.113549.1.5.11': 'pbes1_sha1_rc2',\n        # From PKCS#12\n        '1.2.840.113549.1.12.1.1': 'pkcs12_sha1_rc4_128',\n        '1.2.840.113549.1.12.1.2': 'pkcs12_sha1_rc4_40',\n        '1.2.840.113549.1.12.1.3': 'pkcs12_sha1_tripledes_3key',\n        '1.2.840.113549.1.12.1.4': 'pkcs12_sha1_tripledes_2key',\n        '1.2.840.113549.1.12.1.5': 'pkcs12_sha1_rc2_128',\n        '1.2.840.113549.1.12.1.6': 'pkcs12_sha1_rc2_40',\n        # PKCS#1 v2.2\n        '1.2.840.113549.1.1.1': 'rsaes_pkcs1v15',\n        '1.2.840.113549.1.1.7': 'rsaes_oaep',\n    }\n\n\nclass EncryptionAlgorithm(_ForceNullParameters, Sequence):\n    _fields = [\n        ('algorithm', EncryptionAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'des': OctetString,\n        'tripledes_3key': OctetString,\n        'rc2': Rc2Params,\n        'rc5': Rc5Params,\n        'aes128_cbc': OctetString,\n        'aes192_cbc': OctetString,\n        'aes256_cbc': OctetString,\n        'aes128_ofb': OctetString,\n        'aes192_ofb': OctetString,\n        'aes256_ofb': OctetString,\n        # From RFC5084\n        'aes128_ccm': CcmParams,\n        'aes192_ccm': CcmParams,\n        'aes256_ccm': CcmParams,\n        # From PKCS#5\n        'pbes1_md2_des': Pbes1Params,\n        'pbes1_md5_des': Pbes1Params,\n        'pbes1_md2_rc2': Pbes1Params,\n        'pbes1_md5_rc2': Pbes1Params,\n        'pbes1_sha1_des': Pbes1Params,\n        'pbes1_sha1_rc2': Pbes1Params,\n        # From PKCS#12\n        'pkcs12_sha1_rc4_128': Pbes1Params,\n        'pkcs12_sha1_rc4_40': Pbes1Params,\n        'pkcs12_sha1_tripledes_3key': Pbes1Params,\n        'pkcs12_sha1_tripledes_2key': Pbes1Params,\n        'pkcs12_sha1_rc2_128': Pbes1Params,\n        'pkcs12_sha1_rc2_40': Pbes1Params,\n        # PKCS#1 v2.2\n        'rsaes_oaep': RSAESOAEPParams,\n    }\n\n    @property\n    def kdf(self):\n        \"\"\"\n        Returns the name of the key derivation function to use.\n\n        :return:\n            A unicode from of one of the following: \"pbkdf1\", \"pbkdf2\",\n            \"pkcs12_kdf\"\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo == 'pbes2':\n            return self['parameters']['key_derivation_func']['algorithm'].native\n\n        if encryption_algo.find('.') == -1:\n            if encryption_algo.find('_') != -1:\n                encryption_algo, _ = encryption_algo.split('_', 1)\n\n                if encryption_algo == 'pbes1':\n                    return 'pbkdf1'\n\n                if encryption_algo == 'pkcs12':\n                    return 'pkcs12_kdf'\n\n            raise ValueError(unwrap(\n                '''\n                Encryption algorithm \"%s\" does not have a registered key\n                derivation function\n                ''',\n                encryption_algo\n            ))\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\", can not determine key\n            derivation function\n            ''',\n            encryption_algo\n        ))\n\n    @property\n    def kdf_hmac(self):\n        \"\"\"\n        Returns the HMAC algorithm to use with the KDF.\n\n        :return:\n            A unicode string of one of the following: \"md2\", \"md5\", \"sha1\",\n            \"sha224\", \"sha256\", \"sha384\", \"sha512\"\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo == 'pbes2':\n            return self['parameters']['key_derivation_func']['parameters']['prf']['algorithm'].native\n\n        if encryption_algo.find('.') == -1:\n            if encryption_algo.find('_') != -1:\n                _, hmac_algo, _ = encryption_algo.split('_', 2)\n                return hmac_algo\n\n            raise ValueError(unwrap(\n                '''\n                Encryption algorithm \"%s\" does not have a registered key\n                derivation function\n                ''',\n                encryption_algo\n            ))\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\", can not determine key\n            derivation hmac algorithm\n            ''',\n            encryption_algo\n        ))\n\n    @property\n    def kdf_salt(self):\n        \"\"\"\n        Returns the byte string to use as the salt for the KDF.\n\n        :return:\n            A byte string\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo == 'pbes2':\n            salt = self['parameters']['key_derivation_func']['parameters']['salt']\n\n            if salt.name == 'other_source':\n                raise ValueError(unwrap(\n                    '''\n                    Can not determine key derivation salt - the\n                    reserved-for-future-use other source salt choice was\n                    specified in the PBKDF2 params structure\n                    '''\n                ))\n\n            return salt.native\n\n        if encryption_algo.find('.') == -1:\n            if encryption_algo.find('_') != -1:\n                return self['parameters']['salt'].native\n\n            raise ValueError(unwrap(\n                '''\n                Encryption algorithm \"%s\" does not have a registered key\n                derivation function\n                ''',\n                encryption_algo\n            ))\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\", can not determine key\n            derivation salt\n            ''',\n            encryption_algo\n        ))\n\n    @property\n    def kdf_iterations(self):\n        \"\"\"\n        Returns the number of iterations that should be run via the KDF.\n\n        :return:\n            An integer\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo == 'pbes2':\n            return self['parameters']['key_derivation_func']['parameters']['iteration_count'].native\n\n        if encryption_algo.find('.') == -1:\n            if encryption_algo.find('_') != -1:\n                return self['parameters']['iterations'].native\n\n            raise ValueError(unwrap(\n                '''\n                Encryption algorithm \"%s\" does not have a registered key\n                derivation function\n                ''',\n                encryption_algo\n            ))\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\", can not determine key\n            derivation iterations\n            ''',\n            encryption_algo\n        ))\n\n    @property\n    def key_length(self):\n        \"\"\"\n        Returns the key length to pass to the cipher/kdf. The PKCS#5 spec does\n        not specify a way to store the RC5 key length, however this tends not\n        to be a problem since OpenSSL does not support RC5 in PKCS#8 and OS X\n        does not provide an RC5 cipher for use in the Security Transforms\n        library.\n\n        :raises:\n            ValueError - when the key length can not be determined\n\n        :return:\n            An integer representing the length in bytes\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo[0:3] == 'aes':\n            return {\n                'aes128_': 16,\n                'aes192_': 24,\n                'aes256_': 32,\n            }[encryption_algo[0:7]]\n\n        cipher_lengths = {\n            'des': 8,\n            'tripledes_3key': 24,\n        }\n\n        if encryption_algo in cipher_lengths:\n            return cipher_lengths[encryption_algo]\n\n        if encryption_algo == 'rc2':\n            rc2_parameter_version = self['parameters']['rc2_parameter_version'].native\n\n            # See page 24 of\n            # http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf\n            encoded_key_bits_map = {\n                160: 5,   # 40-bit\n                120: 8,   # 64-bit\n                58: 16,   # 128-bit\n            }\n\n            if rc2_parameter_version in encoded_key_bits_map:\n                return encoded_key_bits_map[rc2_parameter_version]\n\n            if rc2_parameter_version >= 256:\n                return rc2_parameter_version\n\n            if rc2_parameter_version is None:\n                return 4  # 32-bit default\n\n            raise ValueError(unwrap(\n                '''\n                Invalid RC2 parameter version found in EncryptionAlgorithm\n                parameters\n                '''\n            ))\n\n        if encryption_algo == 'pbes2':\n            key_length = self['parameters']['key_derivation_func']['parameters']['key_length'].native\n            if key_length is not None:\n                return key_length\n\n            # If the KDF params don't specify the key size, we can infer it from\n            # the encryption scheme for all schemes except for RC5. However, in\n            # practical terms, neither OpenSSL or OS X support RC5 for PKCS#8\n            # so it is unlikely to be an issue that is run into.\n\n            return self['parameters']['encryption_scheme'].key_length\n\n        if encryption_algo.find('.') == -1:\n            return {\n                'pbes1_md2_des': 8,\n                'pbes1_md5_des': 8,\n                'pbes1_md2_rc2': 8,\n                'pbes1_md5_rc2': 8,\n                'pbes1_sha1_des': 8,\n                'pbes1_sha1_rc2': 8,\n                'pkcs12_sha1_rc4_128': 16,\n                'pkcs12_sha1_rc4_40': 5,\n                'pkcs12_sha1_tripledes_3key': 24,\n                'pkcs12_sha1_tripledes_2key': 16,\n                'pkcs12_sha1_rc2_128': 16,\n                'pkcs12_sha1_rc2_40': 5,\n            }[encryption_algo]\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\"\n            ''',\n            encryption_algo\n        ))\n\n    @property\n    def encryption_mode(self):\n        \"\"\"\n        Returns the name of the encryption mode to use.\n\n        :return:\n            A unicode string from one of the following: \"cbc\", \"ecb\", \"ofb\",\n            \"cfb\", \"wrap\", \"gcm\", \"ccm\", \"wrap_pad\"\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']):\n            return encryption_algo[7:]\n\n        if encryption_algo[0:6] == 'pbes1_':\n            return 'cbc'\n\n        if encryption_algo[0:7] == 'pkcs12_':\n            return 'cbc'\n\n        if encryption_algo in set(['des', 'tripledes_3key', 'rc2', 'rc5']):\n            return 'cbc'\n\n        if encryption_algo == 'pbes2':\n            return self['parameters']['encryption_scheme'].encryption_mode\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\"\n            ''',\n            encryption_algo\n        ))\n\n    @property\n    def encryption_cipher(self):\n        \"\"\"\n        Returns the name of the symmetric encryption cipher to use. The key\n        length can be retrieved via the .key_length property to disabiguate\n        between different variations of TripleDES, AES, and the RC* ciphers.\n\n        :return:\n            A unicode string from one of the following: \"rc2\", \"rc5\", \"des\",\n            \"tripledes\", \"aes\"\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']):\n            return 'aes'\n\n        if encryption_algo in set(['des', 'rc2', 'rc5']):\n            return encryption_algo\n\n        if encryption_algo == 'tripledes_3key':\n            return 'tripledes'\n\n        if encryption_algo == 'pbes2':\n            return self['parameters']['encryption_scheme'].encryption_cipher\n\n        if encryption_algo.find('.') == -1:\n            return {\n                'pbes1_md2_des': 'des',\n                'pbes1_md5_des': 'des',\n                'pbes1_md2_rc2': 'rc2',\n                'pbes1_md5_rc2': 'rc2',\n                'pbes1_sha1_des': 'des',\n                'pbes1_sha1_rc2': 'rc2',\n                'pkcs12_sha1_rc4_128': 'rc4',\n                'pkcs12_sha1_rc4_40': 'rc4',\n                'pkcs12_sha1_tripledes_3key': 'tripledes',\n                'pkcs12_sha1_tripledes_2key': 'tripledes',\n                'pkcs12_sha1_rc2_128': 'rc2',\n                'pkcs12_sha1_rc2_40': 'rc2',\n            }[encryption_algo]\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\"\n            ''',\n            encryption_algo\n        ))\n\n    @property\n    def encryption_block_size(self):\n        \"\"\"\n        Returns the block size of the encryption cipher, in bytes.\n\n        :return:\n            An integer that is the block size in bytes\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']):\n            return 16\n\n        cipher_map = {\n            'des': 8,\n            'tripledes_3key': 8,\n            'rc2': 8,\n        }\n        if encryption_algo in cipher_map:\n            return cipher_map[encryption_algo]\n\n        if encryption_algo == 'rc5':\n            return self['parameters']['block_size_in_bits'].native // 8\n\n        if encryption_algo == 'pbes2':\n            return self['parameters']['encryption_scheme'].encryption_block_size\n\n        if encryption_algo.find('.') == -1:\n            return {\n                'pbes1_md2_des': 8,\n                'pbes1_md5_des': 8,\n                'pbes1_md2_rc2': 8,\n                'pbes1_md5_rc2': 8,\n                'pbes1_sha1_des': 8,\n                'pbes1_sha1_rc2': 8,\n                'pkcs12_sha1_rc4_128': 0,\n                'pkcs12_sha1_rc4_40': 0,\n                'pkcs12_sha1_tripledes_3key': 8,\n                'pkcs12_sha1_tripledes_2key': 8,\n                'pkcs12_sha1_rc2_128': 8,\n                'pkcs12_sha1_rc2_40': 8,\n            }[encryption_algo]\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\"\n            ''',\n            encryption_algo\n        ))\n\n    @property\n    def encryption_iv(self):\n        \"\"\"\n        Returns the byte string of the initialization vector for the encryption\n        scheme. Only the PBES2 stores the IV in the params. For PBES1, the IV\n        is derived from the KDF and this property will return None.\n\n        :return:\n            A byte string or None\n        \"\"\"\n\n        encryption_algo = self['algorithm'].native\n\n        if encryption_algo in set(['rc2', 'rc5']):\n            return self['parameters']['iv'].native\n\n        # For DES/Triple DES and AES the IV is the entirety of the parameters\n        octet_string_iv_oids = set([\n            'des',\n            'tripledes_3key',\n            'aes128_cbc',\n            'aes192_cbc',\n            'aes256_cbc',\n            'aes128_ofb',\n            'aes192_ofb',\n            'aes256_ofb',\n        ])\n        if encryption_algo in octet_string_iv_oids:\n            return self['parameters'].native\n\n        if encryption_algo == 'pbes2':\n            return self['parameters']['encryption_scheme'].encryption_iv\n\n        # All of the PBES1 algos use their KDF to create the IV. For the pbkdf1,\n        # the KDF is told to generate a key that is an extra 8 bytes long, and\n        # that is used for the IV. For the PKCS#12 KDF, it is called with an id\n        # of 2 to generate the IV. In either case, we can't return the IV\n        # without knowing the user's password.\n        if encryption_algo.find('.') == -1:\n            return None\n\n        raise ValueError(unwrap(\n            '''\n            Unrecognized encryption algorithm \"%s\"\n            ''',\n            encryption_algo\n        ))\n\n\nclass Pbes2Params(Sequence):\n    _fields = [\n        ('key_derivation_func', KdfAlgorithm),\n        ('encryption_scheme', EncryptionAlgorithm),\n    ]\n\n\nclass Pbmac1Params(Sequence):\n    _fields = [\n        ('key_derivation_func', KdfAlgorithm),\n        ('message_auth_scheme', HmacAlgorithm),\n    ]\n\n\nclass Pkcs5MacId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.5.14': 'pbmac1',\n    }\n\n\nclass Pkcs5MacAlgorithm(Sequence):\n    _fields = [\n        ('algorithm', Pkcs5MacId),\n        ('parameters', Any),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'pbmac1': Pbmac1Params,\n    }\n\n\nEncryptionAlgorithm._oid_specs['pbes2'] = Pbes2Params\n\n\nclass AnyAlgorithmId(ObjectIdentifier):\n    _map = {}\n\n    def _setup(self):\n        _map = self.__class__._map\n        for other_cls in (EncryptionAlgorithmId, SignedDigestAlgorithmId, DigestAlgorithmId):\n            for oid, name in other_cls._map.items():\n                _map[oid] = name\n\n\nclass AnyAlgorithmIdentifier(_ForceNullParameters, Sequence):\n    _fields = [\n        ('algorithm', AnyAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {}\n\n    def _setup(self):\n        Sequence._setup(self)\n        specs = self.__class__._oid_specs\n        for other_cls in (EncryptionAlgorithm, SignedDigestAlgorithm):\n            for oid, spec in other_cls._oid_specs.items():\n                specs[oid] = spec\n"
  },
  {
    "path": "libs/asn1crypto/cms.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for cryptographic message syntax (CMS). Structures are also\ncompatible with PKCS#7. Exports the following items:\n\n - AuthenticatedData()\n - AuthEnvelopedData()\n - CompressedData()\n - ContentInfo()\n - DigestedData()\n - EncryptedData()\n - EnvelopedData()\n - SignedAndEnvelopedData()\n - SignedData()\n\nOther type classes are defined that help compose the types listed above.\n\nMost CMS structures in the wild are formatted as ContentInfo encapsulating one of the other types.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\ntry:\n    import zlib\nexcept (ImportError):\n    zlib = None\n\nfrom .algos import (\n    _ForceNullParameters,\n    DigestAlgorithm,\n    EncryptionAlgorithm,\n    EncryptionAlgorithmId,\n    HmacAlgorithm,\n    KdfAlgorithm,\n    RSAESOAEPParams,\n    SignedDigestAlgorithm,\n)\nfrom .core import (\n    Any,\n    BitString,\n    Choice,\n    Enumerated,\n    GeneralizedTime,\n    Integer,\n    ObjectIdentifier,\n    OctetBitString,\n    OctetString,\n    ParsableOctetString,\n    Sequence,\n    SequenceOf,\n    SetOf,\n    UTCTime,\n    UTF8String,\n)\nfrom .crl import CertificateList\nfrom .keys import PublicKeyInfo\nfrom .ocsp import OCSPResponse\nfrom .x509 import Attributes, Certificate, Extensions, GeneralName, GeneralNames, Name\n\n\n# These structures are taken from\n# ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-6.asc\n\nclass ExtendedCertificateInfo(Sequence):\n    _fields = [\n        ('version', Integer),\n        ('certificate', Certificate),\n        ('attributes', Attributes),\n    ]\n\n\nclass ExtendedCertificate(Sequence):\n    _fields = [\n        ('extended_certificate_info', ExtendedCertificateInfo),\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature', OctetBitString),\n    ]\n\n\n# These structures are taken from https://tools.ietf.org/html/rfc5652,\n# https://tools.ietf.org/html/rfc5083, http://tools.ietf.org/html/rfc2315,\n# https://tools.ietf.org/html/rfc5940, https://tools.ietf.org/html/rfc3274,\n# https://tools.ietf.org/html/rfc3281\n\n\nclass CMSVersion(Integer):\n    _map = {\n        0: 'v0',\n        1: 'v1',\n        2: 'v2',\n        3: 'v3',\n        4: 'v4',\n        5: 'v5',\n    }\n\n\nclass CMSAttributeType(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.9.3': 'content_type',\n        '1.2.840.113549.1.9.4': 'message_digest',\n        '1.2.840.113549.1.9.5': 'signing_time',\n        '1.2.840.113549.1.9.6': 'counter_signature',\n        # https://datatracker.ietf.org/doc/html/rfc2633#section-2.5.2\n        '1.2.840.113549.1.9.15': 'smime_capabilities',\n        # https://tools.ietf.org/html/rfc2633#page-26\n        '1.2.840.113549.1.9.16.2.11': 'encrypt_key_pref',\n        # https://tools.ietf.org/html/rfc3161#page-20\n        '1.2.840.113549.1.9.16.2.14': 'signature_time_stamp_token',\n        # https://tools.ietf.org/html/rfc6211#page-5\n        '1.2.840.113549.1.9.52': 'cms_algorithm_protection',\n        # https://docs.microsoft.com/en-us/previous-versions/hh968145(v%3Dvs.85)\n        '1.3.6.1.4.1.311.2.4.1': 'microsoft_nested_signature',\n        # Some places refer to this as SPC_RFC3161_OBJID, others szOID_RFC3161_counterSign.\n        # https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/ns-wincrypt-crypt_algorithm_identifier\n        # refers to szOID_RFC3161_counterSign as \"1.2.840.113549.1.9.16.1.4\",\n        # but that OID is also called szOID_TIMESTAMP_TOKEN. Because of there being\n        # no canonical source for this OID, we give it our own name\n        '1.3.6.1.4.1.311.3.3.1': 'microsoft_time_stamp_token',\n    }\n\n\nclass Time(Choice):\n    _alternatives = [\n        ('utc_time', UTCTime),\n        ('generalized_time', GeneralizedTime),\n    ]\n\n\nclass ContentType(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.7.1': 'data',\n        '1.2.840.113549.1.7.2': 'signed_data',\n        '1.2.840.113549.1.7.3': 'enveloped_data',\n        '1.2.840.113549.1.7.4': 'signed_and_enveloped_data',\n        '1.2.840.113549.1.7.5': 'digested_data',\n        '1.2.840.113549.1.7.6': 'encrypted_data',\n        '1.2.840.113549.1.9.16.1.2': 'authenticated_data',\n        '1.2.840.113549.1.9.16.1.9': 'compressed_data',\n        '1.2.840.113549.1.9.16.1.23': 'authenticated_enveloped_data',\n    }\n\n\nclass CMSAlgorithmProtection(Sequence):\n    _fields = [\n        ('digest_algorithm', DigestAlgorithm),\n        ('signature_algorithm', SignedDigestAlgorithm, {'implicit': 1, 'optional': True}),\n        ('mac_algorithm', HmacAlgorithm, {'implicit': 2, 'optional': True}),\n    ]\n\n\nclass SetOfContentType(SetOf):\n    _child_spec = ContentType\n\n\nclass SetOfOctetString(SetOf):\n    _child_spec = OctetString\n\n\nclass SetOfTime(SetOf):\n    _child_spec = Time\n\n\nclass SetOfAny(SetOf):\n    _child_spec = Any\n\n\nclass SetOfCMSAlgorithmProtection(SetOf):\n    _child_spec = CMSAlgorithmProtection\n\n\nclass CMSAttribute(Sequence):\n    _fields = [\n        ('type', CMSAttributeType),\n        ('values', None),\n    ]\n\n    _oid_specs = {}\n\n    def _values_spec(self):\n        return self._oid_specs.get(self['type'].native, SetOfAny)\n\n    _spec_callbacks = {\n        'values': _values_spec\n    }\n\n\nclass CMSAttributes(SetOf):\n    _child_spec = CMSAttribute\n\n\nclass IssuerSerial(Sequence):\n    _fields = [\n        ('issuer', GeneralNames),\n        ('serial', Integer),\n        ('issuer_uid', OctetBitString, {'optional': True}),\n    ]\n\n\nclass AttCertVersion(Integer):\n    _map = {\n        0: 'v1',\n        1: 'v2',\n    }\n\n\nclass AttCertSubject(Choice):\n    _alternatives = [\n        ('base_certificate_id', IssuerSerial, {'explicit': 0}),\n        ('subject_name', GeneralNames, {'explicit': 1}),\n    ]\n\n\nclass AttCertValidityPeriod(Sequence):\n    _fields = [\n        ('not_before_time', GeneralizedTime),\n        ('not_after_time', GeneralizedTime),\n    ]\n\n\nclass AttributeCertificateInfoV1(Sequence):\n    _fields = [\n        ('version', AttCertVersion, {'default': 'v1'}),\n        ('subject', AttCertSubject),\n        ('issuer', GeneralNames),\n        ('signature', SignedDigestAlgorithm),\n        ('serial_number', Integer),\n        ('att_cert_validity_period', AttCertValidityPeriod),\n        ('attributes', Attributes),\n        ('issuer_unique_id', OctetBitString, {'optional': True}),\n        ('extensions', Extensions, {'optional': True}),\n    ]\n\n\nclass AttributeCertificateV1(Sequence):\n    _fields = [\n        ('ac_info', AttributeCertificateInfoV1),\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature', OctetBitString),\n    ]\n\n\nclass DigestedObjectType(Enumerated):\n    _map = {\n        0: 'public_key',\n        1: 'public_key_cert',\n        2: 'other_objy_types',\n    }\n\n\nclass ObjectDigestInfo(Sequence):\n    _fields = [\n        ('digested_object_type', DigestedObjectType),\n        ('other_object_type_id', ObjectIdentifier, {'optional': True}),\n        ('digest_algorithm', DigestAlgorithm),\n        ('object_digest', OctetBitString),\n    ]\n\n\nclass Holder(Sequence):\n    _fields = [\n        ('base_certificate_id', IssuerSerial, {'implicit': 0, 'optional': True}),\n        ('entity_name', GeneralNames, {'implicit': 1, 'optional': True}),\n        ('object_digest_info', ObjectDigestInfo, {'implicit': 2, 'optional': True}),\n    ]\n\n\nclass V2Form(Sequence):\n    _fields = [\n        ('issuer_name', GeneralNames, {'optional': True}),\n        ('base_certificate_id', IssuerSerial, {'explicit': 0, 'optional': True}),\n        ('object_digest_info', ObjectDigestInfo, {'explicit': 1, 'optional': True}),\n    ]\n\n\nclass AttCertIssuer(Choice):\n    _alternatives = [\n        ('v1_form', GeneralNames),\n        ('v2_form', V2Form, {'implicit': 0}),\n    ]\n\n\nclass IetfAttrValue(Choice):\n    _alternatives = [\n        ('octets', OctetString),\n        ('oid', ObjectIdentifier),\n        ('string', UTF8String),\n    ]\n\n\nclass IetfAttrValues(SequenceOf):\n    _child_spec = IetfAttrValue\n\n\nclass IetfAttrSyntax(Sequence):\n    _fields = [\n        ('policy_authority', GeneralNames, {'implicit': 0, 'optional': True}),\n        ('values', IetfAttrValues),\n    ]\n\n\nclass SetOfIetfAttrSyntax(SetOf):\n    _child_spec = IetfAttrSyntax\n\n\nclass SvceAuthInfo(Sequence):\n    _fields = [\n        ('service', GeneralName),\n        ('ident', GeneralName),\n        ('auth_info', OctetString, {'optional': True}),\n    ]\n\n\nclass SetOfSvceAuthInfo(SetOf):\n    _child_spec = SvceAuthInfo\n\n\nclass RoleSyntax(Sequence):\n    _fields = [\n        ('role_authority', GeneralNames, {'implicit': 0, 'optional': True}),\n        ('role_name', GeneralName, {'explicit': 1}),\n    ]\n\n\nclass SetOfRoleSyntax(SetOf):\n    _child_spec = RoleSyntax\n\n\nclass ClassList(BitString):\n    _map = {\n        0: 'unmarked',\n        1: 'unclassified',\n        2: 'restricted',\n        3: 'confidential',\n        4: 'secret',\n        5: 'top_secret',\n    }\n\n\nclass SecurityCategory(Sequence):\n    _fields = [\n        ('type', ObjectIdentifier, {'implicit': 0}),\n        ('value', Any, {'explicit': 1}),\n    ]\n\n\nclass SetOfSecurityCategory(SetOf):\n    _child_spec = SecurityCategory\n\n\nclass Clearance(Sequence):\n    _fields = [\n        ('policy_id', ObjectIdentifier),\n        ('class_list', ClassList, {'default': set(['unclassified'])}),\n        ('security_categories', SetOfSecurityCategory, {'optional': True}),\n    ]\n\n\nclass SetOfClearance(SetOf):\n    _child_spec = Clearance\n\n\nclass BigTime(Sequence):\n    _fields = [\n        ('major', Integer),\n        ('fractional_seconds', Integer),\n        ('sign', Integer, {'optional': True}),\n    ]\n\n\nclass LeapData(Sequence):\n    _fields = [\n        ('leap_time', BigTime),\n        ('action', Integer),\n    ]\n\n\nclass SetOfLeapData(SetOf):\n    _child_spec = LeapData\n\n\nclass TimingMetrics(Sequence):\n    _fields = [\n        ('ntp_time', BigTime),\n        ('offset', BigTime),\n        ('delay', BigTime),\n        ('expiration', BigTime),\n        ('leap_event', SetOfLeapData, {'optional': True}),\n    ]\n\n\nclass SetOfTimingMetrics(SetOf):\n    _child_spec = TimingMetrics\n\n\nclass TimingPolicy(Sequence):\n    _fields = [\n        ('policy_id', SequenceOf, {'spec': ObjectIdentifier}),\n        ('max_offset', BigTime, {'explicit': 0, 'optional': True}),\n        ('max_delay', BigTime, {'explicit': 1, 'optional': True}),\n    ]\n\n\nclass SetOfTimingPolicy(SetOf):\n    _child_spec = TimingPolicy\n\n\nclass AttCertAttributeType(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.10.1': 'authentication_info',\n        '1.3.6.1.5.5.7.10.2': 'access_identity',\n        '1.3.6.1.5.5.7.10.3': 'charging_identity',\n        '1.3.6.1.5.5.7.10.4': 'group',\n        '2.5.4.72': 'role',\n        '2.5.4.55': 'clearance',\n        '1.3.6.1.4.1.601.10.4.1': 'timing_metrics',\n        '1.3.6.1.4.1.601.10.4.2': 'timing_policy',\n    }\n\n\nclass AttCertAttribute(Sequence):\n    _fields = [\n        ('type', AttCertAttributeType),\n        ('values', None),\n    ]\n\n    _oid_specs = {\n        'authentication_info': SetOfSvceAuthInfo,\n        'access_identity': SetOfSvceAuthInfo,\n        'charging_identity': SetOfIetfAttrSyntax,\n        'group': SetOfIetfAttrSyntax,\n        'role': SetOfRoleSyntax,\n        'clearance': SetOfClearance,\n        'timing_metrics': SetOfTimingMetrics,\n        'timing_policy': SetOfTimingPolicy,\n    }\n\n    def _values_spec(self):\n        return self._oid_specs.get(self['type'].native, SetOfAny)\n\n    _spec_callbacks = {\n        'values': _values_spec\n    }\n\n\nclass AttCertAttributes(SequenceOf):\n    _child_spec = AttCertAttribute\n\n\nclass AttributeCertificateInfoV2(Sequence):\n    _fields = [\n        ('version', AttCertVersion),\n        ('holder', Holder),\n        ('issuer', AttCertIssuer),\n        ('signature', SignedDigestAlgorithm),\n        ('serial_number', Integer),\n        ('att_cert_validity_period', AttCertValidityPeriod),\n        ('attributes', AttCertAttributes),\n        ('issuer_unique_id', OctetBitString, {'optional': True}),\n        ('extensions', Extensions, {'optional': True}),\n    ]\n\n\nclass AttributeCertificateV2(Sequence):\n    # Handle the situation where a V2 cert is encoded as V1\n    _bad_tag = 1\n\n    _fields = [\n        ('ac_info', AttributeCertificateInfoV2),\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature', OctetBitString),\n    ]\n\n\nclass OtherCertificateFormat(Sequence):\n    _fields = [\n        ('other_cert_format', ObjectIdentifier),\n        ('other_cert', Any),\n    ]\n\n\nclass CertificateChoices(Choice):\n    _alternatives = [\n        ('certificate', Certificate),\n        ('extended_certificate', ExtendedCertificate, {'implicit': 0}),\n        ('v1_attr_cert', AttributeCertificateV1, {'implicit': 1}),\n        ('v2_attr_cert', AttributeCertificateV2, {'implicit': 2}),\n        ('other', OtherCertificateFormat, {'implicit': 3}),\n    ]\n\n    def validate(self, class_, tag, contents):\n        \"\"\"\n        Ensures that the class and tag specified exist as an alternative. This\n        custom version fixes parsing broken encodings there a V2 attribute\n        # certificate is encoded as a V1\n\n        :param class_:\n            The integer class_ from the encoded value header\n\n        :param tag:\n            The integer tag from the encoded value header\n\n        :param contents:\n            A byte string of the contents of the value - used when the object\n            is explicitly tagged\n\n        :raises:\n            ValueError - when value is not a valid alternative\n        \"\"\"\n\n        super(CertificateChoices, self).validate(class_, tag, contents)\n        if self._choice == 2:\n            if AttCertVersion.load(Sequence.load(contents)[0].dump()).native == 'v2':\n                self._choice = 3\n\n\nclass CertificateSet(SetOf):\n    _child_spec = CertificateChoices\n\n\nclass ContentInfo(Sequence):\n    _fields = [\n        ('content_type', ContentType),\n        ('content', Any, {'explicit': 0, 'optional': True}),\n    ]\n\n    _oid_pair = ('content_type', 'content')\n    _oid_specs = {}\n\n\nclass SetOfContentInfo(SetOf):\n    _child_spec = ContentInfo\n\n\nclass EncapsulatedContentInfo(Sequence):\n    _fields = [\n        ('content_type', ContentType),\n        ('content', ParsableOctetString, {'explicit': 0, 'optional': True}),\n    ]\n\n    _oid_pair = ('content_type', 'content')\n    _oid_specs = {}\n\n\nclass IssuerAndSerialNumber(Sequence):\n    _fields = [\n        ('issuer', Name),\n        ('serial_number', Integer),\n    ]\n\n\nclass SignerIdentifier(Choice):\n    _alternatives = [\n        ('issuer_and_serial_number', IssuerAndSerialNumber),\n        ('subject_key_identifier', OctetString, {'implicit': 0}),\n    ]\n\n\nclass DigestAlgorithms(SetOf):\n    _child_spec = DigestAlgorithm\n\n\nclass CertificateRevocationLists(SetOf):\n    _child_spec = CertificateList\n\n\nclass SCVPReqRes(Sequence):\n    _fields = [\n        ('request', ContentInfo, {'explicit': 0, 'optional': True}),\n        ('response', ContentInfo),\n    ]\n\n\nclass OtherRevInfoFormatId(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.16.2': 'ocsp_response',\n        '1.3.6.1.5.5.7.16.4': 'scvp',\n    }\n\n\nclass OtherRevocationInfoFormat(Sequence):\n    _fields = [\n        ('other_rev_info_format', OtherRevInfoFormatId),\n        ('other_rev_info', Any),\n    ]\n\n    _oid_pair = ('other_rev_info_format', 'other_rev_info')\n    _oid_specs = {\n        'ocsp_response': OCSPResponse,\n        'scvp': SCVPReqRes,\n    }\n\n\nclass RevocationInfoChoice(Choice):\n    _alternatives = [\n        ('crl', CertificateList),\n        ('other', OtherRevocationInfoFormat, {'implicit': 1}),\n    ]\n\n\nclass RevocationInfoChoices(SetOf):\n    _child_spec = RevocationInfoChoice\n\n\nclass SignerInfo(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('sid', SignerIdentifier),\n        ('digest_algorithm', DigestAlgorithm),\n        ('signed_attrs', CMSAttributes, {'implicit': 0, 'optional': True}),\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature', OctetString),\n        ('unsigned_attrs', CMSAttributes, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass SignerInfos(SetOf):\n    _child_spec = SignerInfo\n\n\nclass SignedData(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('digest_algorithms', DigestAlgorithms),\n        ('encap_content_info', None),\n        ('certificates', CertificateSet, {'implicit': 0, 'optional': True}),\n        ('crls', RevocationInfoChoices, {'implicit': 1, 'optional': True}),\n        ('signer_infos', SignerInfos),\n    ]\n\n    def _encap_content_info_spec(self):\n        # If the encap_content_info is version v1, then this could be a PKCS#7\n        # structure, or a CMS structure. CMS wraps the encoded value in an\n        # Octet String tag.\n\n        # If the version is greater than 1, it is definite CMS\n        if self['version'].native != 'v1':\n            return EncapsulatedContentInfo\n\n        # Otherwise, the ContentInfo spec from PKCS#7 will be compatible with\n        # CMS v1 (which only allows Data, an Octet String) and PKCS#7, which\n        # allows Any\n        return ContentInfo\n\n    _spec_callbacks = {\n        'encap_content_info': _encap_content_info_spec\n    }\n\n\nclass OriginatorInfo(Sequence):\n    _fields = [\n        ('certs', CertificateSet, {'implicit': 0, 'optional': True}),\n        ('crls', RevocationInfoChoices, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass RecipientIdentifier(Choice):\n    _alternatives = [\n        ('issuer_and_serial_number', IssuerAndSerialNumber),\n        ('subject_key_identifier', OctetString, {'implicit': 0}),\n    ]\n\n\nclass KeyEncryptionAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.1.1': 'rsaes_pkcs1v15',\n        '1.2.840.113549.1.1.7': 'rsaes_oaep',\n        '2.16.840.1.101.3.4.1.5': 'aes128_wrap',\n        '2.16.840.1.101.3.4.1.8': 'aes128_wrap_pad',\n        '2.16.840.1.101.3.4.1.25': 'aes192_wrap',\n        '2.16.840.1.101.3.4.1.28': 'aes192_wrap_pad',\n        '2.16.840.1.101.3.4.1.45': 'aes256_wrap',\n        '2.16.840.1.101.3.4.1.48': 'aes256_wrap_pad',\n    }\n\n    _reverse_map = {\n        'rsa': '1.2.840.113549.1.1.1',\n        'rsaes_pkcs1v15': '1.2.840.113549.1.1.1',\n        'rsaes_oaep': '1.2.840.113549.1.1.7',\n        'aes128_wrap': '2.16.840.1.101.3.4.1.5',\n        'aes128_wrap_pad': '2.16.840.1.101.3.4.1.8',\n        'aes192_wrap': '2.16.840.1.101.3.4.1.25',\n        'aes192_wrap_pad': '2.16.840.1.101.3.4.1.28',\n        'aes256_wrap': '2.16.840.1.101.3.4.1.45',\n        'aes256_wrap_pad': '2.16.840.1.101.3.4.1.48',\n    }\n\n\nclass KeyEncryptionAlgorithm(_ForceNullParameters, Sequence):\n    _fields = [\n        ('algorithm', KeyEncryptionAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'rsaes_oaep': RSAESOAEPParams,\n    }\n\n\nclass KeyTransRecipientInfo(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('rid', RecipientIdentifier),\n        ('key_encryption_algorithm', KeyEncryptionAlgorithm),\n        ('encrypted_key', OctetString),\n    ]\n\n\nclass OriginatorIdentifierOrKey(Choice):\n    _alternatives = [\n        ('issuer_and_serial_number', IssuerAndSerialNumber),\n        ('subject_key_identifier', OctetString, {'implicit': 0}),\n        ('originator_key', PublicKeyInfo, {'implicit': 1}),\n    ]\n\n\nclass OtherKeyAttribute(Sequence):\n    _fields = [\n        ('key_attr_id', ObjectIdentifier),\n        ('key_attr', Any),\n    ]\n\n\nclass RecipientKeyIdentifier(Sequence):\n    _fields = [\n        ('subject_key_identifier', OctetString),\n        ('date', GeneralizedTime, {'optional': True}),\n        ('other', OtherKeyAttribute, {'optional': True}),\n    ]\n\n\nclass KeyAgreementRecipientIdentifier(Choice):\n    _alternatives = [\n        ('issuer_and_serial_number', IssuerAndSerialNumber),\n        ('r_key_id', RecipientKeyIdentifier, {'implicit': 0}),\n    ]\n\n\nclass RecipientEncryptedKey(Sequence):\n    _fields = [\n        ('rid', KeyAgreementRecipientIdentifier),\n        ('encrypted_key', OctetString),\n    ]\n\n\nclass RecipientEncryptedKeys(SequenceOf):\n    _child_spec = RecipientEncryptedKey\n\n\nclass KeyAgreeRecipientInfo(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('originator', OriginatorIdentifierOrKey, {'explicit': 0}),\n        ('ukm', OctetString, {'explicit': 1, 'optional': True}),\n        ('key_encryption_algorithm', KeyEncryptionAlgorithm),\n        ('recipient_encrypted_keys', RecipientEncryptedKeys),\n    ]\n\n\nclass KEKIdentifier(Sequence):\n    _fields = [\n        ('key_identifier', OctetString),\n        ('date', GeneralizedTime, {'optional': True}),\n        ('other', OtherKeyAttribute, {'optional': True}),\n    ]\n\n\nclass KEKRecipientInfo(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('kekid', KEKIdentifier),\n        ('key_encryption_algorithm', KeyEncryptionAlgorithm),\n        ('encrypted_key', OctetString),\n    ]\n\n\nclass PasswordRecipientInfo(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('key_derivation_algorithm', KdfAlgorithm, {'implicit': 0, 'optional': True}),\n        ('key_encryption_algorithm', KeyEncryptionAlgorithm),\n        ('encrypted_key', OctetString),\n    ]\n\n\nclass OtherRecipientInfo(Sequence):\n    _fields = [\n        ('ori_type', ObjectIdentifier),\n        ('ori_value', Any),\n    ]\n\n\nclass RecipientInfo(Choice):\n    _alternatives = [\n        ('ktri', KeyTransRecipientInfo),\n        ('kari', KeyAgreeRecipientInfo, {'implicit': 1}),\n        ('kekri', KEKRecipientInfo, {'implicit': 2}),\n        ('pwri', PasswordRecipientInfo, {'implicit': 3}),\n        ('ori', OtherRecipientInfo, {'implicit': 4}),\n    ]\n\n\nclass RecipientInfos(SetOf):\n    _child_spec = RecipientInfo\n\n\nclass EncryptedContentInfo(Sequence):\n    _fields = [\n        ('content_type', ContentType),\n        ('content_encryption_algorithm', EncryptionAlgorithm),\n        ('encrypted_content', OctetString, {'implicit': 0, 'optional': True}),\n    ]\n\n\nclass EnvelopedData(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}),\n        ('recipient_infos', RecipientInfos),\n        ('encrypted_content_info', EncryptedContentInfo),\n        ('unprotected_attrs', CMSAttributes, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass SignedAndEnvelopedData(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('recipient_infos', RecipientInfos),\n        ('digest_algorithms', DigestAlgorithms),\n        ('encrypted_content_info', EncryptedContentInfo),\n        ('certificates', CertificateSet, {'implicit': 0, 'optional': True}),\n        ('crls', CertificateRevocationLists, {'implicit': 1, 'optional': True}),\n        ('signer_infos', SignerInfos),\n    ]\n\n\nclass DigestedData(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('digest_algorithm', DigestAlgorithm),\n        ('encap_content_info', None),\n        ('digest', OctetString),\n    ]\n\n    def _encap_content_info_spec(self):\n        # If the encap_content_info is version v1, then this could be a PKCS#7\n        # structure, or a CMS structure. CMS wraps the encoded value in an\n        # Octet String tag.\n\n        # If the version is greater than 1, it is definite CMS\n        if self['version'].native != 'v1':\n            return EncapsulatedContentInfo\n\n        # Otherwise, the ContentInfo spec from PKCS#7 will be compatible with\n        # CMS v1 (which only allows Data, an Octet String) and PKCS#7, which\n        # allows Any\n        return ContentInfo\n\n    _spec_callbacks = {\n        'encap_content_info': _encap_content_info_spec\n    }\n\n\nclass EncryptedData(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('encrypted_content_info', EncryptedContentInfo),\n        ('unprotected_attrs', CMSAttributes, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass AuthenticatedData(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}),\n        ('recipient_infos', RecipientInfos),\n        ('mac_algorithm', HmacAlgorithm),\n        ('digest_algorithm', DigestAlgorithm, {'implicit': 1, 'optional': True}),\n        # This does not require the _spec_callbacks approach of SignedData and\n        # DigestedData since AuthenticatedData was not part of PKCS#7\n        ('encap_content_info', EncapsulatedContentInfo),\n        ('auth_attrs', CMSAttributes, {'implicit': 2, 'optional': True}),\n        ('mac', OctetString),\n        ('unauth_attrs', CMSAttributes, {'implicit': 3, 'optional': True}),\n    ]\n\n\nclass AuthEnvelopedData(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}),\n        ('recipient_infos', RecipientInfos),\n        ('auth_encrypted_content_info', EncryptedContentInfo),\n        ('auth_attrs', CMSAttributes, {'implicit': 1, 'optional': True}),\n        ('mac', OctetString),\n        ('unauth_attrs', CMSAttributes, {'implicit': 2, 'optional': True}),\n    ]\n\n\nclass CompressionAlgorithmId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.9.16.3.8': 'zlib',\n    }\n\n\nclass CompressionAlgorithm(Sequence):\n    _fields = [\n        ('algorithm', CompressionAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n\nclass CompressedData(Sequence):\n    _fields = [\n        ('version', CMSVersion),\n        ('compression_algorithm', CompressionAlgorithm),\n        ('encap_content_info', EncapsulatedContentInfo),\n    ]\n\n    _decompressed = None\n\n    @property\n    def decompressed(self):\n        if self._decompressed is None:\n            if zlib is None:\n                raise SystemError('The zlib module is not available')\n            self._decompressed = zlib.decompress(self['encap_content_info']['content'].native)\n        return self._decompressed\n\n\nclass RecipientKeyIdentifier(Sequence):\n    _fields = [\n        ('subjectKeyIdentifier', OctetString),\n        ('date', GeneralizedTime, {'optional': True}),\n        ('other', OtherKeyAttribute, {'optional': True}),\n    ]\n\n\nclass SMIMEEncryptionKeyPreference(Choice):\n    _alternatives = [\n        ('issuer_and_serial_number', IssuerAndSerialNumber, {'implicit': 0}),\n        ('recipientKeyId', RecipientKeyIdentifier, {'implicit': 1}),\n        ('subjectAltKeyIdentifier', PublicKeyInfo, {'implicit': 2}),\n    ]\n\n\nclass SMIMEEncryptionKeyPreferences(SetOf):\n    _child_spec = SMIMEEncryptionKeyPreference\n\n\nclass SMIMECapabilityIdentifier(Sequence):\n    _fields = [\n        ('capability_id', EncryptionAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n\nclass SMIMECapabilites(SequenceOf):\n    _child_spec = SMIMECapabilityIdentifier\n\n\nclass SetOfSMIMECapabilites(SetOf):\n    _child_spec = SMIMECapabilites\n\n\nContentInfo._oid_specs = {\n    'data': OctetString,\n    'signed_data': SignedData,\n    'enveloped_data': EnvelopedData,\n    'signed_and_enveloped_data': SignedAndEnvelopedData,\n    'digested_data': DigestedData,\n    'encrypted_data': EncryptedData,\n    'authenticated_data': AuthenticatedData,\n    'compressed_data': CompressedData,\n    'authenticated_enveloped_data': AuthEnvelopedData,\n}\n\n\nEncapsulatedContentInfo._oid_specs = {\n    'signed_data': SignedData,\n    'enveloped_data': EnvelopedData,\n    'signed_and_enveloped_data': SignedAndEnvelopedData,\n    'digested_data': DigestedData,\n    'encrypted_data': EncryptedData,\n    'authenticated_data': AuthenticatedData,\n    'compressed_data': CompressedData,\n    'authenticated_enveloped_data': AuthEnvelopedData,\n}\n\n\nCMSAttribute._oid_specs = {\n    'content_type': SetOfContentType,\n    'message_digest': SetOfOctetString,\n    'signing_time': SetOfTime,\n    'counter_signature': SignerInfos,\n    'signature_time_stamp_token': SetOfContentInfo,\n    'cms_algorithm_protection': SetOfCMSAlgorithmProtection,\n    'microsoft_nested_signature': SetOfContentInfo,\n    'microsoft_time_stamp_token': SetOfContentInfo,\n    'encrypt_key_pref': SMIMEEncryptionKeyPreferences,\n    'smime_capabilities': SetOfSMIMECapabilites,\n}\n"
  },
  {
    "path": "libs/asn1crypto/core.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for universal types. Exports the following items:\n\n - load()\n - Any()\n - Asn1Value()\n - BitString()\n - BMPString()\n - Boolean()\n - CharacterString()\n - Choice()\n - EmbeddedPdv()\n - Enumerated()\n - GeneralizedTime()\n - GeneralString()\n - GraphicString()\n - IA5String()\n - InstanceOf()\n - Integer()\n - IntegerBitString()\n - IntegerOctetString()\n - Null()\n - NumericString()\n - ObjectDescriptor()\n - ObjectIdentifier()\n - OctetBitString()\n - OctetString()\n - PrintableString()\n - Real()\n - RelativeOid()\n - Sequence()\n - SequenceOf()\n - Set()\n - SetOf()\n - TeletexString()\n - UniversalString()\n - UTCTime()\n - UTF8String()\n - VideotexString()\n - VisibleString()\n - VOID\n - Void()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom datetime import datetime, timedelta\nfrom fractions import Fraction\nimport binascii\nimport copy\nimport math\nimport re\nimport sys\n\nfrom . import _teletex_codec\nfrom ._errors import unwrap\nfrom ._ordereddict import OrderedDict\nfrom ._types import type_name, str_cls, byte_cls, int_types, chr_cls\nfrom .parser import _parse, _dump_header\nfrom .util import int_to_bytes, int_from_bytes, timezone, extended_datetime, create_timezone, utc_with_dst\n\nif sys.version_info <= (3,):\n    from cStringIO import StringIO as BytesIO\n\n    range = xrange  # noqa\n    _PY2 = True\n\nelse:\n    from io import BytesIO\n\n    _PY2 = False\n\n\n_teletex_codec.register()\n\n\nCLASS_NUM_TO_NAME_MAP = {\n    0: 'universal',\n    1: 'application',\n    2: 'context',\n    3: 'private',\n}\n\nCLASS_NAME_TO_NUM_MAP = {\n    'universal': 0,\n    'application': 1,\n    'context': 2,\n    'private': 3,\n    0: 0,\n    1: 1,\n    2: 2,\n    3: 3,\n}\n\nMETHOD_NUM_TO_NAME_MAP = {\n    0: 'primitive',\n    1: 'constructed',\n}\n\n\n_OID_RE = re.compile(r'^\\d+(\\.\\d+)*$')\n\n\n# A global tracker to ensure that _setup() is called for every class, even\n# if is has been called for a parent class. This allows different _fields\n# definitions for child classes. Without such a construct, the child classes\n# would just see the parent class attributes and would use them.\n_SETUP_CLASSES = {}\n\n\ndef load(encoded_data, strict=False):\n    \"\"\"\n    Loads a BER/DER-encoded byte string and construct a universal object based\n    on the tag value:\n\n     - 1: Boolean\n     - 2: Integer\n     - 3: BitString\n     - 4: OctetString\n     - 5: Null\n     - 6: ObjectIdentifier\n     - 7: ObjectDescriptor\n     - 8: InstanceOf\n     - 9: Real\n     - 10: Enumerated\n     - 11: EmbeddedPdv\n     - 12: UTF8String\n     - 13: RelativeOid\n     - 16: Sequence,\n     - 17: Set\n     - 18: NumericString\n     - 19: PrintableString\n     - 20: TeletexString\n     - 21: VideotexString\n     - 22: IA5String\n     - 23: UTCTime\n     - 24: GeneralizedTime\n     - 25: GraphicString\n     - 26: VisibleString\n     - 27: GeneralString\n     - 28: UniversalString\n     - 29: CharacterString\n     - 30: BMPString\n\n    :param encoded_data:\n        A byte string of BER or DER-encoded data\n\n    :param strict:\n        A boolean indicating if trailing data should be forbidden - if so, a\n        ValueError will be raised when trailing data exists\n\n    :raises:\n        ValueError - when strict is True and trailing data is present\n        ValueError - when the encoded value tag a tag other than listed above\n        ValueError - when the ASN.1 header length is longer than the data\n        TypeError - when encoded_data is not a byte string\n\n    :return:\n        An instance of the one of the universal classes\n    \"\"\"\n\n    return Asn1Value.load(encoded_data, strict=strict)\n\n\nclass Asn1Value(object):\n    \"\"\"\n    The basis of all ASN.1 values\n    \"\"\"\n\n    # The integer 0 for primitive, 1 for constructed\n    method = None\n\n    # An integer 0 through 3 - see CLASS_NUM_TO_NAME_MAP for value\n    class_ = None\n\n    # An integer 1 or greater indicating the tag number\n    tag = None\n\n    # An alternate tag allowed for this type - used for handling broken\n    # structures where a string value is encoded using an incorrect tag\n    _bad_tag = None\n\n    # If the value has been implicitly tagged\n    implicit = False\n\n    # If explicitly tagged, a tuple of 2-element tuples containing the\n    # class int and tag int, from innermost to outermost\n    explicit = None\n\n    # The BER/DER header bytes\n    _header = None\n\n    # Raw encoded value bytes not including class, method, tag, length header\n    contents = None\n\n    # The BER/DER trailer bytes\n    _trailer = b''\n\n    # The native python representation of the value - this is not used by\n    # some classes since they utilize _bytes or _unicode\n    _native = None\n\n    @classmethod\n    def load(cls, encoded_data, strict=False, **kwargs):\n        \"\"\"\n        Loads a BER/DER-encoded byte string using the current class as the spec\n\n        :param encoded_data:\n            A byte string of BER or DER-encoded data\n\n        :param strict:\n            A boolean indicating if trailing data should be forbidden - if so, a\n            ValueError will be raised when trailing data exists\n\n        :return:\n            An instance of the current class\n        \"\"\"\n\n        if not isinstance(encoded_data, byte_cls):\n            raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data))\n\n        spec = None\n        if cls.tag is not None:\n            spec = cls\n\n        value, _ = _parse_build(encoded_data, spec=spec, spec_params=kwargs, strict=strict)\n        return value\n\n    def __init__(self, explicit=None, implicit=None, no_explicit=False, tag_type=None, class_=None, tag=None,\n                 optional=None, default=None, contents=None, method=None):\n        \"\"\"\n        The optional parameter is not used, but rather included so we don't\n        have to delete it from the parameter dictionary when passing as keyword\n        args\n\n        :param explicit:\n            An int tag number for explicit tagging, or a 2-element tuple of\n            class and tag.\n\n        :param implicit:\n            An int tag number for implicit tagging, or a 2-element tuple of\n            class and tag.\n\n        :param no_explicit:\n            If explicit tagging info should be removed from this instance.\n            Used internally to allow contructing the underlying value that\n            has been wrapped in an explicit tag.\n\n        :param tag_type:\n            None for normal values, or one of \"implicit\", \"explicit\" for tagged\n            values. Deprecated in favor of explicit and implicit params.\n\n        :param class_:\n            The class for the value - defaults to \"universal\" if tag_type is\n            None, otherwise defaults to \"context\". Valid values include:\n             - \"universal\"\n             - \"application\"\n             - \"context\"\n             - \"private\"\n            Deprecated in favor of explicit and implicit params.\n\n        :param tag:\n            The integer tag to override - usually this is used with tag_type or\n            class_. Deprecated in favor of explicit and implicit params.\n\n        :param optional:\n            Dummy parameter that allows \"optional\" key in spec param dicts\n\n        :param default:\n            The default value to use if the value is currently None\n\n        :param contents:\n            A byte string of the encoded contents of the value\n\n        :param method:\n            The method for the value - no default value since this is\n            normally set on a class. Valid values include:\n             - \"primitive\" or 0\n             - \"constructed\" or 1\n\n        :raises:\n            ValueError - when implicit, explicit, tag_type, class_ or tag are invalid values\n        \"\"\"\n\n        try:\n            if self.__class__ not in _SETUP_CLASSES:\n                cls = self.__class__\n                # Allow explicit to be specified as a simple 2-element tuple\n                # instead of requiring the user make a nested tuple\n                if cls.explicit is not None and isinstance(cls.explicit[0], int_types):\n                    cls.explicit = (cls.explicit, )\n                if hasattr(cls, '_setup'):\n                    self._setup()\n                _SETUP_CLASSES[cls] = True\n\n            # Normalize tagging values\n            if explicit is not None:\n                if isinstance(explicit, int_types):\n                    if class_ is None:\n                        class_ = 'context'\n                    explicit = (class_, explicit)\n                # Prevent both explicit and tag_type == 'explicit'\n                if tag_type == 'explicit':\n                    tag_type = None\n                    tag = None\n\n            if implicit is not None:\n                if isinstance(implicit, int_types):\n                    if class_ is None:\n                        class_ = 'context'\n                    implicit = (class_, implicit)\n                # Prevent both implicit and tag_type == 'implicit'\n                if tag_type == 'implicit':\n                    tag_type = None\n                    tag = None\n\n            # Convert old tag_type API to explicit/implicit params\n            if tag_type is not None:\n                if class_ is None:\n                    class_ = 'context'\n                if tag_type == 'explicit':\n                    explicit = (class_, tag)\n                elif tag_type == 'implicit':\n                    implicit = (class_, tag)\n                else:\n                    raise ValueError(unwrap(\n                        '''\n                        tag_type must be one of \"implicit\", \"explicit\", not %s\n                        ''',\n                        repr(tag_type)\n                    ))\n\n            if explicit is not None:\n                # Ensure we have a tuple of 2-element tuples\n                if len(explicit) == 2 and isinstance(explicit[1], int_types):\n                    explicit = (explicit, )\n                for class_, tag in explicit:\n                    invalid_class = None\n                    if isinstance(class_, int_types):\n                        if class_ not in CLASS_NUM_TO_NAME_MAP:\n                            invalid_class = class_\n                    else:\n                        if class_ not in CLASS_NAME_TO_NUM_MAP:\n                            invalid_class = class_\n                        class_ = CLASS_NAME_TO_NUM_MAP[class_]\n                    if invalid_class is not None:\n                        raise ValueError(unwrap(\n                            '''\n                            explicit class must be one of \"universal\", \"application\",\n                            \"context\", \"private\", not %s\n                            ''',\n                            repr(invalid_class)\n                        ))\n                    if tag is not None:\n                        if not isinstance(tag, int_types):\n                            raise TypeError(unwrap(\n                                '''\n                                explicit tag must be an integer, not %s\n                                ''',\n                                type_name(tag)\n                            ))\n                    if self.explicit is None:\n                        self.explicit = ((class_, tag), )\n                    else:\n                        self.explicit = self.explicit + ((class_, tag), )\n\n            elif implicit is not None:\n                class_, tag = implicit\n                if class_ not in CLASS_NAME_TO_NUM_MAP:\n                    raise ValueError(unwrap(\n                        '''\n                        implicit class must be one of \"universal\", \"application\",\n                        \"context\", \"private\", not %s\n                        ''',\n                        repr(class_)\n                    ))\n                if tag is not None:\n                    if not isinstance(tag, int_types):\n                        raise TypeError(unwrap(\n                            '''\n                            implicit tag must be an integer, not %s\n                            ''',\n                            type_name(tag)\n                        ))\n                self.class_ = CLASS_NAME_TO_NUM_MAP[class_]\n                self.tag = tag\n                self.implicit = True\n            else:\n                if class_ is not None:\n                    if class_ not in CLASS_NAME_TO_NUM_MAP:\n                        raise ValueError(unwrap(\n                            '''\n                            class_ must be one of \"universal\", \"application\",\n                            \"context\", \"private\", not %s\n                            ''',\n                            repr(class_)\n                        ))\n                    self.class_ = CLASS_NAME_TO_NUM_MAP[class_]\n\n                if self.class_ is None:\n                    self.class_ = 0\n\n                if tag is not None:\n                    self.tag = tag\n\n            if method is not None:\n                if method not in set([\"primitive\", 0, \"constructed\", 1]):\n                    raise ValueError(unwrap(\n                        '''\n                        method must be one of \"primitive\" or \"constructed\",\n                        not %s\n                        ''',\n                        repr(method)\n                    ))\n                if method == \"primitive\":\n                    method = 0\n                elif method == \"constructed\":\n                    method = 1\n                self.method = method\n\n            if no_explicit:\n                self.explicit = None\n\n            if contents is not None:\n                self.contents = contents\n\n            elif default is not None:\n                self.set(default)\n\n        except (ValueError, TypeError) as e:\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while constructing %s' % type_name(self),) + args\n            raise e\n\n    def __str__(self):\n        \"\"\"\n        Since str is different in Python 2 and 3, this calls the appropriate\n        method, __unicode__() or __bytes__()\n\n        :return:\n            A unicode string\n        \"\"\"\n\n        if _PY2:\n            return self.__bytes__()\n        else:\n            return self.__unicode__()\n\n    def __repr__(self):\n        \"\"\"\n        :return:\n            A unicode string\n        \"\"\"\n\n        if _PY2:\n            return '<%s %s b%s>' % (type_name(self), id(self), repr(self.dump()))\n        else:\n            return '<%s %s %s>' % (type_name(self), id(self), repr(self.dump()))\n\n    def __bytes__(self):\n        \"\"\"\n        A fall-back method for print() in Python 2\n\n        :return:\n            A byte string of the output of repr()\n        \"\"\"\n\n        return self.__repr__().encode('utf-8')\n\n    def __unicode__(self):\n        \"\"\"\n        A fall-back method for print() in Python 3\n\n        :return:\n            A unicode string of the output of repr()\n        \"\"\"\n\n        return self.__repr__()\n\n    def _new_instance(self):\n        \"\"\"\n        Constructs a new copy of the current object, preserving any tagging\n\n        :return:\n            An Asn1Value object\n        \"\"\"\n\n        new_obj = self.__class__()\n        new_obj.class_ = self.class_\n        new_obj.tag = self.tag\n        new_obj.implicit = self.implicit\n        new_obj.explicit = self.explicit\n        return new_obj\n\n    def __copy__(self):\n        \"\"\"\n        Implements the copy.copy() interface\n\n        :return:\n            A new shallow copy of the current Asn1Value object\n        \"\"\"\n\n        new_obj = self._new_instance()\n        new_obj._copy(self, copy.copy)\n        return new_obj\n\n    def __deepcopy__(self, memo):\n        \"\"\"\n        Implements the copy.deepcopy() interface\n\n        :param memo:\n            A dict for memoization\n\n        :return:\n            A new deep copy of the current Asn1Value object\n        \"\"\"\n\n        new_obj = self._new_instance()\n        memo[id(self)] = new_obj\n        new_obj._copy(self, copy.deepcopy)\n        return new_obj\n\n    def copy(self):\n        \"\"\"\n        Copies the object, preserving any special tagging from it\n\n        :return:\n            An Asn1Value object\n        \"\"\"\n\n        return copy.deepcopy(self)\n\n    def retag(self, tagging, tag=None):\n        \"\"\"\n        Copies the object, applying a new tagging to it\n\n        :param tagging:\n            A dict containing the keys \"explicit\" and \"implicit\". Legacy\n            API allows a unicode string of \"implicit\" or \"explicit\".\n\n        :param tag:\n            A integer tag number. Only used when tagging is a unicode string.\n\n        :return:\n            An Asn1Value object\n        \"\"\"\n\n        # This is required to preserve the old API\n        if not isinstance(tagging, dict):\n            tagging = {tagging: tag}\n        new_obj = self.__class__(explicit=tagging.get('explicit'), implicit=tagging.get('implicit'))\n        new_obj._copy(self, copy.deepcopy)\n        return new_obj\n\n    def untag(self):\n        \"\"\"\n        Copies the object, removing any special tagging from it\n\n        :return:\n            An Asn1Value object\n        \"\"\"\n\n        new_obj = self.__class__()\n        new_obj._copy(self, copy.deepcopy)\n        return new_obj\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another Asn1Value object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        if self.__class__ != other.__class__:\n            raise TypeError(unwrap(\n                '''\n                Can not copy values from %s object to %s object\n                ''',\n                type_name(other),\n                type_name(self)\n            ))\n\n        self.contents = other.contents\n        self._native = copy_func(other._native)\n\n    def debug(self, nest_level=1):\n        \"\"\"\n        Show the binary data and parsed data in a tree structure\n        \"\"\"\n\n        prefix = '  ' * nest_level\n\n        # This interacts with Any and moves the tag, implicit, explicit, _header,\n        # contents, _footer to the parsed value so duplicate data isn't present\n        has_parsed = hasattr(self, 'parsed')\n\n        _basic_debug(prefix, self)\n        if has_parsed:\n            self.parsed.debug(nest_level + 2)\n        elif hasattr(self, 'chosen'):\n            self.chosen.debug(nest_level + 2)\n        else:\n            if _PY2 and isinstance(self.native, byte_cls):\n                print('%s    Native: b%s' % (prefix, repr(self.native)))\n            else:\n                print('%s    Native: %s' % (prefix, self.native))\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        contents = self.contents\n\n        # If the length is indefinite, force the re-encoding\n        if self._header is not None and self._header[-1:] == b'\\x80':\n            force = True\n\n        if self._header is None or force:\n            if isinstance(self, Constructable) and self._indefinite:\n                self.method = 0\n\n            header = _dump_header(self.class_, self.method, self.tag, self.contents)\n\n            if self.explicit is not None:\n                for class_, tag in self.explicit:\n                    header = _dump_header(class_, 1, tag, header + self.contents) + header\n\n            self._header = header\n            self._trailer = b''\n\n        return self._header + contents + self._trailer\n\n\nclass ValueMap():\n    \"\"\"\n    Basic functionality that allows for mapping values from ints or OIDs to\n    python unicode strings\n    \"\"\"\n\n    # A dict from primitive value (int or OID) to unicode string. This needs\n    # to be defined in the source code\n    _map = None\n\n    # A dict from unicode string to int/OID. This is automatically generated\n    # from _map the first time it is needed\n    _reverse_map = None\n\n    def _setup(self):\n        \"\"\"\n        Generates _reverse_map from _map\n        \"\"\"\n\n        cls = self.__class__\n        if cls._map is None or cls._reverse_map is not None:\n            return\n        cls._reverse_map = {}\n        for key, value in cls._map.items():\n            cls._reverse_map[value] = key\n\n\nclass Castable(object):\n    \"\"\"\n    A mixin to handle converting an object between different classes that\n    represent the same encoded value, but with different rules for converting\n    to and from native Python values\n    \"\"\"\n\n    def cast(self, other_class):\n        \"\"\"\n        Converts the current object into an object of a different class. The\n        new class must use the ASN.1 encoding for the value.\n\n        :param other_class:\n            The class to instantiate the new object from\n\n        :return:\n            An instance of the type other_class\n        \"\"\"\n\n        if other_class.tag != self.__class__.tag:\n            raise TypeError(unwrap(\n                '''\n                Can not covert a value from %s object to %s object since they\n                use different tags: %d versus %d\n                ''',\n                type_name(other_class),\n                type_name(self),\n                other_class.tag,\n                self.__class__.tag\n            ))\n\n        new_obj = other_class()\n        new_obj.class_ = self.class_\n        new_obj.implicit = self.implicit\n        new_obj.explicit = self.explicit\n        new_obj._header = self._header\n        new_obj.contents = self.contents\n        new_obj._trailer = self._trailer\n        if isinstance(self, Constructable):\n            new_obj.method = self.method\n            new_obj._indefinite = self._indefinite\n        return new_obj\n\n\nclass Constructable(object):\n    \"\"\"\n    A mixin to handle string types that may be constructed from chunks\n    contained within an indefinite length BER-encoded container\n    \"\"\"\n\n    # Instance attribute indicating if an object was indefinite\n    # length when parsed - affects parsing and dumping\n    _indefinite = False\n\n    def _merge_chunks(self):\n        \"\"\"\n        :return:\n            A concatenation of the native values of the contained chunks\n        \"\"\"\n\n        if not self._indefinite:\n            return self._as_chunk()\n\n        pointer = 0\n        contents_len = len(self.contents)\n        output = None\n\n        while pointer < contents_len:\n            # We pass the current class as the spec so content semantics are preserved\n            sub_value, pointer = _parse_build(self.contents, pointer, spec=self.__class__)\n            if output is None:\n                output = sub_value._merge_chunks()\n            else:\n                output += sub_value._merge_chunks()\n\n        if output is None:\n            return self._as_chunk()\n\n        return output\n\n    def _as_chunk(self):\n        \"\"\"\n        A method to return a chunk of data that can be combined for\n        constructed method values\n\n        :return:\n            A native Python value that can be added together. Examples include\n            byte strings, unicode strings or tuples.\n        \"\"\"\n\n        return self.contents\n\n    def _setable_native(self):\n        \"\"\"\n        Returns a native value that can be round-tripped into .set(), to\n        result in a DER encoding. This differs from .native in that .native\n        is designed for the end use, and may account for the fact that the\n        merged value is further parsed as ASN.1, such as in the case of\n        ParsableOctetString() and ParsableOctetBitString().\n\n        :return:\n            A python value that is valid to pass to .set()\n        \"\"\"\n\n        return self.native\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another Constructable object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(Constructable, self)._copy(other, copy_func)\n        # We really don't want to dump BER encodings, so if we see an\n        # indefinite encoding, let's re-encode it\n        if other._indefinite:\n            self.set(other._setable_native())\n\n\nclass Void(Asn1Value):\n    \"\"\"\n    A representation of an optional value that is not present. Has .native\n    property and .dump() method to be compatible with other value classes.\n    \"\"\"\n\n    contents = b''\n\n    def __eq__(self, other):\n        \"\"\"\n        :param other:\n            The other Primitive to compare to\n\n        :return:\n            A boolean\n        \"\"\"\n\n        return other.__class__ == self.__class__\n\n    def __nonzero__(self):\n        return False\n\n    def __len__(self):\n        return 0\n\n    def __iter__(self):\n        return iter(())\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            None\n        \"\"\"\n\n        return None\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        return b''\n\n\nVOID = Void()\n\n\nclass Any(Asn1Value):\n    \"\"\"\n    A value class that can contain any value, and allows for easy parsing of\n    the underlying encoded value using a spec. This is normally contained in\n    a Structure that has an ObjectIdentifier field and _oid_pair and _oid_specs\n    defined.\n    \"\"\"\n\n    # The parsed value object\n    _parsed = None\n\n    def __init__(self, value=None, **kwargs):\n        \"\"\"\n        Sets the value of the object before passing to Asn1Value.__init__()\n\n        :param value:\n            An Asn1Value object that will be set as the parsed value\n        \"\"\"\n\n        Asn1Value.__init__(self, **kwargs)\n\n        try:\n            if value is not None:\n                if not isinstance(value, Asn1Value):\n                    raise TypeError(unwrap(\n                        '''\n                        value must be an instance of Asn1Value, not %s\n                        ''',\n                        type_name(value)\n                    ))\n\n                self._parsed = (value, value.__class__, None)\n                self.contents = value.dump()\n\n        except (ValueError, TypeError) as e:\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while constructing %s' % type_name(self),) + args\n            raise e\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            The .native value from the parsed value object\n        \"\"\"\n\n        if self._parsed is None:\n            self.parse()\n\n        return self._parsed[0].native\n\n    @property\n    def parsed(self):\n        \"\"\"\n        Returns the parsed object from .parse()\n\n        :return:\n            The object returned by .parse()\n        \"\"\"\n\n        if self._parsed is None:\n            self.parse()\n\n        return self._parsed[0]\n\n    def parse(self, spec=None, spec_params=None):\n        \"\"\"\n        Parses the contents generically, or using a spec with optional params\n\n        :param spec:\n            A class derived from Asn1Value that defines what class_ and tag the\n            value should have, and the semantics of the encoded value. The\n            return value will be of this type. If omitted, the encoded value\n            will be decoded using the standard universal tag based on the\n            encoded tag number.\n\n        :param spec_params:\n            A dict of params to pass to the spec object\n\n        :return:\n            An object of the type spec, or if not present, a child of Asn1Value\n        \"\"\"\n\n        if self._parsed is None or self._parsed[1:3] != (spec, spec_params):\n            try:\n                passed_params = spec_params or {}\n                _tag_type_to_explicit_implicit(passed_params)\n                if self.explicit is not None:\n                    if 'explicit' in passed_params:\n                        passed_params['explicit'] = self.explicit + passed_params['explicit']\n                    else:\n                        passed_params['explicit'] = self.explicit\n                contents = self._header + self.contents + self._trailer\n                parsed_value, _ = _parse_build(\n                    contents,\n                    spec=spec,\n                    spec_params=passed_params\n                )\n                self._parsed = (parsed_value, spec, spec_params)\n\n                # Once we've parsed the Any value, clear any attributes from this object\n                # since they are now duplicate\n                self.tag = None\n                self.explicit = None\n                self.implicit = False\n                self._header = b''\n                self.contents = contents\n                self._trailer = b''\n\n            except (ValueError, TypeError) as e:\n                args = e.args[1:]\n                e.args = (e.args[0] + '\\n    while parsing %s' % type_name(self),) + args\n                raise e\n        return self._parsed[0]\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another Any object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(Any, self)._copy(other, copy_func)\n        self._parsed = copy_func(other._parsed)\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        if self._parsed is None:\n            self.parse()\n\n        return self._parsed[0].dump(force=force)\n\n\nclass Choice(Asn1Value):\n    \"\"\"\n    A class to handle when a value may be one of several options\n    \"\"\"\n\n    # The index in _alternatives of the validated alternative\n    _choice = None\n\n    # The name of the chosen alternative\n    _name = None\n\n    # The Asn1Value object for the chosen alternative\n    _parsed = None\n\n    # Choice overrides .contents to be a property so that the code expecting\n    # the .contents attribute will get the .contents of the chosen alternative\n    _contents = None\n\n    # A list of tuples in one of the following forms.\n    #\n    # Option 1, a unicode string field name and a value class\n    #\n    # (\"name\", Asn1ValueClass)\n    #\n    # Option 2, same as Option 1, but with a dict of class params\n    #\n    # (\"name\", Asn1ValueClass, {'explicit': 5})\n    _alternatives = None\n\n    # A dict that maps tuples of (class_, tag) to an index in _alternatives\n    _id_map = None\n\n    # A dict that maps alternative names to an index in _alternatives\n    _name_map = None\n\n    @classmethod\n    def load(cls, encoded_data, strict=False, **kwargs):\n        \"\"\"\n        Loads a BER/DER-encoded byte string using the current class as the spec\n\n        :param encoded_data:\n            A byte string of BER or DER encoded data\n\n        :param strict:\n            A boolean indicating if trailing data should be forbidden - if so, a\n            ValueError will be raised when trailing data exists\n\n        :return:\n            A instance of the current class\n        \"\"\"\n\n        if not isinstance(encoded_data, byte_cls):\n            raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data))\n\n        value, _ = _parse_build(encoded_data, spec=cls, spec_params=kwargs, strict=strict)\n        return value\n\n    def _setup(self):\n        \"\"\"\n        Generates _id_map from _alternatives to allow validating contents\n        \"\"\"\n\n        cls = self.__class__\n        cls._id_map = {}\n        cls._name_map = {}\n        for index, info in enumerate(cls._alternatives):\n            if len(info) < 3:\n                info = info + ({},)\n                cls._alternatives[index] = info\n            id_ = _build_id_tuple(info[2], info[1])\n            cls._id_map[id_] = index\n            cls._name_map[info[0]] = index\n\n    def __init__(self, name=None, value=None, **kwargs):\n        \"\"\"\n        Checks to ensure implicit tagging is not being used since it is\n        incompatible with Choice, then forwards on to Asn1Value.__init__()\n\n        :param name:\n            The name of the alternative to be set - used with value.\n            Alternatively this may be a dict with a single key being the name\n            and the value being the value, or a two-element tuple of the name\n            and the value.\n\n        :param value:\n            The alternative value to set - used with name\n\n        :raises:\n            ValueError - when implicit param is passed (or legacy tag_type param is \"implicit\")\n        \"\"\"\n\n        _tag_type_to_explicit_implicit(kwargs)\n\n        Asn1Value.__init__(self, **kwargs)\n\n        try:\n            if kwargs.get('implicit') is not None:\n                raise ValueError(unwrap(\n                    '''\n                    The Choice type can not be implicitly tagged even if in an\n                    implicit module - due to its nature any tagging must be\n                    explicit\n                    '''\n                ))\n\n            if name is not None:\n                if isinstance(name, dict):\n                    if len(name) != 1:\n                        raise ValueError(unwrap(\n                            '''\n                            When passing a dict as the \"name\" argument to %s,\n                            it must have a single key/value - however %d were\n                            present\n                            ''',\n                            type_name(self),\n                            len(name)\n                        ))\n                    name, value = list(name.items())[0]\n\n                if isinstance(name, tuple):\n                    if len(name) != 2:\n                        raise ValueError(unwrap(\n                            '''\n                            When passing a tuple as the \"name\" argument to %s,\n                            it must have two elements, the name and value -\n                            however %d were present\n                            ''',\n                            type_name(self),\n                            len(name)\n                        ))\n                    value = name[1]\n                    name = name[0]\n\n                if name not in self._name_map:\n                    raise ValueError(unwrap(\n                        '''\n                        The name specified, \"%s\", is not a valid alternative\n                        for %s\n                        ''',\n                        name,\n                        type_name(self)\n                    ))\n\n                self._choice = self._name_map[name]\n                _, spec, params = self._alternatives[self._choice]\n\n                if not isinstance(value, spec):\n                    value = spec(value, **params)\n                else:\n                    value = _fix_tagging(value, params)\n                self._parsed = value\n\n        except (ValueError, TypeError) as e:\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while constructing %s' % type_name(self),) + args\n            raise e\n\n    @property\n    def contents(self):\n        \"\"\"\n        :return:\n            A byte string of the DER-encoded contents of the chosen alternative\n        \"\"\"\n\n        if self._parsed is not None:\n            return self._parsed.contents\n\n        return self._contents\n\n    @contents.setter\n    def contents(self, value):\n        \"\"\"\n        :param value:\n            A byte string of the DER-encoded contents of the chosen alternative\n        \"\"\"\n\n        self._contents = value\n\n    @property\n    def name(self):\n        \"\"\"\n        :return:\n            A unicode string of the field name of the chosen alternative\n        \"\"\"\n        if not self._name:\n            self._name = self._alternatives[self._choice][0]\n        return self._name\n\n    def parse(self):\n        \"\"\"\n        Parses the detected alternative\n\n        :return:\n            An Asn1Value object of the chosen alternative\n        \"\"\"\n\n        if self._parsed is None:\n            try:\n                _, spec, params = self._alternatives[self._choice]\n                self._parsed, _ = _parse_build(self._contents, spec=spec, spec_params=params)\n            except (ValueError, TypeError) as e:\n                args = e.args[1:]\n                e.args = (e.args[0] + '\\n    while parsing %s' % type_name(self),) + args\n                raise e\n        return self._parsed\n\n    @property\n    def chosen(self):\n        \"\"\"\n        :return:\n            An Asn1Value object of the chosen alternative\n        \"\"\"\n\n        return self.parse()\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            The .native value from the contained value object\n        \"\"\"\n\n        return self.chosen.native\n\n    def validate(self, class_, tag, contents):\n        \"\"\"\n        Ensures that the class and tag specified exist as an alternative\n\n        :param class_:\n            The integer class_ from the encoded value header\n\n        :param tag:\n            The integer tag from the encoded value header\n\n        :param contents:\n            A byte string of the contents of the value - used when the object\n            is explicitly tagged\n\n        :raises:\n            ValueError - when value is not a valid alternative\n        \"\"\"\n\n        id_ = (class_, tag)\n\n        if self.explicit is not None:\n            if self.explicit[-1] != id_:\n                raise ValueError(unwrap(\n                    '''\n                    %s was explicitly tagged, but the value provided does not\n                    match the class and tag\n                    ''',\n                    type_name(self)\n                ))\n\n            ((class_, _, tag, _, _, _), _) = _parse(contents, len(contents))\n            id_ = (class_, tag)\n\n        if id_ in self._id_map:\n            self._choice = self._id_map[id_]\n            return\n\n        # This means the Choice was implicitly tagged\n        if self.class_ is not None and self.tag is not None:\n            if len(self._alternatives) > 1:\n                raise ValueError(unwrap(\n                    '''\n                    %s was implicitly tagged, but more than one alternative\n                    exists\n                    ''',\n                    type_name(self)\n                ))\n            if id_ == (self.class_, self.tag):\n                self._choice = 0\n                return\n\n        asn1 = self._format_class_tag(class_, tag)\n        asn1s = [self._format_class_tag(pair[0], pair[1]) for pair in self._id_map]\n\n        raise ValueError(unwrap(\n            '''\n            Value %s did not match the class and tag of any of the alternatives\n            in %s: %s\n            ''',\n            asn1,\n            type_name(self),\n            ', '.join(asn1s)\n        ))\n\n    def _format_class_tag(self, class_, tag):\n        \"\"\"\n        :return:\n            A unicode string of a human-friendly representation of the class and tag\n        \"\"\"\n\n        return '[%s %s]' % (CLASS_NUM_TO_NAME_MAP[class_].upper(), tag)\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another Choice object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(Choice, self)._copy(other, copy_func)\n        self._choice = other._choice\n        self._name = other._name\n        self._parsed = copy_func(other._parsed)\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        # If the length is indefinite, force the re-encoding\n        if self._header is not None and self._header[-1:] == b'\\x80':\n            force = True\n\n        self._contents = self.chosen.dump(force=force)\n        if self._header is None or force:\n            self._header = b''\n            if self.explicit is not None:\n                for class_, tag in self.explicit:\n                    self._header = _dump_header(class_, 1, tag, self._header + self._contents) + self._header\n        return self._header + self._contents\n\n\nclass Concat(object):\n    \"\"\"\n    A class that contains two or more encoded child values concatentated\n    together. THIS IS NOT PART OF THE ASN.1 SPECIFICATION! This exists to handle\n    the x509.TrustedCertificate() class for OpenSSL certificates containing\n    extra information.\n    \"\"\"\n\n    # A list of the specs of the concatenated values\n    _child_specs = None\n\n    _children = None\n\n    @classmethod\n    def load(cls, encoded_data, strict=False):\n        \"\"\"\n        Loads a BER/DER-encoded byte string using the current class as the spec\n\n        :param encoded_data:\n            A byte string of BER or DER encoded data\n\n        :param strict:\n            A boolean indicating if trailing data should be forbidden - if so, a\n            ValueError will be raised when trailing data exists\n\n        :return:\n            A Concat object\n        \"\"\"\n\n        return cls(contents=encoded_data, strict=strict)\n\n    def __init__(self, value=None, contents=None, strict=False):\n        \"\"\"\n        :param value:\n            A native Python datatype to initialize the object value with\n\n        :param contents:\n            A byte string of the encoded contents of the value\n\n        :param strict:\n            A boolean indicating if trailing data should be forbidden - if so, a\n            ValueError will be raised when trailing data exists in contents\n\n        :raises:\n            ValueError - when an error occurs with one of the children\n            TypeError - when an error occurs with one of the children\n        \"\"\"\n\n        if contents is not None:\n            try:\n                contents_len = len(contents)\n                self._children = []\n\n                offset = 0\n                for spec in self._child_specs:\n                    if offset < contents_len:\n                        child_value, offset = _parse_build(contents, pointer=offset, spec=spec)\n                    else:\n                        child_value = spec()\n                    self._children.append(child_value)\n\n                if strict and offset != contents_len:\n                    extra_bytes = contents_len - offset\n                    raise ValueError('Extra data - %d bytes of trailing data were provided' % extra_bytes)\n\n            except (ValueError, TypeError) as e:\n                args = e.args[1:]\n                e.args = (e.args[0] + '\\n    while constructing %s' % type_name(self),) + args\n                raise e\n\n        if value is not None:\n            if self._children is None:\n                self._children = [None] * len(self._child_specs)\n            for index, data in enumerate(value):\n                self.__setitem__(index, data)\n\n    def __str__(self):\n        \"\"\"\n        Since str is different in Python 2 and 3, this calls the appropriate\n        method, __unicode__() or __bytes__()\n\n        :return:\n            A unicode string\n        \"\"\"\n\n        if _PY2:\n            return self.__bytes__()\n        else:\n            return self.__unicode__()\n\n    def __bytes__(self):\n        \"\"\"\n        A byte string of the DER-encoded contents\n        \"\"\"\n\n        return self.dump()\n\n    def __unicode__(self):\n        \"\"\"\n        :return:\n            A unicode string\n        \"\"\"\n\n        return repr(self)\n\n    def __repr__(self):\n        \"\"\"\n        :return:\n            A unicode string\n        \"\"\"\n\n        return '<%s %s %s>' % (type_name(self), id(self), repr(self.dump()))\n\n    def __copy__(self):\n        \"\"\"\n        Implements the copy.copy() interface\n\n        :return:\n            A new shallow copy of the Concat object\n        \"\"\"\n\n        new_obj = self.__class__()\n        new_obj._copy(self, copy.copy)\n        return new_obj\n\n    def __deepcopy__(self, memo):\n        \"\"\"\n        Implements the copy.deepcopy() interface\n\n        :param memo:\n            A dict for memoization\n\n        :return:\n            A new deep copy of the Concat object and all child objects\n        \"\"\"\n\n        new_obj = self.__class__()\n        memo[id(self)] = new_obj\n        new_obj._copy(self, copy.deepcopy)\n        return new_obj\n\n    def copy(self):\n        \"\"\"\n        Copies the object\n\n        :return:\n            A Concat object\n        \"\"\"\n\n        return copy.deepcopy(self)\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another Concat object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        if self.__class__ != other.__class__:\n            raise TypeError(unwrap(\n                '''\n                Can not copy values from %s object to %s object\n                ''',\n                type_name(other),\n                type_name(self)\n            ))\n\n        self._children = copy_func(other._children)\n\n    def debug(self, nest_level=1):\n        \"\"\"\n        Show the binary data and parsed data in a tree structure\n        \"\"\"\n\n        prefix = '  ' * nest_level\n        print('%s%s Object #%s' % (prefix, type_name(self), id(self)))\n        print('%s  Children:' % (prefix,))\n        for child in self._children:\n            child.debug(nest_level + 2)\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        contents = b''\n        for child in self._children:\n            contents += child.dump(force=force)\n        return contents\n\n    @property\n    def contents(self):\n        \"\"\"\n        :return:\n            A byte string of the DER-encoded contents of the children\n        \"\"\"\n\n        return self.dump()\n\n    def __len__(self):\n        \"\"\"\n        :return:\n            Integer\n        \"\"\"\n\n        return len(self._children)\n\n    def __getitem__(self, key):\n        \"\"\"\n        Allows accessing children by index\n\n        :param key:\n            An integer of the child index\n\n        :raises:\n            KeyError - when an index is invalid\n\n        :return:\n            The Asn1Value object of the child specified\n        \"\"\"\n\n        if key > len(self._child_specs) - 1 or key < 0:\n            raise KeyError(unwrap(\n                '''\n                No child is definition for position %d of %s\n                ''',\n                key,\n                type_name(self)\n            ))\n\n        return self._children[key]\n\n    def __setitem__(self, key, value):\n        \"\"\"\n        Allows settings children by index\n\n        :param key:\n            An integer of the child index\n\n        :param value:\n            An Asn1Value object to set the child to\n\n        :raises:\n            KeyError - when an index is invalid\n            ValueError - when the value is not an instance of Asn1Value\n        \"\"\"\n\n        if key > len(self._child_specs) - 1 or key < 0:\n            raise KeyError(unwrap(\n                '''\n                No child is defined for position %d of %s\n                ''',\n                key,\n                type_name(self)\n            ))\n\n        if not isinstance(value, Asn1Value):\n            raise ValueError(unwrap(\n                '''\n                Value for child %s of %s is not an instance of\n                asn1crypto.core.Asn1Value\n                ''',\n                key,\n                type_name(self)\n            ))\n\n        self._children[key] = value\n\n    def __iter__(self):\n        \"\"\"\n        :return:\n            An iterator of child values\n        \"\"\"\n\n        return iter(self._children)\n\n\nclass Primitive(Asn1Value):\n    \"\"\"\n    Sets the class_ and method attributes for primitive, universal values\n    \"\"\"\n\n    class_ = 0\n\n    method = 0\n\n    def __init__(self, value=None, default=None, contents=None, **kwargs):\n        \"\"\"\n        Sets the value of the object before passing to Asn1Value.__init__()\n\n        :param value:\n            A native Python datatype to initialize the object value with\n\n        :param default:\n            The default value if no value is specified\n\n        :param contents:\n            A byte string of the encoded contents of the value\n        \"\"\"\n\n        Asn1Value.__init__(self, **kwargs)\n\n        try:\n            if contents is not None:\n                self.contents = contents\n\n            elif value is not None:\n                self.set(value)\n\n            elif default is not None:\n                self.set(default)\n\n        except (ValueError, TypeError) as e:\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while constructing %s' % type_name(self),) + args\n            raise e\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A byte string\n        \"\"\"\n\n        if not isinstance(value, byte_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a byte string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._native = value\n        self.contents = value\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        # If the length is indefinite, force the re-encoding\n        if self._header is not None and self._header[-1:] == b'\\x80':\n            force = True\n\n        if force:\n            native = self.native\n            self.contents = None\n            self.set(native)\n\n        return Asn1Value.dump(self)\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        :param other:\n            The other Primitive to compare to\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, Primitive):\n            return False\n\n        if self.contents != other.contents:\n            return False\n\n        # We compare class tag numbers since object tag numbers could be\n        # different due to implicit or explicit tagging\n        if self.__class__.tag != other.__class__.tag:\n            return False\n\n        if self.__class__ == other.__class__ and self.contents == other.contents:\n            return True\n\n        # If the objects share a common base class that is not too low-level\n        # then we can compare the contents\n        self_bases = (set(self.__class__.__bases__) | set([self.__class__])) - set([Asn1Value, Primitive, ValueMap])\n        other_bases = (set(other.__class__.__bases__) | set([other.__class__])) - set([Asn1Value, Primitive, ValueMap])\n        if self_bases | other_bases:\n            return self.contents == other.contents\n\n        # When tagging is going on, do the extra work of constructing new\n        # objects to see if the dumped representation are the same\n        if self.implicit or self.explicit or other.implicit or other.explicit:\n            return self.untag().dump() == other.untag().dump()\n\n        return self.dump() == other.dump()\n\n\nclass AbstractString(Constructable, Primitive):\n    \"\"\"\n    A base class for all strings that have a known encoding. In general, we do\n    not worry ourselves with confirming that the decoded values match a specific\n    set of characters, only that they are decoded into a Python unicode string\n    \"\"\"\n\n    # The Python encoding name to use when decoding or encoded the contents\n    _encoding = 'latin1'\n\n    # Instance attribute of (possibly-merged) unicode string\n    _unicode = None\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the string\n\n        :param value:\n            A unicode string\n        \"\"\"\n\n        if not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a unicode string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._unicode = value\n        self.contents = value.encode(self._encoding)\n        self._header = None\n        if self._indefinite:\n            self._indefinite = False\n            self.method = 0\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def __unicode__(self):\n        \"\"\"\n        :return:\n            A unicode string\n        \"\"\"\n\n        if self.contents is None:\n            return ''\n        if self._unicode is None:\n            self._unicode = self._merge_chunks().decode(self._encoding)\n        return self._unicode\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another AbstractString object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(AbstractString, self)._copy(other, copy_func)\n        self._unicode = other._unicode\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A unicode string or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        return self.__unicode__()\n\n\nclass Boolean(Primitive):\n    \"\"\"\n    Represents a boolean in both ASN.1 and Python\n    \"\"\"\n\n    tag = 1\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            True, False or another value that works with bool()\n        \"\"\"\n\n        self._native = bool(value)\n        self.contents = b'\\x00' if not value else b'\\xff'\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    # Python 2\n    def __nonzero__(self):\n        \"\"\"\n        :return:\n            True or False\n        \"\"\"\n        return self.__bool__()\n\n    def __bool__(self):\n        \"\"\"\n        :return:\n            True or False\n        \"\"\"\n        return self.contents != b'\\x00'\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            True, False or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            self._native = self.__bool__()\n        return self._native\n\n\nclass Integer(Primitive, ValueMap):\n    \"\"\"\n    Represents an integer in both ASN.1 and Python\n    \"\"\"\n\n    tag = 2\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            An integer, or a unicode string if _map is set\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if isinstance(value, str_cls):\n            if self._map is None:\n                raise ValueError(unwrap(\n                    '''\n                    %s value is a unicode string, but no _map provided\n                    ''',\n                    type_name(self)\n                ))\n\n            if value not in self._reverse_map:\n                raise ValueError(unwrap(\n                    '''\n                    %s value, %s, is not present in the _map\n                    ''',\n                    type_name(self),\n                    value\n                ))\n\n            value = self._reverse_map[value]\n\n        elif not isinstance(value, int_types):\n            raise TypeError(unwrap(\n                '''\n                %s value must be an integer or unicode string when a name_map\n                is provided, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._native = self._map[value] if self._map and value in self._map else value\n\n        self.contents = int_to_bytes(value, signed=True)\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def __int__(self):\n        \"\"\"\n        :return:\n            An integer\n        \"\"\"\n        return int_from_bytes(self.contents, signed=True)\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            An integer or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            self._native = self.__int__()\n            if self._map is not None and self._native in self._map:\n                self._native = self._map[self._native]\n        return self._native\n\n\nclass _IntegerBitString(object):\n    \"\"\"\n    A mixin for IntegerBitString and BitString to parse the contents as an integer.\n    \"\"\"\n\n    # Tuple of 1s and 0s; set through native\n    _unused_bits = ()\n\n    def _as_chunk(self):\n        \"\"\"\n        Parse the contents of a primitive BitString encoding as an integer value.\n        Allows reconstructing indefinite length values.\n\n        :raises:\n            ValueError - when an invalid value is passed\n\n        :return:\n            A list with one tuple (value, bits, unused_bits) where value is an integer\n            with the value of the BitString, bits is the bit count of value and\n            unused_bits is a tuple of 1s and 0s.\n        \"\"\"\n\n        if self._indefinite:\n            # return an empty chunk, for cases like \\x23\\x80\\x00\\x00\n            return []\n\n        unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]\n        value = int_from_bytes(self.contents[1:])\n        bits = (len(self.contents) - 1) * 8\n\n        if not unused_bits_len:\n            return [(value, bits, ())]\n\n        if len(self.contents) == 1:\n            # Disallowed by X.690 §8.6.2.3\n            raise ValueError('Empty bit string has {0} unused bits'.format(unused_bits_len))\n\n        if unused_bits_len > 7:\n            # Disallowed by X.690 §8.6.2.2\n            raise ValueError('Bit string has {0} unused bits'.format(unused_bits_len))\n\n        unused_bits = _int_to_bit_tuple(value & ((1 << unused_bits_len) - 1), unused_bits_len)\n        value >>= unused_bits_len\n        bits -= unused_bits_len\n\n        return [(value, bits, unused_bits)]\n\n    def _chunks_to_int(self):\n        \"\"\"\n        Combines the chunks into a single value.\n\n        :raises:\n            ValueError - when an invalid value is passed\n\n        :return:\n            A tuple (value, bits, unused_bits) where value is an integer with the\n            value of the BitString, bits is the bit count of value and unused_bits\n            is a tuple of 1s and 0s.\n        \"\"\"\n\n        if not self._indefinite:\n            # Fast path\n            return self._as_chunk()[0]\n\n        value = 0\n        total_bits = 0\n        unused_bits = ()\n\n        # X.690 §8.6.3 allows empty indefinite encodings\n        for chunk, bits, unused_bits in self._merge_chunks():\n            if total_bits & 7:\n                # Disallowed by X.690 §8.6.4\n                raise ValueError('Only last chunk in a bit string may have unused bits')\n            total_bits += bits\n            value = (value << bits) | chunk\n\n        return value, total_bits, unused_bits\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another _IntegerBitString object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(_IntegerBitString, self)._copy(other, copy_func)\n        self._unused_bits = other._unused_bits\n\n    @property\n    def unused_bits(self):\n        \"\"\"\n        The unused bits of the bit string encoding.\n\n        :return:\n            A tuple of 1s and 0s\n        \"\"\"\n\n        # call native to set _unused_bits\n        self.native\n\n        return self._unused_bits\n\n\nclass BitString(_IntegerBitString, Constructable, Castable, Primitive, ValueMap):\n    \"\"\"\n    Represents a bit string from ASN.1 as a Python tuple of 1s and 0s\n    \"\"\"\n\n    tag = 3\n\n    _size = None\n\n    def _setup(self):\n        \"\"\"\n        Generates _reverse_map from _map\n        \"\"\"\n\n        ValueMap._setup(self)\n\n        cls = self.__class__\n        if cls._map is not None:\n            cls._size = max(self._map.keys()) + 1\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            An integer or a tuple of integers 0 and 1\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if isinstance(value, set):\n            if self._map is None:\n                raise ValueError(unwrap(\n                    '''\n                    %s._map has not been defined\n                    ''',\n                    type_name(self)\n                ))\n\n            bits = [0] * self._size\n            self._native = value\n            for index in range(0, self._size):\n                key = self._map.get(index)\n                if key is None:\n                    continue\n                if key in value:\n                    bits[index] = 1\n\n            value = ''.join(map(str_cls, bits))\n\n        elif value.__class__ == tuple:\n            if self._map is None:\n                self._native = value\n            else:\n                self._native = set()\n                for index, bit in enumerate(value):\n                    if bit:\n                        name = self._map.get(index, index)\n                        self._native.add(name)\n            value = ''.join(map(str_cls, value))\n\n        else:\n            raise TypeError(unwrap(\n                '''\n                %s value must be a tuple of ones and zeros or a set of unicode\n                strings, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        if self._map is not None:\n            if len(value) > self._size:\n                raise ValueError(unwrap(\n                    '''\n                    %s value must be at most %s bits long, specified was %s long\n                    ''',\n                    type_name(self),\n                    self._size,\n                    len(value)\n                ))\n            # A NamedBitList must have trailing zero bit truncated. See\n            # https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf\n            # section 11.2,\n            # https://tools.ietf.org/html/rfc5280#page-134 and\n            # https://www.ietf.org/mail-archive/web/pkix/current/msg10443.html\n            value = value.rstrip('0')\n        size = len(value)\n\n        size_mod = size % 8\n        extra_bits = 0\n        if size_mod != 0:\n            extra_bits = 8 - size_mod\n            value += '0' * extra_bits\n\n        size_in_bytes = int(math.ceil(size / 8))\n\n        if extra_bits:\n            extra_bits_byte = int_to_bytes(extra_bits)\n        else:\n            extra_bits_byte = b'\\x00'\n\n        if value == '':\n            value_bytes = b''\n        else:\n            value_bytes = int_to_bytes(int(value, 2))\n        if len(value_bytes) != size_in_bytes:\n            value_bytes = (b'\\x00' * (size_in_bytes - len(value_bytes))) + value_bytes\n\n        self.contents = extra_bits_byte + value_bytes\n        self._unused_bits = (0,) * extra_bits\n        self._header = None\n        if self._indefinite:\n            self._indefinite = False\n            self.method = 0\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def __getitem__(self, key):\n        \"\"\"\n        Retrieves a boolean version of one of the bits based on a name from the\n        _map\n\n        :param key:\n            The unicode string of one of the bit names\n\n        :raises:\n            ValueError - when _map is not set or the key name is invalid\n\n        :return:\n            A boolean if the bit is set\n        \"\"\"\n\n        is_int = isinstance(key, int_types)\n        if not is_int:\n            if not isinstance(self._map, dict):\n                raise ValueError(unwrap(\n                    '''\n                    %s._map has not been defined\n                    ''',\n                    type_name(self)\n                ))\n\n            if key not in self._reverse_map:\n                raise ValueError(unwrap(\n                    '''\n                    %s._map does not contain an entry for \"%s\"\n                    ''',\n                    type_name(self),\n                    key\n                ))\n\n        if self._native is None:\n            self.native\n\n        if self._map is None:\n            if len(self._native) >= key + 1:\n                return bool(self._native[key])\n            return False\n\n        if is_int:\n            key = self._map.get(key, key)\n\n        return key in self._native\n\n    def __setitem__(self, key, value):\n        \"\"\"\n        Sets one of the bits based on a name from the _map\n\n        :param key:\n            The unicode string of one of the bit names\n\n        :param value:\n            A boolean value\n\n        :raises:\n            ValueError - when _map is not set or the key name is invalid\n        \"\"\"\n\n        is_int = isinstance(key, int_types)\n        if not is_int:\n            if self._map is None:\n                raise ValueError(unwrap(\n                    '''\n                    %s._map has not been defined\n                    ''',\n                    type_name(self)\n                ))\n\n            if key not in self._reverse_map:\n                raise ValueError(unwrap(\n                    '''\n                    %s._map does not contain an entry for \"%s\"\n                    ''',\n                    type_name(self),\n                    key\n                ))\n\n        if self._native is None:\n            self.native\n\n        if self._map is None:\n            new_native = list(self._native)\n            max_key = len(new_native) - 1\n            if key > max_key:\n                new_native.extend([0] * (key - max_key))\n            new_native[key] = 1 if value else 0\n            self._native = tuple(new_native)\n\n        else:\n            if is_int:\n                key = self._map.get(key, key)\n\n            if value:\n                if key not in self._native:\n                    self._native.add(key)\n            else:\n                if key in self._native:\n                    self._native.remove(key)\n\n        self.set(self._native)\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            If a _map is set, a set of names, or if no _map is set, a tuple of\n            integers 1 and 0. None if no value.\n        \"\"\"\n\n        # For BitString we default the value to be all zeros\n        if self.contents is None:\n            if self._map is None:\n                self.set(())\n            else:\n                self.set(set())\n\n        if self._native is None:\n            int_value, bit_count, self._unused_bits = self._chunks_to_int()\n            bits = _int_to_bit_tuple(int_value, bit_count)\n\n            if self._map:\n                self._native = set()\n                for index, bit in enumerate(bits):\n                    if bit:\n                        name = self._map.get(index, index)\n                        self._native.add(name)\n            else:\n                self._native = bits\n        return self._native\n\n\nclass OctetBitString(Constructable, Castable, Primitive):\n    \"\"\"\n    Represents a bit string in ASN.1 as a Python byte string\n    \"\"\"\n\n    tag = 3\n\n    # Instance attribute of (possibly-merged) byte string\n    _bytes = None\n\n    # Tuple of 1s and 0s; set through native\n    _unused_bits = ()\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A byte string\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if not isinstance(value, byte_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a byte string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._bytes = value\n        # Set the unused bits to 0\n        self.contents = b'\\x00' + value\n        self._unused_bits = ()\n        self._header = None\n        if self._indefinite:\n            self._indefinite = False\n            self.method = 0\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def __bytes__(self):\n        \"\"\"\n        :return:\n            A byte string\n        \"\"\"\n\n        if self.contents is None:\n            return b''\n        if self._bytes is None:\n            if not self._indefinite:\n                self._bytes, self._unused_bits = self._as_chunk()[0]\n            else:\n                chunks = self._merge_chunks()\n                self._unused_bits = ()\n                for chunk in chunks:\n                    if self._unused_bits:\n                        # Disallowed by X.690 §8.6.4\n                        raise ValueError('Only last chunk in a bit string may have unused bits')\n                    self._unused_bits = chunk[1]\n                self._bytes = b''.join(chunk[0] for chunk in chunks)\n\n        return self._bytes\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another OctetBitString object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(OctetBitString, self)._copy(other, copy_func)\n        self._bytes = other._bytes\n        self._unused_bits = other._unused_bits\n\n    def _as_chunk(self):\n        \"\"\"\n        Allows reconstructing indefinite length values\n\n        :raises:\n            ValueError - when an invalid value is passed\n\n        :return:\n            List with one tuple, consisting of a byte string and an integer (unused bits)\n        \"\"\"\n\n        unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]\n        if not unused_bits_len:\n            return [(self.contents[1:], ())]\n\n        if len(self.contents) == 1:\n            # Disallowed by X.690 §8.6.2.3\n            raise ValueError('Empty bit string has {0} unused bits'.format(unused_bits_len))\n\n        if unused_bits_len > 7:\n            # Disallowed by X.690 §8.6.2.2\n            raise ValueError('Bit string has {0} unused bits'.format(unused_bits_len))\n\n        mask = (1 << unused_bits_len) - 1\n        last_byte = ord(self.contents[-1]) if _PY2 else self.contents[-1]\n\n        # zero out the unused bits in the last byte.\n        zeroed_byte = last_byte & ~mask\n        value = self.contents[1:-1] + (chr(zeroed_byte) if _PY2 else bytes((zeroed_byte,)))\n\n        unused_bits = _int_to_bit_tuple(last_byte & mask, unused_bits_len)\n\n        return [(value, unused_bits)]\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A byte string or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        return self.__bytes__()\n\n    @property\n    def unused_bits(self):\n        \"\"\"\n        The unused bits of the bit string encoding.\n\n        :return:\n            A tuple of 1s and 0s\n        \"\"\"\n\n        # call native to set _unused_bits\n        self.native\n\n        return self._unused_bits\n\n\nclass IntegerBitString(_IntegerBitString, Constructable, Castable, Primitive):\n    \"\"\"\n    Represents a bit string in ASN.1 as a Python integer\n    \"\"\"\n\n    tag = 3\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            An integer\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if not isinstance(value, int_types):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a positive integer, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        if value < 0:\n            raise ValueError(unwrap(\n                '''\n                %s value must be a positive integer, not %d\n                ''',\n                type_name(self),\n                value\n            ))\n\n        self._native = value\n        # Set the unused bits to 0\n        self.contents = b'\\x00' + int_to_bytes(value, signed=True)\n        self._unused_bits = ()\n        self._header = None\n        if self._indefinite:\n            self._indefinite = False\n            self.method = 0\n        if self._trailer != b'':\n            self._trailer = b''\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            An integer or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            self._native, __, self._unused_bits = self._chunks_to_int()\n\n        return self._native\n\n\nclass OctetString(Constructable, Castable, Primitive):\n    \"\"\"\n    Represents a byte string in both ASN.1 and Python\n    \"\"\"\n\n    tag = 4\n\n    # Instance attribute of (possibly-merged) byte string\n    _bytes = None\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A byte string\n        \"\"\"\n\n        if not isinstance(value, byte_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a byte string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._bytes = value\n        self.contents = value\n        self._header = None\n        if self._indefinite:\n            self._indefinite = False\n            self.method = 0\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def __bytes__(self):\n        \"\"\"\n        :return:\n            A byte string\n        \"\"\"\n\n        if self.contents is None:\n            return b''\n        if self._bytes is None:\n            self._bytes = self._merge_chunks()\n        return self._bytes\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another OctetString object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(OctetString, self)._copy(other, copy_func)\n        self._bytes = other._bytes\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A byte string or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        return self.__bytes__()\n\n\nclass IntegerOctetString(Constructable, Castable, Primitive):\n    \"\"\"\n    Represents a byte string in ASN.1 as a Python integer\n    \"\"\"\n\n    tag = 4\n\n    # An explicit length in bytes the integer should be encoded to. This should\n    # generally not be used since DER defines a canonical encoding, however some\n    # use of this, such as when storing elliptic curve private keys, requires an\n    # exact number of bytes, even if the leading bytes are null.\n    _encoded_width = None\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            An integer\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if not isinstance(value, int_types):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a positive integer, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        if value < 0:\n            raise ValueError(unwrap(\n                '''\n                %s value must be a positive integer, not %d\n                ''',\n                type_name(self),\n                value\n            ))\n\n        self._native = value\n        self.contents = int_to_bytes(value, signed=False, width=self._encoded_width)\n        self._header = None\n        if self._indefinite:\n            self._indefinite = False\n            self.method = 0\n        if self._trailer != b'':\n            self._trailer = b''\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            An integer or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            self._native = int_from_bytes(self._merge_chunks())\n        return self._native\n\n    def set_encoded_width(self, width):\n        \"\"\"\n        Set the explicit enoding width for the integer\n\n        :param width:\n            An integer byte width to encode the integer to\n        \"\"\"\n\n        self._encoded_width = width\n        # Make sure the encoded value is up-to-date with the proper width\n        if self.contents is not None and len(self.contents) != width:\n            self.set(self.native)\n\n\nclass ParsableOctetString(Constructable, Castable, Primitive):\n\n    tag = 4\n\n    _parsed = None\n\n    # Instance attribute of (possibly-merged) byte string\n    _bytes = None\n\n    def __init__(self, value=None, parsed=None, **kwargs):\n        \"\"\"\n        Allows providing a parsed object that will be serialized to get the\n        byte string value\n\n        :param value:\n            A native Python datatype to initialize the object value with\n\n        :param parsed:\n            If value is None and this is an Asn1Value object, this will be\n            set as the parsed value, and the value will be obtained by calling\n            .dump() on this object.\n        \"\"\"\n\n        set_parsed = False\n        if value is None and parsed is not None and isinstance(parsed, Asn1Value):\n            value = parsed.dump()\n            set_parsed = True\n\n        Primitive.__init__(self, value=value, **kwargs)\n\n        if set_parsed:\n            self._parsed = (parsed, parsed.__class__, None)\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A byte string\n        \"\"\"\n\n        if not isinstance(value, byte_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a byte string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._bytes = value\n        self.contents = value\n        self._header = None\n        if self._indefinite:\n            self._indefinite = False\n            self.method = 0\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def parse(self, spec=None, spec_params=None):\n        \"\"\"\n        Parses the contents generically, or using a spec with optional params\n\n        :param spec:\n            A class derived from Asn1Value that defines what class_ and tag the\n            value should have, and the semantics of the encoded value. The\n            return value will be of this type. If omitted, the encoded value\n            will be decoded using the standard universal tag based on the\n            encoded tag number.\n\n        :param spec_params:\n            A dict of params to pass to the spec object\n\n        :return:\n            An object of the type spec, or if not present, a child of Asn1Value\n        \"\"\"\n\n        if self._parsed is None or self._parsed[1:3] != (spec, spec_params):\n            parsed_value, _ = _parse_build(self.__bytes__(), spec=spec, spec_params=spec_params)\n            self._parsed = (parsed_value, spec, spec_params)\n        return self._parsed[0]\n\n    def __bytes__(self):\n        \"\"\"\n        :return:\n            A byte string\n        \"\"\"\n\n        if self.contents is None:\n            return b''\n        if self._bytes is None:\n            self._bytes = self._merge_chunks()\n        return self._bytes\n\n    def _setable_native(self):\n        \"\"\"\n        Returns a byte string that can be passed into .set()\n\n        :return:\n            A python value that is valid to pass to .set()\n        \"\"\"\n\n        return self.__bytes__()\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another ParsableOctetString object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(ParsableOctetString, self)._copy(other, copy_func)\n        self._bytes = other._bytes\n        self._parsed = copy_func(other._parsed)\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A byte string or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._parsed is not None:\n            return self._parsed[0].native\n        else:\n            return self.__bytes__()\n\n    @property\n    def parsed(self):\n        \"\"\"\n        Returns the parsed object from .parse()\n\n        :return:\n            The object returned by .parse()\n        \"\"\"\n\n        if self._parsed is None:\n            self.parse()\n\n        return self._parsed[0]\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        # If the length is indefinite, force the re-encoding\n        if self._indefinite:\n            force = True\n\n        if force:\n            if self._parsed is not None:\n                native = self.parsed.dump(force=force)\n            else:\n                native = self.native\n            self.contents = None\n            self.set(native)\n\n        return Asn1Value.dump(self)\n\n\nclass ParsableOctetBitString(ParsableOctetString):\n\n    tag = 3\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A byte string\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if not isinstance(value, byte_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a byte string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._bytes = value\n        # Set the unused bits to 0\n        self.contents = b'\\x00' + value\n        self._header = None\n        if self._indefinite:\n            self._indefinite = False\n            self.method = 0\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def _as_chunk(self):\n        \"\"\"\n        Allows reconstructing indefinite length values\n\n        :raises:\n            ValueError - when an invalid value is passed\n\n        :return:\n            A byte string\n        \"\"\"\n\n        unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]\n        if unused_bits_len:\n            raise ValueError('ParsableOctetBitString should have no unused bits')\n\n        return self.contents[1:]\n\n\nclass Null(Primitive):\n    \"\"\"\n    Represents a null value in ASN.1 as None in Python\n    \"\"\"\n\n    tag = 5\n\n    contents = b''\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            None\n        \"\"\"\n\n        self.contents = b''\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            None\n        \"\"\"\n\n        return None\n\n\nclass ObjectIdentifier(Primitive, ValueMap):\n    \"\"\"\n    Represents an object identifier in ASN.1 as a Python unicode dotted\n    integer string\n    \"\"\"\n\n    tag = 6\n\n    # A unicode string of the dotted form of the object identifier\n    _dotted = None\n\n    @classmethod\n    def map(cls, value):\n        \"\"\"\n        Converts a dotted unicode string OID into a mapped unicode string\n\n        :param value:\n            A dotted unicode string OID\n\n        :raises:\n            ValueError - when no _map dict has been defined on the class\n            TypeError - when value is not a unicode string\n\n        :return:\n            A mapped unicode string\n        \"\"\"\n\n        if cls._map is None:\n            raise ValueError(unwrap(\n                '''\n                %s._map has not been defined\n                ''',\n                type_name(cls)\n            ))\n\n        if not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                value must be a unicode string, not %s\n                ''',\n                type_name(value)\n            ))\n\n        return cls._map.get(value, value)\n\n    @classmethod\n    def unmap(cls, value):\n        \"\"\"\n        Converts a mapped unicode string value into a dotted unicode string OID\n\n        :param value:\n            A mapped unicode string OR dotted unicode string OID\n\n        :raises:\n            ValueError - when no _map dict has been defined on the class or the value can't be unmapped\n            TypeError - when value is not a unicode string\n\n        :return:\n            A dotted unicode string OID\n        \"\"\"\n\n        if cls not in _SETUP_CLASSES:\n            cls()._setup()\n            _SETUP_CLASSES[cls] = True\n\n        if cls._map is None:\n            raise ValueError(unwrap(\n                '''\n                %s._map has not been defined\n                ''',\n                type_name(cls)\n            ))\n\n        if not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                value must be a unicode string, not %s\n                ''',\n                type_name(value)\n            ))\n\n        if value in cls._reverse_map:\n            return cls._reverse_map[value]\n\n        if not _OID_RE.match(value):\n            raise ValueError(unwrap(\n                '''\n                %s._map does not contain an entry for \"%s\"\n                ''',\n                type_name(cls),\n                value\n            ))\n\n        return value\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A unicode string. May be a dotted integer string, or if _map is\n            provided, one of the mapped values.\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a unicode string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._native = value\n\n        if self._map is not None:\n            if value in self._reverse_map:\n                value = self._reverse_map[value]\n\n        self.contents = b''\n        first = None\n        for index, part in enumerate(value.split('.')):\n            part = int(part)\n\n            # The first two parts are merged into a single byte\n            if index == 0:\n                first = part\n                continue\n            elif index == 1:\n                if first > 2:\n                    raise ValueError(unwrap(\n                        '''\n                        First arc must be one of 0, 1 or 2, not %s\n                        ''',\n                        repr(first)\n                    ))\n                elif first < 2 and part >= 40:\n                    raise ValueError(unwrap(\n                        '''\n                        Second arc must be less than 40 if first arc is 0 or\n                        1, not %s\n                        ''',\n                        repr(part)\n                    ))\n                part = (first * 40) + part\n\n            encoded_part = chr_cls(0x7F & part)\n            part = part >> 7\n            while part > 0:\n                encoded_part = chr_cls(0x80 | (0x7F & part)) + encoded_part\n                part = part >> 7\n            self.contents += encoded_part\n\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def __unicode__(self):\n        \"\"\"\n        :return:\n            A unicode string\n        \"\"\"\n\n        return self.dotted\n\n    @property\n    def dotted(self):\n        \"\"\"\n        :return:\n            A unicode string of the object identifier in dotted notation, thus\n            ignoring any mapped value\n        \"\"\"\n\n        if self._dotted is None:\n            output = []\n\n            part = 0\n            for byte in self.contents:\n                if _PY2:\n                    byte = ord(byte)\n                part = part * 128\n                part += byte & 127\n                # Last byte in subidentifier has the eighth bit set to 0\n                if byte & 0x80 == 0:\n                    if len(output) == 0:\n                        if part >= 80:\n                            output.append(str_cls(2))\n                            output.append(str_cls(part - 80))\n                        elif part >= 40:\n                            output.append(str_cls(1))\n                            output.append(str_cls(part - 40))\n                        else:\n                            output.append(str_cls(0))\n                            output.append(str_cls(part))\n                    else:\n                        output.append(str_cls(part))\n                    part = 0\n\n            self._dotted = '.'.join(output)\n        return self._dotted\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A unicode string or None. If _map is not defined, the unicode string\n            is a string of dotted integers. If _map is defined and the dotted\n            string is present in the _map, the mapped value is returned.\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            self._native = self.dotted\n        if self._map is not None and self._native in self._map:\n            self._native = self._map[self._native]\n        return self._native\n\n\nclass ObjectDescriptor(Primitive):\n    \"\"\"\n    Represents an object descriptor from ASN.1 - no Python implementation\n    \"\"\"\n\n    tag = 7\n\n\nclass InstanceOf(Primitive):\n    \"\"\"\n    Represents an instance from ASN.1 - no Python implementation\n    \"\"\"\n\n    tag = 8\n\n\nclass Real(Primitive):\n    \"\"\"\n    Represents a real number from ASN.1 - no Python implementation\n    \"\"\"\n\n    tag = 9\n\n\nclass Enumerated(Integer):\n    \"\"\"\n    Represents a enumerated list of integers from ASN.1 as a Python\n    unicode string\n    \"\"\"\n\n    tag = 10\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            An integer or a unicode string from _map\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if not isinstance(value, int_types) and not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be an integer or a unicode string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        if isinstance(value, str_cls):\n            if value not in self._reverse_map:\n                raise ValueError(unwrap(\n                    '''\n                    %s value \"%s\" is not a valid value\n                    ''',\n                    type_name(self),\n                    value\n                ))\n\n            value = self._reverse_map[value]\n\n        elif value not in self._map:\n            raise ValueError(unwrap(\n                '''\n                %s value %s is not a valid value\n                ''',\n                type_name(self),\n                value\n            ))\n\n        Integer.set(self, value)\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A unicode string or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            self._native = self._map[self.__int__()]\n        return self._native\n\n\nclass UTF8String(AbstractString):\n    \"\"\"\n    Represents a UTF-8 string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 12\n    _encoding = 'utf-8'\n\n\nclass RelativeOid(ObjectIdentifier):\n    \"\"\"\n    Represents an object identifier in ASN.1 as a Python unicode dotted\n    integer string\n    \"\"\"\n\n    tag = 13\n\n\nclass Sequence(Asn1Value):\n    \"\"\"\n    Represents a sequence of fields from ASN.1 as a Python object with a\n    dict-like interface\n    \"\"\"\n\n    tag = 16\n\n    class_ = 0\n    method = 1\n\n    # A list of child objects, in order of _fields\n    children = None\n\n    # Sequence overrides .contents to be a property so that the mutated state\n    # of child objects can be checked to ensure everything is up-to-date\n    _contents = None\n\n    # Variable to track if the object has been mutated\n    _mutated = False\n\n    # A list of tuples in one of the following forms.\n    #\n    # Option 1, a unicode string field name and a value class\n    #\n    # (\"name\", Asn1ValueClass)\n    #\n    # Option 2, same as Option 1, but with a dict of class params\n    #\n    # (\"name\", Asn1ValueClass, {'explicit': 5})\n    _fields = []\n\n    # A dict with keys being the name of a field and the value being a unicode\n    # string of the method name on self to call to get the spec for that field\n    _spec_callbacks = None\n\n    # A dict that maps unicode string field names to an index in _fields\n    _field_map = None\n\n    # A list in the same order as _fields that has tuples in the form (class_, tag)\n    _field_ids = None\n\n    # An optional 2-element tuple that defines the field names of an OID field\n    # and the field that the OID should be used to help decode. Works with the\n    # _oid_specs attribute.\n    _oid_pair = None\n\n    # A dict with keys that are unicode string OID values and values that are\n    # Asn1Value classes to use for decoding a variable-type field.\n    _oid_specs = None\n\n    # A 2-element tuple of the indexes in _fields of the OID and value fields\n    _oid_nums = None\n\n    # Predetermined field specs to optimize away calls to _determine_spec()\n    _precomputed_specs = None\n\n    def __init__(self, value=None, default=None, **kwargs):\n        \"\"\"\n        Allows setting field values before passing everything else along to\n        Asn1Value.__init__()\n\n        :param value:\n            A native Python datatype to initialize the object value with\n\n        :param default:\n            The default value if no value is specified\n        \"\"\"\n\n        Asn1Value.__init__(self, **kwargs)\n\n        check_existing = False\n        if value is None and default is not None:\n            check_existing = True\n            if self.children is None:\n                if self.contents is None:\n                    check_existing = False\n                else:\n                    self._parse_children()\n            value = default\n\n        if value is not None:\n            try:\n                # Fields are iterated in definition order to allow things like\n                # OID-based specs. Otherwise sometimes the value would be processed\n                # before the OID field, resulting in invalid value object creation.\n                if self._fields:\n                    keys = [info[0] for info in self._fields]\n                    unused_keys = set(value.keys())\n                else:\n                    keys = value.keys()\n                    unused_keys = set(keys)\n\n                for key in keys:\n                    # If we are setting defaults, but a real value has already\n                    # been set for the field, then skip it\n                    if check_existing:\n                        index = self._field_map[key]\n                        if index < len(self.children) and self.children[index] is not VOID:\n                            if key in unused_keys:\n                                unused_keys.remove(key)\n                            continue\n\n                    if key in value:\n                        self.__setitem__(key, value[key])\n                        unused_keys.remove(key)\n\n                if len(unused_keys):\n                    raise ValueError(unwrap(\n                        '''\n                        One or more unknown fields was passed to the constructor\n                        of %s: %s\n                        ''',\n                        type_name(self),\n                        ', '.join(sorted(list(unused_keys)))\n                    ))\n\n            except (ValueError, TypeError) as e:\n                args = e.args[1:]\n                e.args = (e.args[0] + '\\n    while constructing %s' % type_name(self),) + args\n                raise e\n\n    @property\n    def contents(self):\n        \"\"\"\n        :return:\n            A byte string of the DER-encoded contents of the sequence\n        \"\"\"\n\n        if self.children is None:\n            return self._contents\n\n        if self._is_mutated():\n            self._set_contents()\n\n        return self._contents\n\n    @contents.setter\n    def contents(self, value):\n        \"\"\"\n        :param value:\n            A byte string of the DER-encoded contents of the sequence\n        \"\"\"\n\n        self._contents = value\n\n    def _is_mutated(self):\n        \"\"\"\n        :return:\n            A boolean - if the sequence or any children (recursively) have been\n            mutated\n        \"\"\"\n\n        mutated = self._mutated\n        if self.children is not None:\n            for child in self.children:\n                if isinstance(child, Sequence) or isinstance(child, SequenceOf):\n                    mutated = mutated or child._is_mutated()\n\n        return mutated\n\n    def _lazy_child(self, index):\n        \"\"\"\n        Builds a child object if the child has only been parsed into a tuple so far\n        \"\"\"\n\n        child = self.children[index]\n        if child.__class__ == tuple:\n            child = self.children[index] = _build(*child)\n        return child\n\n    def __len__(self):\n        \"\"\"\n        :return:\n            Integer\n        \"\"\"\n        # We inline this check to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        return len(self.children)\n\n    def __getitem__(self, key):\n        \"\"\"\n        Allows accessing fields by name or index\n\n        :param key:\n            A unicode string of the field name, or an integer of the field index\n\n        :raises:\n            KeyError - when a field name or index is invalid\n\n        :return:\n            The Asn1Value object of the field specified\n        \"\"\"\n\n        # We inline this check to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        if not isinstance(key, int_types):\n            if key not in self._field_map:\n                raise KeyError(unwrap(\n                    '''\n                    No field named \"%s\" defined for %s\n                    ''',\n                    key,\n                    type_name(self)\n                ))\n            key = self._field_map[key]\n\n        if key >= len(self.children):\n            raise KeyError(unwrap(\n                '''\n                No field numbered %s is present in this %s\n                ''',\n                key,\n                type_name(self)\n            ))\n\n        try:\n            return self._lazy_child(key)\n\n        except (ValueError, TypeError) as e:\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while parsing %s' % type_name(self),) + args\n            raise e\n\n    def __setitem__(self, key, value):\n        \"\"\"\n        Allows settings fields by name or index\n\n        :param key:\n            A unicode string of the field name, or an integer of the field index\n\n        :param value:\n            A native Python datatype to set the field value to. This method will\n            construct the appropriate Asn1Value object from _fields.\n\n        :raises:\n            ValueError - when a field name or index is invalid\n        \"\"\"\n\n        # We inline this check to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        if not isinstance(key, int_types):\n            if key not in self._field_map:\n                raise KeyError(unwrap(\n                    '''\n                    No field named \"%s\" defined for %s\n                    ''',\n                    key,\n                    type_name(self)\n                ))\n            key = self._field_map[key]\n\n        field_name, field_spec, value_spec, field_params, _ = self._determine_spec(key)\n\n        new_value = self._make_value(field_name, field_spec, value_spec, field_params, value)\n\n        invalid_value = False\n        if isinstance(new_value, Any):\n            invalid_value = new_value.parsed is None\n        else:\n            invalid_value = new_value.contents is None\n\n        if invalid_value:\n            raise ValueError(unwrap(\n                '''\n                Value for field \"%s\" of %s is not set\n                ''',\n                field_name,\n                type_name(self)\n            ))\n\n        self.children[key] = new_value\n\n        if self._native is not None:\n            self._native[self._fields[key][0]] = self.children[key].native\n        self._mutated = True\n\n    def __delitem__(self, key):\n        \"\"\"\n        Allows deleting optional or default fields by name or index\n\n        :param key:\n            A unicode string of the field name, or an integer of the field index\n\n        :raises:\n            ValueError - when a field name or index is invalid, or the field is not optional or defaulted\n        \"\"\"\n\n        # We inline this check to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        if not isinstance(key, int_types):\n            if key not in self._field_map:\n                raise KeyError(unwrap(\n                    '''\n                    No field named \"%s\" defined for %s\n                    ''',\n                    key,\n                    type_name(self)\n                ))\n            key = self._field_map[key]\n\n        name, _, params = self._fields[key]\n        if not params or ('default' not in params and 'optional' not in params):\n            raise ValueError(unwrap(\n                '''\n                Can not delete the value for the field \"%s\" of %s since it is\n                not optional or defaulted\n                ''',\n                name,\n                type_name(self)\n            ))\n\n        if 'optional' in params:\n            self.children[key] = VOID\n            if self._native is not None:\n                self._native[name] = None\n        else:\n            self.__setitem__(key, None)\n        self._mutated = True\n\n    def __iter__(self):\n        \"\"\"\n        :return:\n            An iterator of field key names\n        \"\"\"\n\n        for info in self._fields:\n            yield info[0]\n\n    def _set_contents(self, force=False):\n        \"\"\"\n        Updates the .contents attribute of the value with the encoded value of\n        all of the child objects\n\n        :param force:\n            Ensure all contents are in DER format instead of possibly using\n            cached BER-encoded data\n        \"\"\"\n\n        if self.children is None:\n            self._parse_children()\n\n        contents = BytesIO()\n        for index, info in enumerate(self._fields):\n            child = self.children[index]\n            if child is None:\n                child_dump = b''\n            elif child.__class__ == tuple:\n                if force:\n                    child_dump = self._lazy_child(index).dump(force=force)\n                else:\n                    child_dump = child[3] + child[4] + child[5]\n            else:\n                child_dump = child.dump(force=force)\n            # Skip values that are the same as the default\n            if info[2] and 'default' in info[2]:\n                default_value = info[1](**info[2])\n                if default_value.dump() == child_dump:\n                    continue\n            contents.write(child_dump)\n        self._contents = contents.getvalue()\n\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def _setup(self):\n        \"\"\"\n        Generates _field_map, _field_ids and _oid_nums for use in parsing\n        \"\"\"\n\n        cls = self.__class__\n        cls._field_map = {}\n        cls._field_ids = []\n        cls._precomputed_specs = []\n        for index, field in enumerate(cls._fields):\n            if len(field) < 3:\n                field = field + ({},)\n                cls._fields[index] = field\n            cls._field_map[field[0]] = index\n            cls._field_ids.append(_build_id_tuple(field[2], field[1]))\n\n        if cls._oid_pair is not None:\n            cls._oid_nums = (cls._field_map[cls._oid_pair[0]], cls._field_map[cls._oid_pair[1]])\n\n        for index, field in enumerate(cls._fields):\n            has_callback = cls._spec_callbacks is not None and field[0] in cls._spec_callbacks\n            is_mapped_oid = cls._oid_nums is not None and cls._oid_nums[1] == index\n            if has_callback or is_mapped_oid:\n                cls._precomputed_specs.append(None)\n            else:\n                cls._precomputed_specs.append((field[0], field[1], field[1], field[2], None))\n\n    def _determine_spec(self, index):\n        \"\"\"\n        Determine how a value for a field should be constructed\n\n        :param index:\n            The field number\n\n        :return:\n            A tuple containing the following elements:\n             - unicode string of the field name\n             - Asn1Value class of the field spec\n             - Asn1Value class of the value spec\n             - None or dict of params to pass to the field spec\n             - None or Asn1Value class indicating the value spec was derived from an OID or a spec callback\n        \"\"\"\n\n        name, field_spec, field_params = self._fields[index]\n        value_spec = field_spec\n        spec_override = None\n\n        if self._spec_callbacks is not None and name in self._spec_callbacks:\n            callback = self._spec_callbacks[name]\n            spec_override = callback(self)\n            if spec_override:\n                # Allow a spec callback to specify both the base spec and\n                # the override, for situations such as OctetString and parse_as\n                if spec_override.__class__ == tuple and len(spec_override) == 2:\n                    field_spec, value_spec = spec_override\n                    if value_spec is None:\n                        value_spec = field_spec\n                        spec_override = None\n                # When no field spec is specified, use a single return value as that\n                elif field_spec is None:\n                    field_spec = spec_override\n                    value_spec = field_spec\n                    spec_override = None\n                else:\n                    value_spec = spec_override\n\n        elif self._oid_nums is not None and self._oid_nums[1] == index:\n            oid = self._lazy_child(self._oid_nums[0]).native\n            if oid in self._oid_specs:\n                spec_override = self._oid_specs[oid]\n                value_spec = spec_override\n\n        return (name, field_spec, value_spec, field_params, spec_override)\n\n    def _make_value(self, field_name, field_spec, value_spec, field_params, value):\n        \"\"\"\n        Contructs an appropriate Asn1Value object for a field\n\n        :param field_name:\n            A unicode string of the field name\n\n        :param field_spec:\n            An Asn1Value class that is the field spec\n\n        :param value_spec:\n            An Asn1Value class that is the vaue spec\n\n        :param field_params:\n            None or a dict of params for the field spec\n\n        :param value:\n            The value to construct an Asn1Value object from\n\n        :return:\n            An instance of a child class of Asn1Value\n        \"\"\"\n\n        if value is None and 'optional' in field_params:\n            return VOID\n\n        specs_different = field_spec != value_spec\n        is_any = issubclass(field_spec, Any)\n\n        if issubclass(value_spec, Choice):\n            is_asn1value = isinstance(value, Asn1Value)\n            is_tuple = isinstance(value, tuple) and len(value) == 2\n            is_dict = isinstance(value, dict) and len(value) == 1\n            if not is_asn1value and not is_tuple and not is_dict:\n                raise ValueError(unwrap(\n                    '''\n                    Can not set a native python value to %s, which has the\n                    choice type of %s - value must be an instance of Asn1Value\n                    ''',\n                    field_name,\n                    type_name(value_spec)\n                ))\n            if is_tuple or is_dict:\n                value = value_spec(value)\n            if not isinstance(value, value_spec):\n                wrapper = value_spec()\n                wrapper.validate(value.class_, value.tag, value.contents)\n                wrapper._parsed = value\n                new_value = wrapper\n            else:\n                new_value = value\n\n        elif isinstance(value, field_spec):\n            new_value = value\n            if specs_different:\n                new_value.parse(value_spec)\n\n        elif (not specs_different or is_any) and not isinstance(value, value_spec):\n            if (not is_any or specs_different) and isinstance(value, Asn1Value):\n                raise TypeError(unwrap(\n                    '''\n                    %s value must be %s, not %s\n                    ''',\n                    field_name,\n                    type_name(value_spec),\n                    type_name(value)\n                ))\n            new_value = value_spec(value, **field_params)\n\n        else:\n            if isinstance(value, value_spec):\n                new_value = value\n            else:\n                if isinstance(value, Asn1Value):\n                    raise TypeError(unwrap(\n                        '''\n                        %s value must be %s, not %s\n                        ''',\n                        field_name,\n                        type_name(value_spec),\n                        type_name(value)\n                    ))\n                new_value = value_spec(value)\n\n            # For when the field is OctetString or OctetBitString with embedded\n            # values we need to wrap the value in the field spec to get the\n            # appropriate encoded value.\n            if specs_different and not is_any:\n                wrapper = field_spec(value=new_value.dump(), **field_params)\n                wrapper._parsed = (new_value, new_value.__class__, None)\n                new_value = wrapper\n\n        new_value = _fix_tagging(new_value, field_params)\n\n        return new_value\n\n    def _parse_children(self, recurse=False):\n        \"\"\"\n        Parses the contents and generates Asn1Value objects based on the\n        definitions from _fields.\n\n        :param recurse:\n            If child objects that are Sequence or SequenceOf objects should\n            be recursively parsed\n\n        :raises:\n            ValueError - when an error occurs parsing child objects\n        \"\"\"\n\n        cls = self.__class__\n        if self._contents is None:\n            if self._fields:\n                self.children = [VOID] * len(self._fields)\n                for index, (_, _, params) in enumerate(self._fields):\n                    if 'default' in params:\n                        if cls._precomputed_specs[index]:\n                            field_name, field_spec, value_spec, field_params, _ = cls._precomputed_specs[index]\n                        else:\n                            field_name, field_spec, value_spec, field_params, _ = self._determine_spec(index)\n                        self.children[index] = self._make_value(field_name, field_spec, value_spec, field_params, None)\n            return\n\n        try:\n            self.children = []\n            contents_length = len(self._contents)\n            child_pointer = 0\n            field = 0\n            field_len = len(self._fields)\n            parts = None\n            again = child_pointer < contents_length\n            while again:\n                if parts is None:\n                    parts, child_pointer = _parse(self._contents, contents_length, pointer=child_pointer)\n                again = child_pointer < contents_length\n\n                if field < field_len:\n                    _, field_spec, value_spec, field_params, spec_override = (\n                        cls._precomputed_specs[field] or self._determine_spec(field))\n\n                    # If the next value is optional or default, allow it to be absent\n                    if field_params and ('optional' in field_params or 'default' in field_params):\n                        if self._field_ids[field] != (parts[0], parts[2]) and field_spec != Any:\n\n                            # See if the value is a valid choice before assuming\n                            # that we have a missing optional or default value\n                            choice_match = False\n                            if issubclass(field_spec, Choice):\n                                try:\n                                    tester = field_spec(**field_params)\n                                    tester.validate(parts[0], parts[2], parts[4])\n                                    choice_match = True\n                                except (ValueError):\n                                    pass\n\n                            if not choice_match:\n                                if 'optional' in field_params:\n                                    self.children.append(VOID)\n                                else:\n                                    self.children.append(field_spec(**field_params))\n                                field += 1\n                                again = True\n                                continue\n\n                    if field_spec is None or (spec_override and issubclass(field_spec, Any)):\n                        field_spec = value_spec\n                        spec_override = None\n\n                    if spec_override:\n                        child = parts + (field_spec, field_params, value_spec)\n                    else:\n                        child = parts + (field_spec, field_params)\n\n                # Handle situations where an optional or defaulted field definition is incorrect\n                elif field_len > 0 and field + 1 <= field_len:\n                    missed_fields = []\n                    prev_field = field - 1\n                    while prev_field >= 0:\n                        prev_field_info = self._fields[prev_field]\n                        if len(prev_field_info) < 3:\n                            break\n                        if 'optional' in prev_field_info[2] or 'default' in prev_field_info[2]:\n                            missed_fields.append(prev_field_info[0])\n                        prev_field -= 1\n                    plural = 's' if len(missed_fields) > 1 else ''\n                    missed_field_names = ', '.join(missed_fields)\n                    raise ValueError(unwrap(\n                        '''\n                        Data for field %s (%s class, %s method, tag %s) does\n                        not match the field definition%s of %s\n                        ''',\n                        field + 1,\n                        CLASS_NUM_TO_NAME_MAP.get(parts[0]),\n                        METHOD_NUM_TO_NAME_MAP.get(parts[1]),\n                        parts[2],\n                        plural,\n                        missed_field_names\n                    ))\n\n                else:\n                    child = parts\n\n                if recurse:\n                    child = _build(*child)\n                    if isinstance(child, (Sequence, SequenceOf)):\n                        child._parse_children(recurse=True)\n\n                self.children.append(child)\n                field += 1\n                parts = None\n\n            index = len(self.children)\n            while index < field_len:\n                name, field_spec, field_params = self._fields[index]\n                if 'default' in field_params:\n                    self.children.append(field_spec(**field_params))\n                elif 'optional' in field_params:\n                    self.children.append(VOID)\n                else:\n                    raise ValueError(unwrap(\n                        '''\n                        Field \"%s\" is missing from structure\n                        ''',\n                        name\n                    ))\n                index += 1\n\n        except (ValueError, TypeError) as e:\n            self.children = None\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while parsing %s' % type_name(self),) + args\n            raise e\n\n    def spec(self, field_name):\n        \"\"\"\n        Determines the spec to use for the field specified. Depending on how\n        the spec is determined (_oid_pair or _spec_callbacks), it may be\n        necessary to set preceding field values before calling this. Usually\n        specs, if dynamic, are controlled by a preceding ObjectIdentifier\n        field.\n\n        :param field_name:\n            A unicode string of the field name to get the spec for\n\n        :return:\n            A child class of asn1crypto.core.Asn1Value that the field must be\n            encoded using\n        \"\"\"\n\n        if not isinstance(field_name, str_cls):\n            raise TypeError(unwrap(\n                '''\n                field_name must be a unicode string, not %s\n                ''',\n                type_name(field_name)\n            ))\n\n        if self._fields is None:\n            raise ValueError(unwrap(\n                '''\n                Unable to retrieve spec for field %s in the class %s because\n                _fields has not been set\n                ''',\n                repr(field_name),\n                type_name(self)\n            ))\n\n        index = self._field_map[field_name]\n        info = self._determine_spec(index)\n\n        return info[2]\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            An OrderedDict or None. If an OrderedDict, all child values are\n            recursively converted to native representation also.\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            if self.children is None:\n                self._parse_children(recurse=True)\n            try:\n                self._native = OrderedDict()\n                for index, child in enumerate(self.children):\n                    if child.__class__ == tuple:\n                        child = _build(*child)\n                        self.children[index] = child\n                    try:\n                        name = self._fields[index][0]\n                    except (IndexError):\n                        name = str_cls(index)\n                    self._native[name] = child.native\n            except (ValueError, TypeError) as e:\n                self._native = None\n                args = e.args[1:]\n                e.args = (e.args[0] + '\\n    while parsing %s' % type_name(self),) + args\n                raise e\n        return self._native\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another Sequence object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(Sequence, self)._copy(other, copy_func)\n        if self.children is not None:\n            self.children = []\n            for child in other.children:\n                if child.__class__ == tuple:\n                    self.children.append(child)\n                else:\n                    self.children.append(child.copy())\n\n    def debug(self, nest_level=1):\n        \"\"\"\n        Show the binary data and parsed data in a tree structure\n        \"\"\"\n\n        if self.children is None:\n            self._parse_children()\n\n        prefix = '  ' * nest_level\n        _basic_debug(prefix, self)\n        for field_name in self:\n            child = self._lazy_child(self._field_map[field_name])\n            if child is not VOID:\n                print('%s    Field \"%s\"' % (prefix, field_name))\n                child.debug(nest_level + 3)\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        # If the length is indefinite, force the re-encoding\n        if self._header is not None and self._header[-1:] == b'\\x80':\n            force = True\n\n        # We can't force encoding if we don't have a spec\n        if force and self._fields == [] and self.__class__ is Sequence:\n            force = False\n\n        if force:\n            self._set_contents(force=force)\n\n        if self._fields and self.children is not None:\n            for index, (field_name, _, params) in enumerate(self._fields):\n                if self.children[index] is not VOID:\n                    continue\n                if 'default' in params or 'optional' in params:\n                    continue\n                raise ValueError(unwrap(\n                    '''\n                    Field \"%s\" is missing from structure\n                    ''',\n                    field_name\n                ))\n\n        return Asn1Value.dump(self)\n\n\nclass SequenceOf(Asn1Value):\n    \"\"\"\n    Represents a sequence (ordered) of a single type of values from ASN.1 as a\n    Python object with a list-like interface\n    \"\"\"\n\n    tag = 16\n\n    class_ = 0\n    method = 1\n\n    # A list of child objects\n    children = None\n\n    # SequenceOf overrides .contents to be a property so that the mutated state\n    # of child objects can be checked to ensure everything is up-to-date\n    _contents = None\n\n    # Variable to track if the object has been mutated\n    _mutated = False\n\n    # An Asn1Value class to use when parsing children\n    _child_spec = None\n\n    def __init__(self, value=None, default=None, contents=None, spec=None, **kwargs):\n        \"\"\"\n        Allows setting child objects and the _child_spec via the spec parameter\n        before passing everything else along to Asn1Value.__init__()\n\n        :param value:\n            A native Python datatype to initialize the object value with\n\n        :param default:\n            The default value if no value is specified\n\n        :param contents:\n            A byte string of the encoded contents of the value\n\n        :param spec:\n            A class derived from Asn1Value to use to parse children\n        \"\"\"\n\n        if spec:\n            self._child_spec = spec\n\n        Asn1Value.__init__(self, **kwargs)\n\n        try:\n            if contents is not None:\n                self.contents = contents\n            else:\n                if value is None and default is not None:\n                    value = default\n\n                if value is not None:\n                    for index, child in enumerate(value):\n                        self.__setitem__(index, child)\n\n                    # Make sure a blank list is serialized\n                    if self.contents is None:\n                        self._set_contents()\n\n        except (ValueError, TypeError) as e:\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while constructing %s' % type_name(self),) + args\n            raise e\n\n    @property\n    def contents(self):\n        \"\"\"\n        :return:\n            A byte string of the DER-encoded contents of the sequence\n        \"\"\"\n\n        if self.children is None:\n            return self._contents\n\n        if self._is_mutated():\n            self._set_contents()\n\n        return self._contents\n\n    @contents.setter\n    def contents(self, value):\n        \"\"\"\n        :param value:\n            A byte string of the DER-encoded contents of the sequence\n        \"\"\"\n\n        self._contents = value\n\n    def _is_mutated(self):\n        \"\"\"\n        :return:\n            A boolean - if the sequence or any children (recursively) have been\n            mutated\n        \"\"\"\n\n        mutated = self._mutated\n        if self.children is not None:\n            for child in self.children:\n                if isinstance(child, Sequence) or isinstance(child, SequenceOf):\n                    mutated = mutated or child._is_mutated()\n\n        return mutated\n\n    def _lazy_child(self, index):\n        \"\"\"\n        Builds a child object if the child has only been parsed into a tuple so far\n        \"\"\"\n\n        child = self.children[index]\n        if child.__class__ == tuple:\n            child = _build(*child)\n            self.children[index] = child\n        return child\n\n    def _make_value(self, value):\n        \"\"\"\n        Constructs a _child_spec value from a native Python data type, or\n        an appropriate Asn1Value object\n\n        :param value:\n            A native Python value, or some child of Asn1Value\n\n        :return:\n            An object of type _child_spec\n        \"\"\"\n\n        if isinstance(value, self._child_spec):\n            new_value = value\n\n        elif issubclass(self._child_spec, Any):\n            if isinstance(value, Asn1Value):\n                new_value = value\n            else:\n                raise ValueError(unwrap(\n                    '''\n                    Can not set a native python value to %s where the\n                    _child_spec is Any - value must be an instance of Asn1Value\n                    ''',\n                    type_name(self)\n                ))\n\n        elif issubclass(self._child_spec, Choice):\n            if not isinstance(value, Asn1Value):\n                raise ValueError(unwrap(\n                    '''\n                    Can not set a native python value to %s where the\n                    _child_spec is the choice type %s - value must be an\n                    instance of Asn1Value\n                    ''',\n                    type_name(self),\n                    self._child_spec.__name__\n                ))\n            if not isinstance(value, self._child_spec):\n                wrapper = self._child_spec()\n                wrapper.validate(value.class_, value.tag, value.contents)\n                wrapper._parsed = value\n                value = wrapper\n            new_value = value\n\n        else:\n            return self._child_spec(value=value)\n\n        params = {}\n        if self._child_spec.explicit:\n            params['explicit'] = self._child_spec.explicit\n        if self._child_spec.implicit:\n            params['implicit'] = (self._child_spec.class_, self._child_spec.tag)\n        return _fix_tagging(new_value, params)\n\n    def __len__(self):\n        \"\"\"\n        :return:\n            An integer\n        \"\"\"\n        # We inline this checks to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        return len(self.children)\n\n    def __getitem__(self, key):\n        \"\"\"\n        Allows accessing children via index\n\n        :param key:\n            Integer index of child\n        \"\"\"\n\n        # We inline this checks to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        return self._lazy_child(key)\n\n    def __setitem__(self, key, value):\n        \"\"\"\n        Allows overriding a child via index\n\n        :param key:\n            Integer index of child\n\n        :param value:\n            Native python datatype that will be passed to _child_spec to create\n            new child object\n        \"\"\"\n\n        # We inline this checks to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        new_value = self._make_value(value)\n\n        # If adding at the end, create a space for the new value\n        if key == len(self.children):\n            self.children.append(None)\n            if self._native is not None:\n                self._native.append(None)\n\n        self.children[key] = new_value\n\n        if self._native is not None:\n            self._native[key] = self.children[key].native\n\n        self._mutated = True\n\n    def __delitem__(self, key):\n        \"\"\"\n        Allows removing a child via index\n\n        :param key:\n            Integer index of child\n        \"\"\"\n\n        # We inline this checks to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        self.children.pop(key)\n        if self._native is not None:\n            self._native.pop(key)\n\n        self._mutated = True\n\n    def __iter__(self):\n        \"\"\"\n        :return:\n            An iter() of child objects\n        \"\"\"\n\n        # We inline this checks to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        for index in range(0, len(self.children)):\n            yield self._lazy_child(index)\n\n    def __contains__(self, item):\n        \"\"\"\n        :param item:\n            An object of the type cls._child_spec\n\n        :return:\n            A boolean if the item is contained in this SequenceOf\n        \"\"\"\n\n        if item is None or item is VOID:\n            return False\n\n        if not isinstance(item, self._child_spec):\n            raise TypeError(unwrap(\n                '''\n                Checking membership in %s is only available for instances of\n                %s, not %s\n                ''',\n                type_name(self),\n                type_name(self._child_spec),\n                type_name(item)\n            ))\n\n        for child in self:\n            if child == item:\n                return True\n\n        return False\n\n    def append(self, value):\n        \"\"\"\n        Allows adding a child to the end of the sequence\n\n        :param value:\n            Native python datatype that will be passed to _child_spec to create\n            new child object\n        \"\"\"\n\n        # We inline this checks to prevent method invocation each time\n        if self.children is None:\n            self._parse_children()\n\n        self.children.append(self._make_value(value))\n\n        if self._native is not None:\n            self._native.append(self.children[-1].native)\n\n        self._mutated = True\n\n    def _set_contents(self, force=False):\n        \"\"\"\n        Encodes all child objects into the contents for this object\n\n        :param force:\n            Ensure all contents are in DER format instead of possibly using\n            cached BER-encoded data\n        \"\"\"\n\n        if self.children is None:\n            self._parse_children()\n\n        contents = BytesIO()\n        for child in self:\n            contents.write(child.dump(force=force))\n        self._contents = contents.getvalue()\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def _parse_children(self, recurse=False):\n        \"\"\"\n        Parses the contents and generates Asn1Value objects based on the\n        definitions from _child_spec.\n\n        :param recurse:\n            If child objects that are Sequence or SequenceOf objects should\n            be recursively parsed\n\n        :raises:\n            ValueError - when an error occurs parsing child objects\n        \"\"\"\n\n        try:\n            self.children = []\n            if self._contents is None:\n                return\n            contents_length = len(self._contents)\n            child_pointer = 0\n            while child_pointer < contents_length:\n                parts, child_pointer = _parse(self._contents, contents_length, pointer=child_pointer)\n                if self._child_spec:\n                    child = parts + (self._child_spec,)\n                else:\n                    child = parts\n                if recurse:\n                    child = _build(*child)\n                    if isinstance(child, (Sequence, SequenceOf)):\n                        child._parse_children(recurse=True)\n                self.children.append(child)\n        except (ValueError, TypeError) as e:\n            self.children = None\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while parsing %s' % type_name(self),) + args\n            raise e\n\n    def spec(self):\n        \"\"\"\n        Determines the spec to use for child values.\n\n        :return:\n            A child class of asn1crypto.core.Asn1Value that child values must be\n            encoded using\n        \"\"\"\n\n        return self._child_spec\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A list or None. If a list, all child values are recursively\n            converted to native representation also.\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            if self.children is None:\n                self._parse_children(recurse=True)\n            try:\n                self._native = [child.native for child in self]\n            except (ValueError, TypeError) as e:\n                args = e.args[1:]\n                e.args = (e.args[0] + '\\n    while parsing %s' % type_name(self),) + args\n                raise e\n        return self._native\n\n    def _copy(self, other, copy_func):\n        \"\"\"\n        Copies the contents of another SequenceOf object to itself\n\n        :param object:\n            Another instance of the same class\n\n        :param copy_func:\n            An reference of copy.copy() or copy.deepcopy() to use when copying\n            lists, dicts and objects\n        \"\"\"\n\n        super(SequenceOf, self)._copy(other, copy_func)\n        if self.children is not None:\n            self.children = []\n            for child in other.children:\n                if child.__class__ == tuple:\n                    self.children.append(child)\n                else:\n                    self.children.append(child.copy())\n\n    def debug(self, nest_level=1):\n        \"\"\"\n        Show the binary data and parsed data in a tree structure\n        \"\"\"\n\n        if self.children is None:\n            self._parse_children()\n\n        prefix = '  ' * nest_level\n        _basic_debug(prefix, self)\n        for child in self:\n            child.debug(nest_level + 1)\n\n    def dump(self, force=False):\n        \"\"\"\n        Encodes the value using DER\n\n        :param force:\n            If the encoded contents already exist, clear them and regenerate\n            to ensure they are in DER format instead of BER format\n\n        :return:\n            A byte string of the DER-encoded value\n        \"\"\"\n\n        # If the length is indefinite, force the re-encoding\n        if self._header is not None and self._header[-1:] == b'\\x80':\n            force = True\n\n        if force:\n            self._set_contents(force=force)\n\n        return Asn1Value.dump(self)\n\n\nclass Set(Sequence):\n    \"\"\"\n    Represents a set of fields (unordered) from ASN.1 as a Python object with a\n    dict-like interface\n    \"\"\"\n\n    method = 1\n    class_ = 0\n    tag = 17\n\n    # A dict of 2-element tuples in the form (class_, tag) as keys and integers\n    # as values that are the index of the field in _fields\n    _field_ids = None\n\n    def _setup(self):\n        \"\"\"\n        Generates _field_map, _field_ids and _oid_nums for use in parsing\n        \"\"\"\n\n        cls = self.__class__\n        cls._field_map = {}\n        cls._field_ids = {}\n        cls._precomputed_specs = []\n        for index, field in enumerate(cls._fields):\n            if len(field) < 3:\n                field = field + ({},)\n                cls._fields[index] = field\n            cls._field_map[field[0]] = index\n            cls._field_ids[_build_id_tuple(field[2], field[1])] = index\n\n        if cls._oid_pair is not None:\n            cls._oid_nums = (cls._field_map[cls._oid_pair[0]], cls._field_map[cls._oid_pair[1]])\n\n        for index, field in enumerate(cls._fields):\n            has_callback = cls._spec_callbacks is not None and field[0] in cls._spec_callbacks\n            is_mapped_oid = cls._oid_nums is not None and cls._oid_nums[1] == index\n            if has_callback or is_mapped_oid:\n                cls._precomputed_specs.append(None)\n            else:\n                cls._precomputed_specs.append((field[0], field[1], field[1], field[2], None))\n\n    def _parse_children(self, recurse=False):\n        \"\"\"\n        Parses the contents and generates Asn1Value objects based on the\n        definitions from _fields.\n\n        :param recurse:\n            If child objects that are Sequence or SequenceOf objects should\n            be recursively parsed\n\n        :raises:\n            ValueError - when an error occurs parsing child objects\n        \"\"\"\n\n        cls = self.__class__\n        if self._contents is None:\n            if self._fields:\n                self.children = [VOID] * len(self._fields)\n                for index, (_, _, params) in enumerate(self._fields):\n                    if 'default' in params:\n                        if cls._precomputed_specs[index]:\n                            field_name, field_spec, value_spec, field_params, _ = cls._precomputed_specs[index]\n                        else:\n                            field_name, field_spec, value_spec, field_params, _ = self._determine_spec(index)\n                        self.children[index] = self._make_value(field_name, field_spec, value_spec, field_params, None)\n            return\n\n        try:\n            child_map = {}\n            contents_length = len(self.contents)\n            child_pointer = 0\n            seen_field = 0\n            while child_pointer < contents_length:\n                parts, child_pointer = _parse(self.contents, contents_length, pointer=child_pointer)\n\n                id_ = (parts[0], parts[2])\n\n                field = self._field_ids.get(id_)\n                if field is None:\n                    raise ValueError(unwrap(\n                        '''\n                        Data for field %s (%s class, %s method, tag %s) does\n                        not match any of the field definitions\n                        ''',\n                        seen_field,\n                        CLASS_NUM_TO_NAME_MAP.get(parts[0]),\n                        METHOD_NUM_TO_NAME_MAP.get(parts[1]),\n                        parts[2],\n                    ))\n\n                _, field_spec, value_spec, field_params, spec_override = (\n                    cls._precomputed_specs[field] or self._determine_spec(field))\n\n                if field_spec is None or (spec_override and issubclass(field_spec, Any)):\n                    field_spec = value_spec\n                    spec_override = None\n\n                if spec_override:\n                    child = parts + (field_spec, field_params, value_spec)\n                else:\n                    child = parts + (field_spec, field_params)\n\n                if recurse:\n                    child = _build(*child)\n                    if isinstance(child, (Sequence, SequenceOf)):\n                        child._parse_children(recurse=True)\n\n                child_map[field] = child\n                seen_field += 1\n\n            total_fields = len(self._fields)\n\n            for index in range(0, total_fields):\n                if index in child_map:\n                    continue\n\n                name, field_spec, value_spec, field_params, spec_override = (\n                    cls._precomputed_specs[index] or self._determine_spec(index))\n\n                if field_spec is None or (spec_override and issubclass(field_spec, Any)):\n                    field_spec = value_spec\n                    spec_override = None\n\n                missing = False\n\n                if not field_params:\n                    missing = True\n                elif 'optional' not in field_params and 'default' not in field_params:\n                    missing = True\n                elif 'optional' in field_params:\n                    child_map[index] = VOID\n                elif 'default' in field_params:\n                    child_map[index] = field_spec(**field_params)\n\n                if missing:\n                    raise ValueError(unwrap(\n                        '''\n                        Missing required field \"%s\" from %s\n                        ''',\n                        name,\n                        type_name(self)\n                    ))\n\n            self.children = []\n            for index in range(0, total_fields):\n                self.children.append(child_map[index])\n\n        except (ValueError, TypeError) as e:\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while parsing %s' % type_name(self),) + args\n            raise e\n\n    def _set_contents(self, force=False):\n        \"\"\"\n        Encodes all child objects into the contents for this object.\n\n        This method is overridden because a Set needs to be encoded by\n        removing defaulted fields and then sorting the fields by tag.\n\n        :param force:\n            Ensure all contents are in DER format instead of possibly using\n            cached BER-encoded data\n        \"\"\"\n\n        if self.children is None:\n            self._parse_children()\n\n        child_tag_encodings = []\n        for index, child in enumerate(self.children):\n            child_encoding = child.dump(force=force)\n\n            # Skip encoding defaulted children\n            name, spec, field_params = self._fields[index]\n            if 'default' in field_params:\n                if spec(**field_params).dump() == child_encoding:\n                    continue\n\n            child_tag_encodings.append((child.tag, child_encoding))\n        child_tag_encodings.sort(key=lambda ct: ct[0])\n\n        self._contents = b''.join([ct[1] for ct in child_tag_encodings])\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n\nclass SetOf(SequenceOf):\n    \"\"\"\n    Represents a set (unordered) of a single type of values from ASN.1 as a\n    Python object with a list-like interface\n    \"\"\"\n\n    tag = 17\n\n    def _set_contents(self, force=False):\n        \"\"\"\n        Encodes all child objects into the contents for this object.\n\n        This method is overridden because a SetOf needs to be encoded by\n        sorting the child encodings.\n\n        :param force:\n            Ensure all contents are in DER format instead of possibly using\n            cached BER-encoded data\n        \"\"\"\n\n        if self.children is None:\n            self._parse_children()\n\n        child_encodings = []\n        for child in self:\n            child_encodings.append(child.dump(force=force))\n\n        self._contents = b''.join(sorted(child_encodings))\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n\nclass EmbeddedPdv(Sequence):\n    \"\"\"\n    A sequence structure\n    \"\"\"\n\n    tag = 11\n\n\nclass NumericString(AbstractString):\n    \"\"\"\n    Represents a numeric string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 18\n    _encoding = 'latin1'\n\n\nclass PrintableString(AbstractString):\n    \"\"\"\n    Represents a printable string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 19\n    _encoding = 'latin1'\n\n\nclass TeletexString(AbstractString):\n    \"\"\"\n    Represents a teletex string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 20\n    _encoding = 'teletex'\n\n\nclass VideotexString(OctetString):\n    \"\"\"\n    Represents a videotex string from ASN.1 as a Python byte string\n    \"\"\"\n\n    tag = 21\n\n\nclass IA5String(AbstractString):\n    \"\"\"\n    Represents an IA5 string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 22\n    _encoding = 'ascii'\n\n\nclass AbstractTime(AbstractString):\n    \"\"\"\n    Represents a time from ASN.1 as a Python datetime.datetime object\n    \"\"\"\n\n    @property\n    def _parsed_time(self):\n        \"\"\"\n        The parsed datetime string.\n\n        :raises:\n            ValueError - when an invalid value is passed\n\n        :return:\n            A dict with the parsed values\n        \"\"\"\n\n        string = str_cls(self)\n\n        m = self._TIMESTRING_RE.match(string)\n        if not m:\n            raise ValueError(unwrap(\n                '''\n                Error parsing %s to a %s\n                ''',\n                string,\n                type_name(self),\n            ))\n\n        groups = m.groupdict()\n\n        tz = None\n        if groups['zulu']:\n            tz = timezone.utc\n        elif groups['dsign']:\n            sign = 1 if groups['dsign'] == '+' else -1\n            tz = create_timezone(sign * timedelta(\n                hours=int(groups['dhour']),\n                minutes=int(groups['dminute'] or 0)\n            ))\n\n        if groups['fraction']:\n            # Compute fraction in microseconds\n            fract = Fraction(\n                int(groups['fraction']),\n                10 ** len(groups['fraction'])\n            ) * 1000000\n\n            if groups['minute'] is None:\n                fract *= 3600\n            elif groups['second'] is None:\n                fract *= 60\n\n            fract_usec = int(fract.limit_denominator(1))\n\n        else:\n            fract_usec = 0\n\n        return {\n            'year': int(groups['year']),\n            'month': int(groups['month']),\n            'day': int(groups['day']),\n            'hour': int(groups['hour']),\n            'minute': int(groups['minute'] or 0),\n            'second': int(groups['second'] or 0),\n            'tzinfo': tz,\n            'fraction': fract_usec,\n        }\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A datetime.datetime object, asn1crypto.util.extended_datetime object or\n            None. The datetime object is usually timezone aware. If it's naive, then\n            it's in the sender's local time; see X.680 sect. 42.3\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            parsed = self._parsed_time\n\n            fraction = parsed.pop('fraction', 0)\n\n            value = self._get_datetime(parsed)\n\n            if fraction:\n                value += timedelta(microseconds=fraction)\n\n            self._native = value\n\n        return self._native\n\n\nclass UTCTime(AbstractTime):\n    \"\"\"\n    Represents a UTC time from ASN.1 as a timezone aware Python datetime.datetime object\n    \"\"\"\n\n    tag = 23\n\n    # Regular expression for UTCTime as described in X.680 sect. 43 and ISO 8601\n    _TIMESTRING_RE = re.compile(r'''\n        ^\n        # YYMMDD\n        (?P<year>\\d{2})\n        (?P<month>\\d{2})\n        (?P<day>\\d{2})\n\n        # hhmm or hhmmss\n        (?P<hour>\\d{2})\n        (?P<minute>\\d{2})\n        (?P<second>\\d{2})?\n\n        # Matches nothing, needed because GeneralizedTime uses this.\n        (?P<fraction>)\n\n        # Z or [-+]hhmm\n        (?:\n            (?P<zulu>Z)\n            |\n            (?:\n                (?P<dsign>[-+])\n                (?P<dhour>\\d{2})\n                (?P<dminute>\\d{2})\n            )\n        )\n        $\n    ''', re.X)\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A unicode string or a datetime.datetime object\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if isinstance(value, datetime):\n            if not value.tzinfo:\n                raise ValueError('Must be timezone aware')\n\n            # Convert value to UTC.\n            value = value.astimezone(utc_with_dst)\n\n            if not 1950 <= value.year <= 2049:\n                raise ValueError('Year of the UTCTime is not in range [1950, 2049], use GeneralizedTime instead')\n\n            value = value.strftime('%y%m%d%H%M%SZ')\n            if _PY2:\n                value = value.decode('ascii')\n\n        AbstractString.set(self, value)\n        # Set it to None and let the class take care of converting the next\n        # time that .native is called\n        self._native = None\n\n    def _get_datetime(self, parsed):\n        \"\"\"\n        Create a datetime object from the parsed time.\n\n        :return:\n            An aware datetime.datetime object\n        \"\"\"\n\n        # X.680 only specifies that UTCTime is not using a century.\n        # So \"18\" could as well mean 2118 or 1318.\n        # X.509 and CMS specify to use UTCTime for years earlier than 2050.\n        # Assume that UTCTime is only used for years [1950, 2049].\n        if parsed['year'] < 50:\n            parsed['year'] += 2000\n        else:\n            parsed['year'] += 1900\n\n        return datetime(**parsed)\n\n\nclass GeneralizedTime(AbstractTime):\n    \"\"\"\n    Represents a generalized time from ASN.1 as a Python datetime.datetime\n    object or asn1crypto.util.extended_datetime object in UTC\n    \"\"\"\n\n    tag = 24\n\n    # Regular expression for GeneralizedTime as described in X.680 sect. 42 and ISO 8601\n    _TIMESTRING_RE = re.compile(r'''\n        ^\n        # YYYYMMDD\n        (?P<year>\\d{4})\n        (?P<month>\\d{2})\n        (?P<day>\\d{2})\n\n        # hh or hhmm or hhmmss\n        (?P<hour>\\d{2})\n        (?:\n            (?P<minute>\\d{2})\n            (?P<second>\\d{2})?\n        )?\n\n        # Optional fraction; [.,]dddd (one or more decimals)\n        # If Seconds are given, it's fractions of Seconds.\n        # Else if Minutes are given, it's fractions of Minutes.\n        # Else it's fractions of Hours.\n        (?:\n            [,.]\n            (?P<fraction>\\d+)\n        )?\n\n        # Optional timezone. If left out, the time is in local time.\n        # Z or [-+]hh or [-+]hhmm\n        (?:\n            (?P<zulu>Z)\n            |\n            (?:\n                (?P<dsign>[-+])\n                (?P<dhour>\\d{2})\n                (?P<dminute>\\d{2})?\n            )\n        )?\n        $\n    ''', re.X)\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A unicode string, a datetime.datetime object or an\n            asn1crypto.util.extended_datetime object\n\n        :raises:\n            ValueError - when an invalid value is passed\n        \"\"\"\n\n        if isinstance(value, (datetime, extended_datetime)):\n            if not value.tzinfo:\n                raise ValueError('Must be timezone aware')\n\n            # Convert value to UTC.\n            value = value.astimezone(utc_with_dst)\n\n            if value.microsecond:\n                fraction = '.' + str(value.microsecond).zfill(6).rstrip('0')\n            else:\n                fraction = ''\n\n            value = value.strftime('%Y%m%d%H%M%S') + fraction + 'Z'\n            if _PY2:\n                value = value.decode('ascii')\n\n        AbstractString.set(self, value)\n        # Set it to None and let the class take care of converting the next\n        # time that .native is called\n        self._native = None\n\n    def _get_datetime(self, parsed):\n        \"\"\"\n        Create a datetime object from the parsed time.\n\n        :return:\n            A datetime.datetime object or asn1crypto.util.extended_datetime object.\n            It may or may not be aware.\n        \"\"\"\n\n        if parsed['year'] == 0:\n            # datetime does not support year 0. Use extended_datetime instead.\n            return extended_datetime(**parsed)\n        else:\n            return datetime(**parsed)\n\n\nclass GraphicString(AbstractString):\n    \"\"\"\n    Represents a graphic string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 25\n    # This is technically not correct since this type can contain any charset\n    _encoding = 'latin1'\n\n\nclass VisibleString(AbstractString):\n    \"\"\"\n    Represents a visible string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 26\n    _encoding = 'latin1'\n\n\nclass GeneralString(AbstractString):\n    \"\"\"\n    Represents a general string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 27\n    # This is technically not correct since this type can contain any charset\n    _encoding = 'latin1'\n\n\nclass UniversalString(AbstractString):\n    \"\"\"\n    Represents a universal string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 28\n    _encoding = 'utf-32-be'\n\n\nclass CharacterString(AbstractString):\n    \"\"\"\n    Represents a character string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 29\n    # This is technically not correct since this type can contain any charset\n    _encoding = 'latin1'\n\n\nclass BMPString(AbstractString):\n    \"\"\"\n    Represents a BMP string from ASN.1 as a Python unicode string\n    \"\"\"\n\n    tag = 30\n    _encoding = 'utf-16-be'\n\n\ndef _basic_debug(prefix, self):\n    \"\"\"\n    Prints out basic information about an Asn1Value object. Extracted for reuse\n    among different classes that customize the debug information.\n\n    :param prefix:\n        A unicode string of spaces to prefix output line with\n\n    :param self:\n        The object to print the debugging information about\n    \"\"\"\n\n    print('%s%s Object #%s' % (prefix, type_name(self), id(self)))\n    if self._header:\n        print('%s  Header: 0x%s' % (prefix, binascii.hexlify(self._header or b'').decode('utf-8')))\n\n    has_header = self.method is not None and self.class_ is not None and self.tag is not None\n    if has_header:\n        method_name = METHOD_NUM_TO_NAME_MAP.get(self.method)\n        class_name = CLASS_NUM_TO_NAME_MAP.get(self.class_)\n\n    if self.explicit is not None:\n        for class_, tag in self.explicit:\n            print(\n                '%s    %s tag %s (explicitly tagged)' %\n                (\n                    prefix,\n                    CLASS_NUM_TO_NAME_MAP.get(class_),\n                    tag\n                )\n            )\n        if has_header:\n            print('%s      %s %s %s' % (prefix, method_name, class_name, self.tag))\n\n    elif self.implicit:\n        if has_header:\n            print('%s    %s %s tag %s (implicitly tagged)' % (prefix, method_name, class_name, self.tag))\n\n    elif has_header:\n        print('%s    %s %s tag %s' % (prefix, method_name, class_name, self.tag))\n\n    if self._trailer:\n        print('%s  Trailer: 0x%s' % (prefix, binascii.hexlify(self._trailer or b'').decode('utf-8')))\n\n    print('%s  Data: 0x%s' % (prefix, binascii.hexlify(self.contents or b'').decode('utf-8')))\n\n\ndef _tag_type_to_explicit_implicit(params):\n    \"\"\"\n    Converts old-style \"tag_type\" and \"tag\" params to \"explicit\" and \"implicit\"\n\n    :param params:\n        A dict of parameters to convert from tag_type/tag to explicit/implicit\n    \"\"\"\n\n    if 'tag_type' in params:\n        if params['tag_type'] == 'explicit':\n            params['explicit'] = (params.get('class', 2), params['tag'])\n        elif params['tag_type'] == 'implicit':\n            params['implicit'] = (params.get('class', 2), params['tag'])\n        del params['tag_type']\n        del params['tag']\n        if 'class' in params:\n            del params['class']\n\n\ndef _fix_tagging(value, params):\n    \"\"\"\n    Checks if a value is properly tagged based on the spec, and re/untags as\n    necessary\n\n    :param value:\n        An Asn1Value object\n\n    :param params:\n        A dict of spec params\n\n    :return:\n        An Asn1Value that is properly tagged\n    \"\"\"\n\n    _tag_type_to_explicit_implicit(params)\n\n    retag = False\n    if 'implicit' not in params:\n        if value.implicit is not False:\n            retag = True\n    else:\n        if isinstance(params['implicit'], tuple):\n            class_, tag = params['implicit']\n        else:\n            tag = params['implicit']\n            class_ = 'context'\n        if value.implicit is False:\n            retag = True\n        elif value.class_ != CLASS_NAME_TO_NUM_MAP[class_] or value.tag != tag:\n            retag = True\n\n    if params.get('explicit') != value.explicit:\n        retag = True\n\n    if retag:\n        return value.retag(params)\n    return value\n\n\ndef _build_id_tuple(params, spec):\n    \"\"\"\n    Builds a 2-element tuple used to identify fields by grabbing the class_\n    and tag from an Asn1Value class and the params dict being passed to it\n\n    :param params:\n        A dict of params to pass to spec\n\n    :param spec:\n        An Asn1Value class\n\n    :return:\n        A 2-element integer tuple in the form (class_, tag)\n    \"\"\"\n\n    # Handle situations where the spec is not known at setup time\n    if spec is None:\n        return (None, None)\n\n    required_class = spec.class_\n    required_tag = spec.tag\n\n    _tag_type_to_explicit_implicit(params)\n\n    if 'explicit' in params:\n        if isinstance(params['explicit'], tuple):\n            required_class, required_tag = params['explicit']\n        else:\n            required_class = 2\n            required_tag = params['explicit']\n    elif 'implicit' in params:\n        if isinstance(params['implicit'], tuple):\n            required_class, required_tag = params['implicit']\n        else:\n            required_class = 2\n            required_tag = params['implicit']\n    if required_class is not None and not isinstance(required_class, int_types):\n        required_class = CLASS_NAME_TO_NUM_MAP[required_class]\n\n    required_class = params.get('class_', required_class)\n    required_tag = params.get('tag', required_tag)\n\n    return (required_class, required_tag)\n\n\ndef _int_to_bit_tuple(value, bits):\n    \"\"\"\n    Format value as a tuple of 1s and 0s.\n\n    :param value:\n        A non-negative integer to format\n\n    :param bits:\n        Number of bits in the output\n\n    :return:\n        A tuple of 1s and 0s with bits members.\n    \"\"\"\n\n    if not value and not bits:\n        return ()\n\n    result = tuple(map(int, format(value, '0{0}b'.format(bits))))\n    if len(result) != bits:\n        raise ValueError('Result too large: {0} > {1}'.format(len(result), bits))\n\n    return result\n\n\n_UNIVERSAL_SPECS = {\n    1: Boolean,\n    2: Integer,\n    3: BitString,\n    4: OctetString,\n    5: Null,\n    6: ObjectIdentifier,\n    7: ObjectDescriptor,\n    8: InstanceOf,\n    9: Real,\n    10: Enumerated,\n    11: EmbeddedPdv,\n    12: UTF8String,\n    13: RelativeOid,\n    16: Sequence,\n    17: Set,\n    18: NumericString,\n    19: PrintableString,\n    20: TeletexString,\n    21: VideotexString,\n    22: IA5String,\n    23: UTCTime,\n    24: GeneralizedTime,\n    25: GraphicString,\n    26: VisibleString,\n    27: GeneralString,\n    28: UniversalString,\n    29: CharacterString,\n    30: BMPString\n}\n\n\ndef _build(class_, method, tag, header, contents, trailer, spec=None, spec_params=None, nested_spec=None):\n    \"\"\"\n    Builds an Asn1Value object generically, or using a spec with optional params\n\n    :param class_:\n        An integer representing the ASN.1 class\n\n    :param method:\n        An integer representing the ASN.1 method\n\n    :param tag:\n        An integer representing the ASN.1 tag\n\n    :param header:\n        A byte string of the ASN.1 header (class, method, tag, length)\n\n    :param contents:\n        A byte string of the ASN.1 value\n\n    :param trailer:\n        A byte string of any ASN.1 trailer (only used by indefinite length encodings)\n\n    :param spec:\n        A class derived from Asn1Value that defines what class_ and tag the\n        value should have, and the semantics of the encoded value. The\n        return value will be of this type. If omitted, the encoded value\n        will be decoded using the standard universal tag based on the\n        encoded tag number.\n\n    :param spec_params:\n        A dict of params to pass to the spec object\n\n    :param nested_spec:\n        For certain Asn1Value classes (such as OctetString and BitString), the\n        contents can be further parsed and interpreted as another Asn1Value.\n        This parameter controls the spec for that sub-parsing.\n\n    :return:\n        An object of the type spec, or if not specified, a child of Asn1Value\n    \"\"\"\n\n    if spec_params is not None:\n        _tag_type_to_explicit_implicit(spec_params)\n\n    if header is None:\n        return VOID\n\n    header_set = False\n\n    # If an explicit specification was passed in, make sure it matches\n    if spec is not None:\n        # If there is explicit tagging and contents, we have to split\n        # the header and trailer off before we do the parsing\n        no_explicit = spec_params and 'no_explicit' in spec_params\n        if not no_explicit and (spec.explicit or (spec_params and 'explicit' in spec_params)):\n            if spec_params:\n                value = spec(**spec_params)\n            else:\n                value = spec()\n            original_explicit = value.explicit\n            explicit_info = reversed(original_explicit)\n            parsed_class = class_\n            parsed_method = method\n            parsed_tag = tag\n            to_parse = contents\n            explicit_header = header\n            explicit_trailer = trailer or b''\n            for expected_class, expected_tag in explicit_info:\n                if parsed_class != expected_class:\n                    raise ValueError(unwrap(\n                        '''\n                        Error parsing %s - explicitly-tagged class should have been\n                        %s, but %s was found\n                        ''',\n                        type_name(value),\n                        CLASS_NUM_TO_NAME_MAP.get(expected_class),\n                        CLASS_NUM_TO_NAME_MAP.get(parsed_class, parsed_class)\n                    ))\n                if parsed_method != 1:\n                    raise ValueError(unwrap(\n                        '''\n                        Error parsing %s - explicitly-tagged method should have\n                        been %s, but %s was found\n                        ''',\n                        type_name(value),\n                        METHOD_NUM_TO_NAME_MAP.get(1),\n                        METHOD_NUM_TO_NAME_MAP.get(parsed_method, parsed_method)\n                    ))\n                if parsed_tag != expected_tag:\n                    raise ValueError(unwrap(\n                        '''\n                        Error parsing %s - explicitly-tagged tag should have been\n                        %s, but %s was found\n                        ''',\n                        type_name(value),\n                        expected_tag,\n                        parsed_tag\n                    ))\n                info, _ = _parse(to_parse, len(to_parse))\n                parsed_class, parsed_method, parsed_tag, parsed_header, to_parse, parsed_trailer = info\n\n                if not isinstance(value, Choice):\n                    explicit_header += parsed_header\n                    explicit_trailer = parsed_trailer + explicit_trailer\n\n            value = _build(*info, spec=spec, spec_params={'no_explicit': True})\n            value._header = explicit_header\n            value._trailer = explicit_trailer\n            value.explicit = original_explicit\n            header_set = True\n        else:\n            if spec_params:\n                value = spec(contents=contents, **spec_params)\n            else:\n                value = spec(contents=contents)\n\n            if spec is Any:\n                pass\n\n            elif isinstance(value, Choice):\n                value.validate(class_, tag, contents)\n                try:\n                    # Force parsing the Choice now\n                    value.contents = header + value.contents\n                    header = b''\n                    value.parse()\n                except (ValueError, TypeError) as e:\n                    args = e.args[1:]\n                    e.args = (e.args[0] + '\\n    while parsing %s' % type_name(value),) + args\n                    raise e\n\n            else:\n                if class_ != value.class_:\n                    raise ValueError(unwrap(\n                        '''\n                        Error parsing %s - class should have been %s, but %s was\n                        found\n                        ''',\n                        type_name(value),\n                        CLASS_NUM_TO_NAME_MAP.get(value.class_),\n                        CLASS_NUM_TO_NAME_MAP.get(class_, class_)\n                    ))\n                if method != value.method:\n                    # Allow parsing a primitive method as constructed if the value\n                    # is indefinite length. This is to allow parsing BER.\n                    ber_indef = method == 1 and value.method == 0 and trailer == b'\\x00\\x00'\n                    if not ber_indef or not isinstance(value, Constructable):\n                        raise ValueError(unwrap(\n                            '''\n                            Error parsing %s - method should have been %s, but %s was found\n                            ''',\n                            type_name(value),\n                            METHOD_NUM_TO_NAME_MAP.get(value.method),\n                            METHOD_NUM_TO_NAME_MAP.get(method, method)\n                        ))\n                    else:\n                        value.method = method\n                        value._indefinite = True\n                if tag != value.tag:\n                    if isinstance(value._bad_tag, tuple):\n                        is_bad_tag = tag in value._bad_tag\n                    else:\n                        is_bad_tag = tag == value._bad_tag\n                    if not is_bad_tag:\n                        raise ValueError(unwrap(\n                            '''\n                            Error parsing %s - tag should have been %s, but %s was found\n                            ''',\n                            type_name(value),\n                            value.tag,\n                            tag\n                        ))\n\n    # For explicitly tagged, un-speced parsings, we use a generic container\n    # since we will be parsing the contents and discarding the outer object\n    # anyway a little further on\n    elif spec_params and 'explicit' in spec_params:\n        original_value = Asn1Value(contents=contents, **spec_params)\n        original_explicit = original_value.explicit\n\n        to_parse = contents\n        explicit_header = header\n        explicit_trailer = trailer or b''\n        for expected_class, expected_tag in reversed(original_explicit):\n            info, _ = _parse(to_parse, len(to_parse))\n            _, _, _, parsed_header, to_parse, parsed_trailer = info\n            explicit_header += parsed_header\n            explicit_trailer = parsed_trailer + explicit_trailer\n        value = _build(*info, spec=spec, spec_params={'no_explicit': True})\n        value._header = header + value._header\n        value._trailer += trailer or b''\n        value.explicit = original_explicit\n        header_set = True\n\n    # If no spec was specified, allow anything and just process what\n    # is in the input data\n    else:\n        if tag not in _UNIVERSAL_SPECS:\n            raise ValueError(unwrap(\n                '''\n                Unknown element - %s class, %s method, tag %s\n                ''',\n                CLASS_NUM_TO_NAME_MAP.get(class_),\n                METHOD_NUM_TO_NAME_MAP.get(method),\n                tag\n            ))\n\n        spec = _UNIVERSAL_SPECS[tag]\n\n        value = spec(contents=contents, class_=class_)\n        ber_indef = method == 1 and value.method == 0 and trailer == b'\\x00\\x00'\n        if ber_indef and isinstance(value, Constructable):\n            value._indefinite = True\n        value.method = method\n\n    if not header_set:\n        value._header = header\n        value._trailer = trailer or b''\n\n    # Destroy any default value that our contents have overwritten\n    value._native = None\n\n    if nested_spec:\n        try:\n            value.parse(nested_spec)\n        except (ValueError, TypeError) as e:\n            args = e.args[1:]\n            e.args = (e.args[0] + '\\n    while parsing %s' % type_name(value),) + args\n            raise e\n\n    return value\n\n\ndef _parse_build(encoded_data, pointer=0, spec=None, spec_params=None, strict=False):\n    \"\"\"\n    Parses a byte string generically, or using a spec with optional params\n\n    :param encoded_data:\n        A byte string that contains BER-encoded data\n\n    :param pointer:\n        The index in the byte string to parse from\n\n    :param spec:\n        A class derived from Asn1Value that defines what class_ and tag the\n        value should have, and the semantics of the encoded value. The\n        return value will be of this type. If omitted, the encoded value\n        will be decoded using the standard universal tag based on the\n        encoded tag number.\n\n    :param spec_params:\n        A dict of params to pass to the spec object\n\n    :param strict:\n        A boolean indicating if trailing data should be forbidden - if so, a\n        ValueError will be raised when trailing data exists\n\n    :return:\n        A 2-element tuple:\n         - 0: An object of the type spec, or if not specified, a child of Asn1Value\n         - 1: An integer indicating how many bytes were consumed\n    \"\"\"\n\n    encoded_len = len(encoded_data)\n    info, new_pointer = _parse(encoded_data, encoded_len, pointer)\n    if strict and new_pointer != pointer + encoded_len:\n        extra_bytes = pointer + encoded_len - new_pointer\n        raise ValueError('Extra data - %d bytes of trailing data were provided' % extra_bytes)\n    return (_build(*info, spec=spec, spec_params=spec_params), new_pointer)\n"
  },
  {
    "path": "libs/asn1crypto/crl.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for certificate revocation lists (CRL). Exports the\nfollowing items:\n\n - CertificateList()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport hashlib\n\nfrom .algos import SignedDigestAlgorithm\nfrom .core import (\n    Boolean,\n    Enumerated,\n    GeneralizedTime,\n    Integer,\n    ObjectIdentifier,\n    OctetBitString,\n    ParsableOctetString,\n    Sequence,\n    SequenceOf,\n)\nfrom .x509 import (\n    AuthorityInfoAccessSyntax,\n    AuthorityKeyIdentifier,\n    CRLDistributionPoints,\n    DistributionPointName,\n    GeneralNames,\n    Name,\n    ReasonFlags,\n    Time,\n)\n\n\n# The structures in this file are taken from https://tools.ietf.org/html/rfc5280\n\n\nclass Version(Integer):\n    _map = {\n        0: 'v1',\n        1: 'v2',\n        2: 'v3',\n    }\n\n\nclass IssuingDistributionPoint(Sequence):\n    _fields = [\n        ('distribution_point', DistributionPointName, {'explicit': 0, 'optional': True}),\n        ('only_contains_user_certs', Boolean, {'implicit': 1, 'default': False}),\n        ('only_contains_ca_certs', Boolean, {'implicit': 2, 'default': False}),\n        ('only_some_reasons', ReasonFlags, {'implicit': 3, 'optional': True}),\n        ('indirect_crl', Boolean, {'implicit': 4, 'default': False}),\n        ('only_contains_attribute_certs', Boolean, {'implicit': 5, 'default': False}),\n    ]\n\n\nclass TBSCertListExtensionId(ObjectIdentifier):\n    _map = {\n        '2.5.29.18': 'issuer_alt_name',\n        '2.5.29.20': 'crl_number',\n        '2.5.29.27': 'delta_crl_indicator',\n        '2.5.29.28': 'issuing_distribution_point',\n        '2.5.29.35': 'authority_key_identifier',\n        '2.5.29.46': 'freshest_crl',\n        '1.3.6.1.5.5.7.1.1': 'authority_information_access',\n    }\n\n\nclass TBSCertListExtension(Sequence):\n    _fields = [\n        ('extn_id', TBSCertListExtensionId),\n        ('critical', Boolean, {'default': False}),\n        ('extn_value', ParsableOctetString),\n    ]\n\n    _oid_pair = ('extn_id', 'extn_value')\n    _oid_specs = {\n        'issuer_alt_name': GeneralNames,\n        'crl_number': Integer,\n        'delta_crl_indicator': Integer,\n        'issuing_distribution_point': IssuingDistributionPoint,\n        'authority_key_identifier': AuthorityKeyIdentifier,\n        'freshest_crl': CRLDistributionPoints,\n        'authority_information_access': AuthorityInfoAccessSyntax,\n    }\n\n\nclass TBSCertListExtensions(SequenceOf):\n    _child_spec = TBSCertListExtension\n\n\nclass CRLReason(Enumerated):\n    _map = {\n        0: 'unspecified',\n        1: 'key_compromise',\n        2: 'ca_compromise',\n        3: 'affiliation_changed',\n        4: 'superseded',\n        5: 'cessation_of_operation',\n        6: 'certificate_hold',\n        8: 'remove_from_crl',\n        9: 'privilege_withdrawn',\n        10: 'aa_compromise',\n    }\n\n    @property\n    def human_friendly(self):\n        \"\"\"\n        :return:\n            A unicode string with revocation description that is suitable to\n            show to end-users. Starts with a lower case letter and phrased in\n            such a way that it makes sense after the phrase \"because of\" or\n            \"due to\".\n        \"\"\"\n\n        return {\n            'unspecified': 'an unspecified reason',\n            'key_compromise': 'a compromised key',\n            'ca_compromise': 'the CA being compromised',\n            'affiliation_changed': 'an affiliation change',\n            'superseded': 'certificate supersession',\n            'cessation_of_operation': 'a cessation of operation',\n            'certificate_hold': 'a certificate hold',\n            'remove_from_crl': 'removal from the CRL',\n            'privilege_withdrawn': 'privilege withdrawl',\n            'aa_compromise': 'the AA being compromised',\n        }[self.native]\n\n\nclass CRLEntryExtensionId(ObjectIdentifier):\n    _map = {\n        '2.5.29.21': 'crl_reason',\n        '2.5.29.23': 'hold_instruction_code',\n        '2.5.29.24': 'invalidity_date',\n        '2.5.29.29': 'certificate_issuer',\n    }\n\n\nclass CRLEntryExtension(Sequence):\n    _fields = [\n        ('extn_id', CRLEntryExtensionId),\n        ('critical', Boolean, {'default': False}),\n        ('extn_value', ParsableOctetString),\n    ]\n\n    _oid_pair = ('extn_id', 'extn_value')\n    _oid_specs = {\n        'crl_reason': CRLReason,\n        'hold_instruction_code': ObjectIdentifier,\n        'invalidity_date': GeneralizedTime,\n        'certificate_issuer': GeneralNames,\n    }\n\n\nclass CRLEntryExtensions(SequenceOf):\n    _child_spec = CRLEntryExtension\n\n\nclass RevokedCertificate(Sequence):\n    _fields = [\n        ('user_certificate', Integer),\n        ('revocation_date', Time),\n        ('crl_entry_extensions', CRLEntryExtensions, {'optional': True}),\n    ]\n\n    _processed_extensions = False\n    _critical_extensions = None\n    _crl_reason_value = None\n    _invalidity_date_value = None\n    _certificate_issuer_value = None\n    _issuer_name = False\n\n    def _set_extensions(self):\n        \"\"\"\n        Sets common named extensions to private attributes and creates a list\n        of critical extensions\n        \"\"\"\n\n        self._critical_extensions = set()\n\n        for extension in self['crl_entry_extensions']:\n            name = extension['extn_id'].native\n            attribute_name = '_%s_value' % name\n            if hasattr(self, attribute_name):\n                setattr(self, attribute_name, extension['extn_value'].parsed)\n            if extension['critical'].native:\n                self._critical_extensions.add(name)\n\n        self._processed_extensions = True\n\n    @property\n    def critical_extensions(self):\n        \"\"\"\n        Returns a set of the names (or OID if not a known extension) of the\n        extensions marked as critical\n\n        :return:\n            A set of unicode strings\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._critical_extensions\n\n    @property\n    def crl_reason_value(self):\n        \"\"\"\n        This extension indicates the reason that a certificate was revoked.\n\n        :return:\n            None or a CRLReason object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._crl_reason_value\n\n    @property\n    def invalidity_date_value(self):\n        \"\"\"\n        This extension indicates the suspected date/time the private key was\n        compromised or the certificate became invalid. This would usually be\n        before the revocation date, which is when the CA processed the\n        revocation.\n\n        :return:\n            None or a GeneralizedTime object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._invalidity_date_value\n\n    @property\n    def certificate_issuer_value(self):\n        \"\"\"\n        This extension indicates the issuer of the certificate in question,\n        and is used in indirect CRLs. CRL entries without this extension are\n        for certificates issued from the last seen issuer.\n\n        :return:\n            None or an x509.GeneralNames object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._certificate_issuer_value\n\n    @property\n    def issuer_name(self):\n        \"\"\"\n        :return:\n            None, or an asn1crypto.x509.Name object for the issuer of the cert\n        \"\"\"\n\n        if self._issuer_name is False:\n            self._issuer_name = None\n            if self.certificate_issuer_value:\n                for general_name in self.certificate_issuer_value:\n                    if general_name.name == 'directory_name':\n                        self._issuer_name = general_name.chosen\n                        break\n        return self._issuer_name\n\n\nclass RevokedCertificates(SequenceOf):\n    _child_spec = RevokedCertificate\n\n\nclass TbsCertList(Sequence):\n    _fields = [\n        ('version', Version, {'optional': True}),\n        ('signature', SignedDigestAlgorithm),\n        ('issuer', Name),\n        ('this_update', Time),\n        ('next_update', Time, {'optional': True}),\n        ('revoked_certificates', RevokedCertificates, {'optional': True}),\n        ('crl_extensions', TBSCertListExtensions, {'explicit': 0, 'optional': True}),\n    ]\n\n\nclass CertificateList(Sequence):\n    _fields = [\n        ('tbs_cert_list', TbsCertList),\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature', OctetBitString),\n    ]\n\n    _processed_extensions = False\n    _critical_extensions = None\n    _issuer_alt_name_value = None\n    _crl_number_value = None\n    _delta_crl_indicator_value = None\n    _issuing_distribution_point_value = None\n    _authority_key_identifier_value = None\n    _freshest_crl_value = None\n    _authority_information_access_value = None\n    _issuer_cert_urls = None\n    _delta_crl_distribution_points = None\n    _sha1 = None\n    _sha256 = None\n\n    def _set_extensions(self):\n        \"\"\"\n        Sets common named extensions to private attributes and creates a list\n        of critical extensions\n        \"\"\"\n\n        self._critical_extensions = set()\n\n        for extension in self['tbs_cert_list']['crl_extensions']:\n            name = extension['extn_id'].native\n            attribute_name = '_%s_value' % name\n            if hasattr(self, attribute_name):\n                setattr(self, attribute_name, extension['extn_value'].parsed)\n            if extension['critical'].native:\n                self._critical_extensions.add(name)\n\n        self._processed_extensions = True\n\n    @property\n    def critical_extensions(self):\n        \"\"\"\n        Returns a set of the names (or OID if not a known extension) of the\n        extensions marked as critical\n\n        :return:\n            A set of unicode strings\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._critical_extensions\n\n    @property\n    def issuer_alt_name_value(self):\n        \"\"\"\n        This extension allows associating one or more alternative names with\n        the issuer of the CRL.\n\n        :return:\n            None or an x509.GeneralNames object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._issuer_alt_name_value\n\n    @property\n    def crl_number_value(self):\n        \"\"\"\n        This extension adds a monotonically increasing number to the CRL and is\n        used to distinguish different versions of the CRL.\n\n        :return:\n            None or an Integer object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._crl_number_value\n\n    @property\n    def delta_crl_indicator_value(self):\n        \"\"\"\n        This extension indicates a CRL is a delta CRL, and contains the CRL\n        number of the base CRL that it is a delta from.\n\n        :return:\n            None or an Integer object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._delta_crl_indicator_value\n\n    @property\n    def issuing_distribution_point_value(self):\n        \"\"\"\n        This extension includes information about what types of revocations\n        and certificates are part of the CRL.\n\n        :return:\n            None or an IssuingDistributionPoint object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._issuing_distribution_point_value\n\n    @property\n    def authority_key_identifier_value(self):\n        \"\"\"\n        This extension helps in identifying the public key with which to\n        validate the authenticity of the CRL.\n\n        :return:\n            None or an AuthorityKeyIdentifier object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._authority_key_identifier_value\n\n    @property\n    def freshest_crl_value(self):\n        \"\"\"\n        This extension is used in complete CRLs to indicate where a delta CRL\n        may be located.\n\n        :return:\n            None or a CRLDistributionPoints object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._freshest_crl_value\n\n    @property\n    def authority_information_access_value(self):\n        \"\"\"\n        This extension is used to provide a URL with which to download the\n        certificate used to sign this CRL.\n\n        :return:\n            None or an AuthorityInfoAccessSyntax object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._authority_information_access_value\n\n    @property\n    def issuer(self):\n        \"\"\"\n        :return:\n            An asn1crypto.x509.Name object for the issuer of the CRL\n        \"\"\"\n\n        return self['tbs_cert_list']['issuer']\n\n    @property\n    def authority_key_identifier(self):\n        \"\"\"\n        :return:\n            None or a byte string of the key_identifier from the authority key\n            identifier extension\n        \"\"\"\n\n        if not self.authority_key_identifier_value:\n            return None\n\n        return self.authority_key_identifier_value['key_identifier'].native\n\n    @property\n    def issuer_cert_urls(self):\n        \"\"\"\n        :return:\n            A list of unicode strings that are URLs that should contain either\n            an individual DER-encoded X.509 certificate, or a DER-encoded CMS\n            message containing multiple certificates\n        \"\"\"\n\n        if self._issuer_cert_urls is None:\n            self._issuer_cert_urls = []\n            if self.authority_information_access_value:\n                for entry in self.authority_information_access_value:\n                    if entry['access_method'].native == 'ca_issuers':\n                        location = entry['access_location']\n                        if location.name != 'uniform_resource_identifier':\n                            continue\n                        url = location.native\n                        if url.lower()[0:7] == 'http://':\n                            self._issuer_cert_urls.append(url)\n        return self._issuer_cert_urls\n\n    @property\n    def delta_crl_distribution_points(self):\n        \"\"\"\n        Returns delta CRL URLs - only applies to complete CRLs\n\n        :return:\n            A list of zero or more DistributionPoint objects\n        \"\"\"\n\n        if self._delta_crl_distribution_points is None:\n            self._delta_crl_distribution_points = []\n\n            if self.freshest_crl_value is not None:\n                for distribution_point in self.freshest_crl_value:\n                    distribution_point_name = distribution_point['distribution_point']\n                    # RFC 5280 indicates conforming CA should not use the relative form\n                    if distribution_point_name.name == 'name_relative_to_crl_issuer':\n                        continue\n                    # This library is currently only concerned with HTTP-based CRLs\n                    for general_name in distribution_point_name.chosen:\n                        if general_name.name == 'uniform_resource_identifier':\n                            self._delta_crl_distribution_points.append(distribution_point)\n\n        return self._delta_crl_distribution_points\n\n    @property\n    def signature(self):\n        \"\"\"\n        :return:\n            A byte string of the signature\n        \"\"\"\n\n        return self['signature'].native\n\n    @property\n    def sha1(self):\n        \"\"\"\n        :return:\n            The SHA1 hash of the DER-encoded bytes of this certificate list\n        \"\"\"\n\n        if self._sha1 is None:\n            self._sha1 = hashlib.sha1(self.dump()).digest()\n        return self._sha1\n\n    @property\n    def sha256(self):\n        \"\"\"\n        :return:\n            The SHA-256 hash of the DER-encoded bytes of this certificate list\n        \"\"\"\n\n        if self._sha256 is None:\n            self._sha256 = hashlib.sha256(self.dump()).digest()\n        return self._sha256\n"
  },
  {
    "path": "libs/asn1crypto/csr.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for certificate signing requests (CSR). Exports the\nfollowing items:\n\n - CertificationRequest()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom .algos import SignedDigestAlgorithm\nfrom .core import (\n    Any,\n    BitString,\n    BMPString,\n    Integer,\n    ObjectIdentifier,\n    OctetBitString,\n    Sequence,\n    SetOf,\n    UTF8String\n)\nfrom .keys import PublicKeyInfo\nfrom .x509 import DirectoryString, Extensions, Name\n\n\n# The structures in this file are taken from https://tools.ietf.org/html/rfc2986\n# and https://tools.ietf.org/html/rfc2985\n\n\nclass Version(Integer):\n    _map = {\n        0: 'v1',\n    }\n\n\nclass CSRAttributeType(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.9.7': 'challenge_password',\n        '1.2.840.113549.1.9.9': 'extended_certificate_attributes',\n        '1.2.840.113549.1.9.14': 'extension_request',\n        # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/a5eaae36-e9f3-4dc5-a687-bfa7115954f1\n        '1.3.6.1.4.1.311.13.2.2': 'microsoft_enrollment_csp_provider',\n        # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/7c677cba-030d-48be-ba2b-01e407705f34\n        '1.3.6.1.4.1.311.13.2.3': 'microsoft_os_version',\n        # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/64e5ff6d-c6dd-4578-92f7-b3d895f9b9c7\n        '1.3.6.1.4.1.311.21.20': 'microsoft_request_client_info',\n    }\n\n\nclass SetOfDirectoryString(SetOf):\n    _child_spec = DirectoryString\n\n\nclass Attribute(Sequence):\n    _fields = [\n        ('type', ObjectIdentifier),\n        ('values', SetOf, {'spec': Any}),\n    ]\n\n\nclass SetOfAttributes(SetOf):\n    _child_spec = Attribute\n\n\nclass SetOfExtensions(SetOf):\n    _child_spec = Extensions\n\n\nclass MicrosoftEnrollmentCSProvider(Sequence):\n    _fields = [\n        ('keyspec', Integer),\n        ('cspname', BMPString),  # cryptographic service provider name\n        ('signature', BitString),\n    ]\n\n\nclass SetOfMicrosoftEnrollmentCSProvider(SetOf):\n    _child_spec = MicrosoftEnrollmentCSProvider\n\n\nclass MicrosoftRequestClientInfo(Sequence):\n    _fields = [\n        ('clientid', Integer),\n        ('machinename', UTF8String),\n        ('username', UTF8String),\n        ('processname', UTF8String),\n    ]\n\n\nclass SetOfMicrosoftRequestClientInfo(SetOf):\n    _child_spec = MicrosoftRequestClientInfo\n\n\nclass CRIAttribute(Sequence):\n    _fields = [\n        ('type', CSRAttributeType),\n        ('values', Any),\n    ]\n\n    _oid_pair = ('type', 'values')\n    _oid_specs = {\n        'challenge_password': SetOfDirectoryString,\n        'extended_certificate_attributes': SetOfAttributes,\n        'extension_request': SetOfExtensions,\n        'microsoft_enrollment_csp_provider': SetOfMicrosoftEnrollmentCSProvider,\n        'microsoft_os_version': SetOfDirectoryString,\n        'microsoft_request_client_info': SetOfMicrosoftRequestClientInfo,\n    }\n\n\nclass CRIAttributes(SetOf):\n    _child_spec = CRIAttribute\n\n\nclass CertificationRequestInfo(Sequence):\n    _fields = [\n        ('version', Version),\n        ('subject', Name),\n        ('subject_pk_info', PublicKeyInfo),\n        ('attributes', CRIAttributes, {'implicit': 0, 'optional': True}),\n    ]\n\n\nclass CertificationRequest(Sequence):\n    _fields = [\n        ('certification_request_info', CertificationRequestInfo),\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature', OctetBitString),\n    ]\n"
  },
  {
    "path": "libs/asn1crypto/keys.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for public and private keys. Exports the following items:\n\n - DSAPrivateKey()\n - ECPrivateKey()\n - EncryptedPrivateKeyInfo()\n - PrivateKeyInfo()\n - PublicKeyInfo()\n - RSAPrivateKey()\n - RSAPublicKey()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport hashlib\nimport math\n\nfrom ._errors import unwrap, APIException\nfrom ._types import type_name, byte_cls\nfrom .algos import _ForceNullParameters, DigestAlgorithm, EncryptionAlgorithm, RSAESOAEPParams, RSASSAPSSParams\nfrom .core import (\n    Any,\n    Asn1Value,\n    BitString,\n    Choice,\n    Integer,\n    IntegerOctetString,\n    Null,\n    ObjectIdentifier,\n    OctetBitString,\n    OctetString,\n    ParsableOctetString,\n    ParsableOctetBitString,\n    Sequence,\n    SequenceOf,\n    SetOf,\n)\nfrom .util import int_from_bytes, int_to_bytes\n\n\nclass OtherPrimeInfo(Sequence):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc3447#page-46\n    \"\"\"\n\n    _fields = [\n        ('prime', Integer),\n        ('exponent', Integer),\n        ('coefficient', Integer),\n    ]\n\n\nclass OtherPrimeInfos(SequenceOf):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc3447#page-46\n    \"\"\"\n\n    _child_spec = OtherPrimeInfo\n\n\nclass RSAPrivateKeyVersion(Integer):\n    \"\"\"\n    Original Name: Version\n    Source: https://tools.ietf.org/html/rfc3447#page-45\n    \"\"\"\n\n    _map = {\n        0: 'two-prime',\n        1: 'multi',\n    }\n\n\nclass RSAPrivateKey(Sequence):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc3447#page-45\n    \"\"\"\n\n    _fields = [\n        ('version', RSAPrivateKeyVersion),\n        ('modulus', Integer),\n        ('public_exponent', Integer),\n        ('private_exponent', Integer),\n        ('prime1', Integer),\n        ('prime2', Integer),\n        ('exponent1', Integer),\n        ('exponent2', Integer),\n        ('coefficient', Integer),\n        ('other_prime_infos', OtherPrimeInfos, {'optional': True})\n    ]\n\n\nclass RSAPublicKey(Sequence):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc3447#page-44\n    \"\"\"\n\n    _fields = [\n        ('modulus', Integer),\n        ('public_exponent', Integer)\n    ]\n\n\nclass DSAPrivateKey(Sequence):\n    \"\"\"\n    The ASN.1 structure that OpenSSL uses to store a DSA private key that is\n    not part of a PKCS#8 structure. Reversed engineered from english-language\n    description on linked OpenSSL documentation page.\n\n    Original Name: None\n    Source: https://www.openssl.org/docs/apps/dsa.html\n    \"\"\"\n\n    _fields = [\n        ('version', Integer),\n        ('p', Integer),\n        ('q', Integer),\n        ('g', Integer),\n        ('public_key', Integer),\n        ('private_key', Integer),\n    ]\n\n\nclass _ECPoint():\n    \"\"\"\n    In both PublicKeyInfo and PrivateKeyInfo, the EC public key is a byte\n    string that is encoded as a bit string. This class adds convenience\n    methods for converting to and from the byte string to a pair of integers\n    that are the X and Y coordinates.\n    \"\"\"\n\n    @classmethod\n    def from_coords(cls, x, y):\n        \"\"\"\n        Creates an ECPoint object from the X and Y integer coordinates of the\n        point\n\n        :param x:\n            The X coordinate, as an integer\n\n        :param y:\n            The Y coordinate, as an integer\n\n        :return:\n            An ECPoint object\n        \"\"\"\n\n        x_bytes = int(math.ceil(math.log(x, 2) / 8.0))\n        y_bytes = int(math.ceil(math.log(y, 2) / 8.0))\n\n        num_bytes = max(x_bytes, y_bytes)\n\n        byte_string = b'\\x04'\n        byte_string += int_to_bytes(x, width=num_bytes)\n        byte_string += int_to_bytes(y, width=num_bytes)\n\n        return cls(byte_string)\n\n    def to_coords(self):\n        \"\"\"\n        Returns the X and Y coordinates for this EC point, as native Python\n        integers\n\n        :return:\n            A 2-element tuple containing integers (X, Y)\n        \"\"\"\n\n        data = self.native\n        first_byte = data[0:1]\n\n        # Uncompressed\n        if first_byte == b'\\x04':\n            remaining = data[1:]\n            field_len = len(remaining) // 2\n            x = int_from_bytes(remaining[0:field_len])\n            y = int_from_bytes(remaining[field_len:])\n            return (x, y)\n\n        if first_byte not in set([b'\\x02', b'\\x03']):\n            raise ValueError(unwrap(\n                '''\n                Invalid EC public key - first byte is incorrect\n                '''\n            ))\n\n        raise ValueError(unwrap(\n            '''\n            Compressed representations of EC public keys are not supported due\n            to patent US6252960\n            '''\n        ))\n\n\nclass ECPoint(OctetString, _ECPoint):\n\n    pass\n\n\nclass ECPointBitString(OctetBitString, _ECPoint):\n\n    pass\n\n\nclass SpecifiedECDomainVersion(Integer):\n    \"\"\"\n    Source: http://www.secg.org/sec1-v2.pdf page 104\n    \"\"\"\n    _map = {\n        1: 'ecdpVer1',\n        2: 'ecdpVer2',\n        3: 'ecdpVer3',\n    }\n\n\nclass FieldType(ObjectIdentifier):\n    \"\"\"\n    Original Name: None\n    Source: http://www.secg.org/sec1-v2.pdf page 101\n    \"\"\"\n\n    _map = {\n        '1.2.840.10045.1.1': 'prime_field',\n        '1.2.840.10045.1.2': 'characteristic_two_field',\n    }\n\n\nclass CharacteristicTwoBasis(ObjectIdentifier):\n    \"\"\"\n    Original Name: None\n    Source: http://www.secg.org/sec1-v2.pdf page 102\n    \"\"\"\n\n    _map = {\n        '1.2.840.10045.1.2.1.1': 'gn_basis',\n        '1.2.840.10045.1.2.1.2': 'tp_basis',\n        '1.2.840.10045.1.2.1.3': 'pp_basis',\n    }\n\n\nclass Pentanomial(Sequence):\n    \"\"\"\n    Source: http://www.secg.org/sec1-v2.pdf page 102\n    \"\"\"\n\n    _fields = [\n        ('k1', Integer),\n        ('k2', Integer),\n        ('k3', Integer),\n    ]\n\n\nclass CharacteristicTwo(Sequence):\n    \"\"\"\n    Original Name: Characteristic-two\n    Source: http://www.secg.org/sec1-v2.pdf page 101\n    \"\"\"\n\n    _fields = [\n        ('m', Integer),\n        ('basis', CharacteristicTwoBasis),\n        ('parameters', Any),\n    ]\n\n    _oid_pair = ('basis', 'parameters')\n    _oid_specs = {\n        'gn_basis': Null,\n        'tp_basis': Integer,\n        'pp_basis': Pentanomial,\n    }\n\n\nclass FieldID(Sequence):\n    \"\"\"\n    Source: http://www.secg.org/sec1-v2.pdf page 100\n    \"\"\"\n\n    _fields = [\n        ('field_type', FieldType),\n        ('parameters', Any),\n    ]\n\n    _oid_pair = ('field_type', 'parameters')\n    _oid_specs = {\n        'prime_field': Integer,\n        'characteristic_two_field': CharacteristicTwo,\n    }\n\n\nclass Curve(Sequence):\n    \"\"\"\n    Source: http://www.secg.org/sec1-v2.pdf page 104\n    \"\"\"\n\n    _fields = [\n        ('a', OctetString),\n        ('b', OctetString),\n        ('seed', OctetBitString, {'optional': True}),\n    ]\n\n\nclass SpecifiedECDomain(Sequence):\n    \"\"\"\n    Source: http://www.secg.org/sec1-v2.pdf page 103\n    \"\"\"\n\n    _fields = [\n        ('version', SpecifiedECDomainVersion),\n        ('field_id', FieldID),\n        ('curve', Curve),\n        ('base', ECPoint),\n        ('order', Integer),\n        ('cofactor', Integer, {'optional': True}),\n        ('hash', DigestAlgorithm, {'optional': True}),\n    ]\n\n\nclass NamedCurve(ObjectIdentifier):\n    \"\"\"\n    Various named curves\n\n    Original Name: None\n    Source: https://tools.ietf.org/html/rfc3279#page-23,\n            https://tools.ietf.org/html/rfc5480#page-5\n    \"\"\"\n\n    _map = {\n        # https://tools.ietf.org/html/rfc3279#page-23\n        '1.2.840.10045.3.0.1': 'c2pnb163v1',\n        '1.2.840.10045.3.0.2': 'c2pnb163v2',\n        '1.2.840.10045.3.0.3': 'c2pnb163v3',\n        '1.2.840.10045.3.0.4': 'c2pnb176w1',\n        '1.2.840.10045.3.0.5': 'c2tnb191v1',\n        '1.2.840.10045.3.0.6': 'c2tnb191v2',\n        '1.2.840.10045.3.0.7': 'c2tnb191v3',\n        '1.2.840.10045.3.0.8': 'c2onb191v4',\n        '1.2.840.10045.3.0.9': 'c2onb191v5',\n        '1.2.840.10045.3.0.10': 'c2pnb208w1',\n        '1.2.840.10045.3.0.11': 'c2tnb239v1',\n        '1.2.840.10045.3.0.12': 'c2tnb239v2',\n        '1.2.840.10045.3.0.13': 'c2tnb239v3',\n        '1.2.840.10045.3.0.14': 'c2onb239v4',\n        '1.2.840.10045.3.0.15': 'c2onb239v5',\n        '1.2.840.10045.3.0.16': 'c2pnb272w1',\n        '1.2.840.10045.3.0.17': 'c2pnb304w1',\n        '1.2.840.10045.3.0.18': 'c2tnb359v1',\n        '1.2.840.10045.3.0.19': 'c2pnb368w1',\n        '1.2.840.10045.3.0.20': 'c2tnb431r1',\n        '1.2.840.10045.3.1.2': 'prime192v2',\n        '1.2.840.10045.3.1.3': 'prime192v3',\n        '1.2.840.10045.3.1.4': 'prime239v1',\n        '1.2.840.10045.3.1.5': 'prime239v2',\n        '1.2.840.10045.3.1.6': 'prime239v3',\n        # https://tools.ietf.org/html/rfc5480#page-5\n        # http://www.secg.org/SEC2-Ver-1.0.pdf\n        '1.2.840.10045.3.1.1': 'secp192r1',\n        '1.2.840.10045.3.1.7': 'secp256r1',\n        '1.3.132.0.1': 'sect163k1',\n        '1.3.132.0.2': 'sect163r1',\n        '1.3.132.0.3': 'sect239k1',\n        '1.3.132.0.4': 'sect113r1',\n        '1.3.132.0.5': 'sect113r2',\n        '1.3.132.0.6': 'secp112r1',\n        '1.3.132.0.7': 'secp112r2',\n        '1.3.132.0.8': 'secp160r1',\n        '1.3.132.0.9': 'secp160k1',\n        '1.3.132.0.10': 'secp256k1',\n        '1.3.132.0.15': 'sect163r2',\n        '1.3.132.0.16': 'sect283k1',\n        '1.3.132.0.17': 'sect283r1',\n        '1.3.132.0.22': 'sect131r1',\n        '1.3.132.0.23': 'sect131r2',\n        '1.3.132.0.24': 'sect193r1',\n        '1.3.132.0.25': 'sect193r2',\n        '1.3.132.0.26': 'sect233k1',\n        '1.3.132.0.27': 'sect233r1',\n        '1.3.132.0.28': 'secp128r1',\n        '1.3.132.0.29': 'secp128r2',\n        '1.3.132.0.30': 'secp160r2',\n        '1.3.132.0.31': 'secp192k1',\n        '1.3.132.0.32': 'secp224k1',\n        '1.3.132.0.33': 'secp224r1',\n        '1.3.132.0.34': 'secp384r1',\n        '1.3.132.0.35': 'secp521r1',\n        '1.3.132.0.36': 'sect409k1',\n        '1.3.132.0.37': 'sect409r1',\n        '1.3.132.0.38': 'sect571k1',\n        '1.3.132.0.39': 'sect571r1',\n        # https://tools.ietf.org/html/rfc5639#section-4.1\n        '1.3.36.3.3.2.8.1.1.1': 'brainpoolp160r1',\n        '1.3.36.3.3.2.8.1.1.2': 'brainpoolp160t1',\n        '1.3.36.3.3.2.8.1.1.3': 'brainpoolp192r1',\n        '1.3.36.3.3.2.8.1.1.4': 'brainpoolp192t1',\n        '1.3.36.3.3.2.8.1.1.5': 'brainpoolp224r1',\n        '1.3.36.3.3.2.8.1.1.6': 'brainpoolp224t1',\n        '1.3.36.3.3.2.8.1.1.7': 'brainpoolp256r1',\n        '1.3.36.3.3.2.8.1.1.8': 'brainpoolp256t1',\n        '1.3.36.3.3.2.8.1.1.9': 'brainpoolp320r1',\n        '1.3.36.3.3.2.8.1.1.10': 'brainpoolp320t1',\n        '1.3.36.3.3.2.8.1.1.11': 'brainpoolp384r1',\n        '1.3.36.3.3.2.8.1.1.12': 'brainpoolp384t1',\n        '1.3.36.3.3.2.8.1.1.13': 'brainpoolp512r1',\n        '1.3.36.3.3.2.8.1.1.14': 'brainpoolp512t1',\n    }\n\n    _key_sizes = {\n        # Order values used to compute these sourced from\n        # http://cr.openjdk.java.net/~vinnie/7194075/webrev-3/src/share/classes/sun/security/ec/CurveDB.java.html\n        '1.2.840.10045.3.0.1': 21,\n        '1.2.840.10045.3.0.2': 21,\n        '1.2.840.10045.3.0.3': 21,\n        '1.2.840.10045.3.0.4': 21,\n        '1.2.840.10045.3.0.5': 24,\n        '1.2.840.10045.3.0.6': 24,\n        '1.2.840.10045.3.0.7': 24,\n        '1.2.840.10045.3.0.8': 24,\n        '1.2.840.10045.3.0.9': 24,\n        '1.2.840.10045.3.0.10': 25,\n        '1.2.840.10045.3.0.11': 30,\n        '1.2.840.10045.3.0.12': 30,\n        '1.2.840.10045.3.0.13': 30,\n        '1.2.840.10045.3.0.14': 30,\n        '1.2.840.10045.3.0.15': 30,\n        '1.2.840.10045.3.0.16': 33,\n        '1.2.840.10045.3.0.17': 37,\n        '1.2.840.10045.3.0.18': 45,\n        '1.2.840.10045.3.0.19': 45,\n        '1.2.840.10045.3.0.20': 53,\n        '1.2.840.10045.3.1.2': 24,\n        '1.2.840.10045.3.1.3': 24,\n        '1.2.840.10045.3.1.4': 30,\n        '1.2.840.10045.3.1.5': 30,\n        '1.2.840.10045.3.1.6': 30,\n        # Order values used to compute these sourced from\n        # http://www.secg.org/SEC2-Ver-1.0.pdf\n        # ceil(n.bit_length() / 8)\n        '1.2.840.10045.3.1.1': 24,\n        '1.2.840.10045.3.1.7': 32,\n        '1.3.132.0.1': 21,\n        '1.3.132.0.2': 21,\n        '1.3.132.0.3': 30,\n        '1.3.132.0.4': 15,\n        '1.3.132.0.5': 15,\n        '1.3.132.0.6': 14,\n        '1.3.132.0.7': 14,\n        '1.3.132.0.8': 21,\n        '1.3.132.0.9': 21,\n        '1.3.132.0.10': 32,\n        '1.3.132.0.15': 21,\n        '1.3.132.0.16': 36,\n        '1.3.132.0.17': 36,\n        '1.3.132.0.22': 17,\n        '1.3.132.0.23': 17,\n        '1.3.132.0.24': 25,\n        '1.3.132.0.25': 25,\n        '1.3.132.0.26': 29,\n        '1.3.132.0.27': 30,\n        '1.3.132.0.28': 16,\n        '1.3.132.0.29': 16,\n        '1.3.132.0.30': 21,\n        '1.3.132.0.31': 24,\n        '1.3.132.0.32': 29,\n        '1.3.132.0.33': 28,\n        '1.3.132.0.34': 48,\n        '1.3.132.0.35': 66,\n        '1.3.132.0.36': 51,\n        '1.3.132.0.37': 52,\n        '1.3.132.0.38': 72,\n        '1.3.132.0.39': 72,\n        # Order values used to compute these sourced from\n        # https://tools.ietf.org/html/rfc5639#section-3\n        # ceil(q.bit_length() / 8)\n        '1.3.36.3.3.2.8.1.1.1': 20,\n        '1.3.36.3.3.2.8.1.1.2': 20,\n        '1.3.36.3.3.2.8.1.1.3': 24,\n        '1.3.36.3.3.2.8.1.1.4': 24,\n        '1.3.36.3.3.2.8.1.1.5': 28,\n        '1.3.36.3.3.2.8.1.1.6': 28,\n        '1.3.36.3.3.2.8.1.1.7': 32,\n        '1.3.36.3.3.2.8.1.1.8': 32,\n        '1.3.36.3.3.2.8.1.1.9': 40,\n        '1.3.36.3.3.2.8.1.1.10': 40,\n        '1.3.36.3.3.2.8.1.1.11': 48,\n        '1.3.36.3.3.2.8.1.1.12': 48,\n        '1.3.36.3.3.2.8.1.1.13': 64,\n        '1.3.36.3.3.2.8.1.1.14': 64,\n    }\n\n    @classmethod\n    def register(cls, name, oid, key_size):\n        \"\"\"\n        Registers a new named elliptic curve that is not included in the\n        default list of named curves\n\n        :param name:\n            A unicode string of the curve name\n\n        :param oid:\n            A unicode string of the dotted format OID\n\n        :param key_size:\n            An integer of the number of bytes the private key should be\n            encoded to\n        \"\"\"\n\n        cls._map[oid] = name\n        if cls._reverse_map is not None:\n            cls._reverse_map[name] = oid\n        cls._key_sizes[oid] = key_size\n\n\nclass ECDomainParameters(Choice):\n    \"\"\"\n    Source: http://www.secg.org/sec1-v2.pdf page 102\n    \"\"\"\n\n    _alternatives = [\n        ('specified', SpecifiedECDomain),\n        ('named', NamedCurve),\n        ('implicit_ca', Null),\n    ]\n\n    @property\n    def key_size(self):\n        if self.name == 'implicit_ca':\n            raise ValueError(unwrap(\n                '''\n                Unable to calculate key_size from ECDomainParameters\n                that are implicitly defined by the CA key\n                '''\n            ))\n\n        if self.name == 'specified':\n            order = self.chosen['order'].native\n            return math.ceil(math.log(order, 2.0) / 8.0)\n\n        oid = self.chosen.dotted\n        if oid not in NamedCurve._key_sizes:\n            raise ValueError(unwrap(\n                '''\n                The asn1crypto.keys.NamedCurve %s does not have a registered key length,\n                please call asn1crypto.keys.NamedCurve.register()\n                ''',\n                repr(oid)\n            ))\n        return NamedCurve._key_sizes[oid]\n\n\nclass ECPrivateKeyVersion(Integer):\n    \"\"\"\n    Original Name: None\n    Source: http://www.secg.org/sec1-v2.pdf page 108\n    \"\"\"\n\n    _map = {\n        1: 'ecPrivkeyVer1',\n    }\n\n\nclass ECPrivateKey(Sequence):\n    \"\"\"\n    Source: http://www.secg.org/sec1-v2.pdf page 108\n    \"\"\"\n\n    _fields = [\n        ('version', ECPrivateKeyVersion),\n        ('private_key', IntegerOctetString),\n        ('parameters', ECDomainParameters, {'explicit': 0, 'optional': True}),\n        ('public_key', ECPointBitString, {'explicit': 1, 'optional': True}),\n    ]\n\n    # Ensures the key is set to the correct length when encoding\n    _key_size = None\n\n    # This is necessary to ensure the private_key IntegerOctetString is encoded properly\n    def __setitem__(self, key, value):\n        res = super(ECPrivateKey, self).__setitem__(key, value)\n\n        if key == 'private_key':\n            if self._key_size is None:\n                # Infer the key_size from the existing private key if possible\n                pkey_contents = self['private_key'].contents\n                if isinstance(pkey_contents, byte_cls) and len(pkey_contents) > 1:\n                    self.set_key_size(len(self['private_key'].contents))\n\n            elif self._key_size is not None:\n                self._update_key_size()\n\n        elif key == 'parameters' and isinstance(self['parameters'], ECDomainParameters) and \\\n                self['parameters'].name != 'implicit_ca':\n            self.set_key_size(self['parameters'].key_size)\n\n        return res\n\n    def set_key_size(self, key_size):\n        \"\"\"\n        Sets the key_size to ensure the private key is encoded to the proper length\n\n        :param key_size:\n            An integer byte length to encode the private_key to\n        \"\"\"\n\n        self._key_size = key_size\n        self._update_key_size()\n\n    def _update_key_size(self):\n        \"\"\"\n        Ensure the private_key explicit encoding width is set\n        \"\"\"\n\n        if self._key_size is not None and isinstance(self['private_key'], IntegerOctetString):\n            self['private_key'].set_encoded_width(self._key_size)\n\n\nclass DSAParams(Sequence):\n    \"\"\"\n    Parameters for a DSA public or private key\n\n    Original Name: Dss-Parms\n    Source: https://tools.ietf.org/html/rfc3279#page-9\n    \"\"\"\n\n    _fields = [\n        ('p', Integer),\n        ('q', Integer),\n        ('g', Integer),\n    ]\n\n\nclass Attribute(Sequence):\n    \"\"\"\n    Source: https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.501-198811-S!!PDF-E&type=items page 8\n    \"\"\"\n\n    _fields = [\n        ('type', ObjectIdentifier),\n        ('values', SetOf, {'spec': Any}),\n    ]\n\n\nclass Attributes(SetOf):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc5208#page-3\n    \"\"\"\n\n    _child_spec = Attribute\n\n\nclass PrivateKeyAlgorithmId(ObjectIdentifier):\n    \"\"\"\n    These OIDs for various public keys are reused when storing private keys\n    inside of a PKCS#8 structure\n\n    Original Name: None\n    Source: https://tools.ietf.org/html/rfc3279\n    \"\"\"\n\n    _map = {\n        # https://tools.ietf.org/html/rfc3279#page-19\n        '1.2.840.113549.1.1.1': 'rsa',\n        # https://tools.ietf.org/html/rfc4055#page-8\n        '1.2.840.113549.1.1.10': 'rsassa_pss',\n        # https://tools.ietf.org/html/rfc3279#page-18\n        '1.2.840.10040.4.1': 'dsa',\n        # https://tools.ietf.org/html/rfc3279#page-13\n        '1.2.840.10045.2.1': 'ec',\n        # https://tools.ietf.org/html/rfc8410#section-9\n        '1.3.101.110': 'x25519',\n        '1.3.101.111': 'x448',\n        '1.3.101.112': 'ed25519',\n        '1.3.101.113': 'ed448',\n    }\n\n\nclass PrivateKeyAlgorithm(_ForceNullParameters, Sequence):\n    \"\"\"\n    Original Name: PrivateKeyAlgorithmIdentifier\n    Source: https://tools.ietf.org/html/rfc5208#page-3\n    \"\"\"\n\n    _fields = [\n        ('algorithm', PrivateKeyAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'dsa': DSAParams,\n        'ec': ECDomainParameters,\n        'rsassa_pss': RSASSAPSSParams,\n    }\n\n\nclass PrivateKeyInfo(Sequence):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc5208#page-3\n    \"\"\"\n\n    _fields = [\n        ('version', Integer),\n        ('private_key_algorithm', PrivateKeyAlgorithm),\n        ('private_key', ParsableOctetString),\n        ('attributes', Attributes, {'implicit': 0, 'optional': True}),\n    ]\n\n    def _private_key_spec(self):\n        algorithm = self['private_key_algorithm']['algorithm'].native\n        return {\n            'rsa': RSAPrivateKey,\n            'rsassa_pss': RSAPrivateKey,\n            'dsa': Integer,\n            'ec': ECPrivateKey,\n            # These should be treated as opaque octet strings according\n            # to RFC 8410\n            'x25519': OctetString,\n            'x448': OctetString,\n            'ed25519': OctetString,\n            'ed448': OctetString,\n        }[algorithm]\n\n    _spec_callbacks = {\n        'private_key': _private_key_spec\n    }\n\n    _algorithm = None\n    _bit_size = None\n    _public_key = None\n    _fingerprint = None\n\n    @classmethod\n    def wrap(cls, private_key, algorithm):\n        \"\"\"\n        Wraps a private key in a PrivateKeyInfo structure\n\n        :param private_key:\n            A byte string or Asn1Value object of the private key\n\n        :param algorithm:\n            A unicode string of \"rsa\", \"dsa\" or \"ec\"\n\n        :return:\n            A PrivateKeyInfo object\n        \"\"\"\n\n        if not isinstance(private_key, byte_cls) and not isinstance(private_key, Asn1Value):\n            raise TypeError(unwrap(\n                '''\n                private_key must be a byte string or Asn1Value, not %s\n                ''',\n                type_name(private_key)\n            ))\n\n        if algorithm == 'rsa' or algorithm == 'rsassa_pss':\n            if not isinstance(private_key, RSAPrivateKey):\n                private_key = RSAPrivateKey.load(private_key)\n            params = Null()\n        elif algorithm == 'dsa':\n            if not isinstance(private_key, DSAPrivateKey):\n                private_key = DSAPrivateKey.load(private_key)\n            params = DSAParams()\n            params['p'] = private_key['p']\n            params['q'] = private_key['q']\n            params['g'] = private_key['g']\n            public_key = private_key['public_key']\n            private_key = private_key['private_key']\n        elif algorithm == 'ec':\n            if not isinstance(private_key, ECPrivateKey):\n                private_key = ECPrivateKey.load(private_key)\n            else:\n                private_key = private_key.copy()\n            params = private_key['parameters']\n            del private_key['parameters']\n        else:\n            raise ValueError(unwrap(\n                '''\n                algorithm must be one of \"rsa\", \"dsa\", \"ec\", not %s\n                ''',\n                repr(algorithm)\n            ))\n\n        private_key_algo = PrivateKeyAlgorithm()\n        private_key_algo['algorithm'] = PrivateKeyAlgorithmId(algorithm)\n        private_key_algo['parameters'] = params\n\n        container = cls()\n        container._algorithm = algorithm\n        container['version'] = Integer(0)\n        container['private_key_algorithm'] = private_key_algo\n        container['private_key'] = private_key\n\n        # Here we save the DSA public key if possible since it is not contained\n        # within the PKCS#8 structure for a DSA key\n        if algorithm == 'dsa':\n            container._public_key = public_key\n\n        return container\n\n    # This is necessary to ensure any contained ECPrivateKey is the\n    # correct size\n    def __setitem__(self, key, value):\n        res = super(PrivateKeyInfo, self).__setitem__(key, value)\n\n        algorithm = self['private_key_algorithm']\n\n        # When possible, use the parameter info to make sure the private key encoding\n        # retains any necessary leading bytes, instead of them being dropped\n        if (key == 'private_key_algorithm' or key == 'private_key') and \\\n                algorithm['algorithm'].native == 'ec' and \\\n                isinstance(algorithm['parameters'], ECDomainParameters) and \\\n                algorithm['parameters'].name != 'implicit_ca' and \\\n                isinstance(self['private_key'], ParsableOctetString) and \\\n                isinstance(self['private_key'].parsed, ECPrivateKey):\n            self['private_key'].parsed.set_key_size(algorithm['parameters'].key_size)\n\n        return res\n\n    def unwrap(self):\n        \"\"\"\n        Unwraps the private key into an RSAPrivateKey, DSAPrivateKey or\n        ECPrivateKey object\n\n        :return:\n            An RSAPrivateKey, DSAPrivateKey or ECPrivateKey object\n        \"\"\"\n\n        raise APIException(\n            'asn1crypto.keys.PrivateKeyInfo().unwrap() has been removed, '\n            'please use oscrypto.asymmetric.PrivateKey().unwrap() instead')\n\n    @property\n    def curve(self):\n        \"\"\"\n        Returns information about the curve used for an EC key\n\n        :raises:\n            ValueError - when the key is not an EC key\n\n        :return:\n            A two-element tuple, with the first element being a unicode string\n            of \"implicit_ca\", \"specified\" or \"named\". If the first element is\n            \"implicit_ca\", the second is None. If \"specified\", the second is\n            an OrderedDict that is the native version of SpecifiedECDomain. If\n            \"named\", the second is a unicode string of the curve name.\n        \"\"\"\n\n        if self.algorithm != 'ec':\n            raise ValueError(unwrap(\n                '''\n                Only EC keys have a curve, this key is %s\n                ''',\n                self.algorithm.upper()\n            ))\n\n        params = self['private_key_algorithm']['parameters']\n        chosen = params.chosen\n\n        if params.name == 'implicit_ca':\n            value = None\n        else:\n            value = chosen.native\n\n        return (params.name, value)\n\n    @property\n    def hash_algo(self):\n        \"\"\"\n        Returns the name of the family of hash algorithms used to generate a\n        DSA key\n\n        :raises:\n            ValueError - when the key is not a DSA key\n\n        :return:\n            A unicode string of \"sha1\" or \"sha2\"\n        \"\"\"\n\n        if self.algorithm != 'dsa':\n            raise ValueError(unwrap(\n                '''\n                Only DSA keys are generated using a hash algorithm, this key is\n                %s\n                ''',\n                self.algorithm.upper()\n            ))\n\n        byte_len = math.log(self['private_key_algorithm']['parameters']['q'].native, 2) / 8\n\n        return 'sha1' if byte_len <= 20 else 'sha2'\n\n    @property\n    def algorithm(self):\n        \"\"\"\n        :return:\n            A unicode string of \"rsa\", \"rsassa_pss\", \"dsa\" or \"ec\"\n        \"\"\"\n\n        if self._algorithm is None:\n            self._algorithm = self['private_key_algorithm']['algorithm'].native\n        return self._algorithm\n\n    @property\n    def bit_size(self):\n        \"\"\"\n        :return:\n            The bit size of the private key, as an integer\n        \"\"\"\n\n        if self._bit_size is None:\n            if self.algorithm == 'rsa' or self.algorithm == 'rsassa_pss':\n                prime = self['private_key'].parsed['modulus'].native\n            elif self.algorithm == 'dsa':\n                prime = self['private_key_algorithm']['parameters']['p'].native\n            elif self.algorithm == 'ec':\n                prime = self['private_key'].parsed['private_key'].native\n            self._bit_size = int(math.ceil(math.log(prime, 2)))\n            modulus = self._bit_size % 8\n            if modulus != 0:\n                self._bit_size += 8 - modulus\n        return self._bit_size\n\n    @property\n    def byte_size(self):\n        \"\"\"\n        :return:\n            The byte size of the private key, as an integer\n        \"\"\"\n\n        return int(math.ceil(self.bit_size / 8))\n\n    @property\n    def public_key(self):\n        \"\"\"\n        :return:\n            If an RSA key, an RSAPublicKey object. If a DSA key, an Integer\n            object. If an EC key, an ECPointBitString object.\n        \"\"\"\n\n        raise APIException(\n            'asn1crypto.keys.PrivateKeyInfo().public_key has been removed, '\n            'please use oscrypto.asymmetric.PrivateKey().public_key.unwrap() instead')\n\n    @property\n    def public_key_info(self):\n        \"\"\"\n        :return:\n            A PublicKeyInfo object derived from this private key.\n        \"\"\"\n\n        raise APIException(\n            'asn1crypto.keys.PrivateKeyInfo().public_key_info has been removed, '\n            'please use oscrypto.asymmetric.PrivateKey().public_key.asn1 instead')\n\n    @property\n    def fingerprint(self):\n        \"\"\"\n        Creates a fingerprint that can be compared with a public key to see if\n        the two form a pair.\n\n        This fingerprint is not compatible with fingerprints generated by any\n        other software.\n\n        :return:\n            A byte string that is a sha256 hash of selected components (based\n            on the key type)\n        \"\"\"\n\n        raise APIException(\n            'asn1crypto.keys.PrivateKeyInfo().fingerprint has been removed, '\n            'please use oscrypto.asymmetric.PrivateKey().fingerprint instead')\n\n\nclass EncryptedPrivateKeyInfo(Sequence):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc5208#page-4\n    \"\"\"\n\n    _fields = [\n        ('encryption_algorithm', EncryptionAlgorithm),\n        ('encrypted_data', OctetString),\n    ]\n\n\n# These structures are from https://tools.ietf.org/html/rfc3279\n\nclass ValidationParms(Sequence):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc3279#page-10\n    \"\"\"\n\n    _fields = [\n        ('seed', BitString),\n        ('pgen_counter', Integer),\n    ]\n\n\nclass DomainParameters(Sequence):\n    \"\"\"\n    Source: https://tools.ietf.org/html/rfc3279#page-10\n    \"\"\"\n\n    _fields = [\n        ('p', Integer),\n        ('g', Integer),\n        ('q', Integer),\n        ('j', Integer, {'optional': True}),\n        ('validation_params', ValidationParms, {'optional': True}),\n    ]\n\n\nclass PublicKeyAlgorithmId(ObjectIdentifier):\n    \"\"\"\n    Original Name: None\n    Source: https://tools.ietf.org/html/rfc3279\n    \"\"\"\n\n    _map = {\n        # https://tools.ietf.org/html/rfc3279#page-19\n        '1.2.840.113549.1.1.1': 'rsa',\n        # https://tools.ietf.org/html/rfc3447#page-47\n        '1.2.840.113549.1.1.7': 'rsaes_oaep',\n        # https://tools.ietf.org/html/rfc4055#page-8\n        '1.2.840.113549.1.1.10': 'rsassa_pss',\n        # https://tools.ietf.org/html/rfc3279#page-18\n        '1.2.840.10040.4.1': 'dsa',\n        # https://tools.ietf.org/html/rfc3279#page-13\n        '1.2.840.10045.2.1': 'ec',\n        # https://tools.ietf.org/html/rfc3279#page-10\n        '1.2.840.10046.2.1': 'dh',\n        # https://tools.ietf.org/html/rfc8410#section-9\n        '1.3.101.110': 'x25519',\n        '1.3.101.111': 'x448',\n        '1.3.101.112': 'ed25519',\n        '1.3.101.113': 'ed448',\n    }\n\n\nclass PublicKeyAlgorithm(_ForceNullParameters, Sequence):\n    \"\"\"\n    Original Name: AlgorithmIdentifier\n    Source: https://tools.ietf.org/html/rfc5280#page-18\n    \"\"\"\n\n    _fields = [\n        ('algorithm', PublicKeyAlgorithmId),\n        ('parameters', Any, {'optional': True}),\n    ]\n\n    _oid_pair = ('algorithm', 'parameters')\n    _oid_specs = {\n        'dsa': DSAParams,\n        'ec': ECDomainParameters,\n        'dh': DomainParameters,\n        'rsaes_oaep': RSAESOAEPParams,\n        'rsassa_pss': RSASSAPSSParams,\n    }\n\n\nclass PublicKeyInfo(Sequence):\n    \"\"\"\n    Original Name: SubjectPublicKeyInfo\n    Source: https://tools.ietf.org/html/rfc5280#page-17\n    \"\"\"\n\n    _fields = [\n        ('algorithm', PublicKeyAlgorithm),\n        ('public_key', ParsableOctetBitString),\n    ]\n\n    def _public_key_spec(self):\n        algorithm = self['algorithm']['algorithm'].native\n        return {\n            'rsa': RSAPublicKey,\n            'rsaes_oaep': RSAPublicKey,\n            'rsassa_pss': RSAPublicKey,\n            'dsa': Integer,\n            # We override the field spec with ECPoint so that users can easily\n            # decompose the byte string into the constituent X and Y coords\n            'ec': (ECPointBitString, None),\n            'dh': Integer,\n            # These should be treated as opaque bit strings according\n            # to RFC 8410, and need not even be valid ASN.1\n            'x25519': (OctetBitString, None),\n            'x448': (OctetBitString, None),\n            'ed25519': (OctetBitString, None),\n            'ed448': (OctetBitString, None),\n        }[algorithm]\n\n    _spec_callbacks = {\n        'public_key': _public_key_spec\n    }\n\n    _algorithm = None\n    _bit_size = None\n    _fingerprint = None\n    _sha1 = None\n    _sha256 = None\n\n    @classmethod\n    def wrap(cls, public_key, algorithm):\n        \"\"\"\n        Wraps a public key in a PublicKeyInfo structure\n\n        :param public_key:\n            A byte string or Asn1Value object of the public key\n\n        :param algorithm:\n            A unicode string of \"rsa\"\n\n        :return:\n            A PublicKeyInfo object\n        \"\"\"\n\n        if not isinstance(public_key, byte_cls) and not isinstance(public_key, Asn1Value):\n            raise TypeError(unwrap(\n                '''\n                public_key must be a byte string or Asn1Value, not %s\n                ''',\n                type_name(public_key)\n            ))\n\n        if algorithm != 'rsa' and algorithm != 'rsassa_pss':\n            raise ValueError(unwrap(\n                '''\n                algorithm must \"rsa\", not %s\n                ''',\n                repr(algorithm)\n            ))\n\n        algo = PublicKeyAlgorithm()\n        algo['algorithm'] = PublicKeyAlgorithmId(algorithm)\n        algo['parameters'] = Null()\n\n        container = cls()\n        container['algorithm'] = algo\n        if isinstance(public_key, Asn1Value):\n            public_key = public_key.untag().dump()\n        container['public_key'] = ParsableOctetBitString(public_key)\n\n        return container\n\n    def unwrap(self):\n        \"\"\"\n        Unwraps an RSA public key into an RSAPublicKey object. Does not support\n        DSA or EC public keys since they do not have an unwrapped form.\n\n        :return:\n            An RSAPublicKey object\n        \"\"\"\n\n        raise APIException(\n            'asn1crypto.keys.PublicKeyInfo().unwrap() has been removed, '\n            'please use oscrypto.asymmetric.PublicKey().unwrap() instead')\n\n    @property\n    def curve(self):\n        \"\"\"\n        Returns information about the curve used for an EC key\n\n        :raises:\n            ValueError - when the key is not an EC key\n\n        :return:\n            A two-element tuple, with the first element being a unicode string\n            of \"implicit_ca\", \"specified\" or \"named\". If the first element is\n            \"implicit_ca\", the second is None. If \"specified\", the second is\n            an OrderedDict that is the native version of SpecifiedECDomain. If\n            \"named\", the second is a unicode string of the curve name.\n        \"\"\"\n\n        if self.algorithm != 'ec':\n            raise ValueError(unwrap(\n                '''\n                Only EC keys have a curve, this key is %s\n                ''',\n                self.algorithm.upper()\n            ))\n\n        params = self['algorithm']['parameters']\n        chosen = params.chosen\n\n        if params.name == 'implicit_ca':\n            value = None\n        else:\n            value = chosen.native\n\n        return (params.name, value)\n\n    @property\n    def hash_algo(self):\n        \"\"\"\n        Returns the name of the family of hash algorithms used to generate a\n        DSA key\n\n        :raises:\n            ValueError - when the key is not a DSA key\n\n        :return:\n            A unicode string of \"sha1\" or \"sha2\" or None if no parameters are\n            present\n        \"\"\"\n\n        if self.algorithm != 'dsa':\n            raise ValueError(unwrap(\n                '''\n                Only DSA keys are generated using a hash algorithm, this key is\n                %s\n                ''',\n                self.algorithm.upper()\n            ))\n\n        parameters = self['algorithm']['parameters']\n        if parameters.native is None:\n            return None\n\n        byte_len = math.log(parameters['q'].native, 2) / 8\n\n        return 'sha1' if byte_len <= 20 else 'sha2'\n\n    @property\n    def algorithm(self):\n        \"\"\"\n        :return:\n            A unicode string of \"rsa\", \"rsassa_pss\", \"dsa\" or \"ec\"\n        \"\"\"\n\n        if self._algorithm is None:\n            self._algorithm = self['algorithm']['algorithm'].native\n        return self._algorithm\n\n    @property\n    def bit_size(self):\n        \"\"\"\n        :return:\n            The bit size of the public key, as an integer\n        \"\"\"\n\n        if self._bit_size is None:\n            if self.algorithm == 'ec':\n                self._bit_size = int(((len(self['public_key'].native) - 1) / 2) * 8)\n            else:\n                if self.algorithm == 'rsa' or self.algorithm == 'rsassa_pss':\n                    prime = self['public_key'].parsed['modulus'].native\n                elif self.algorithm == 'dsa':\n                    prime = self['algorithm']['parameters']['p'].native\n                self._bit_size = int(math.ceil(math.log(prime, 2)))\n                modulus = self._bit_size % 8\n                if modulus != 0:\n                    self._bit_size += 8 - modulus\n\n        return self._bit_size\n\n    @property\n    def byte_size(self):\n        \"\"\"\n        :return:\n            The byte size of the public key, as an integer\n        \"\"\"\n\n        return int(math.ceil(self.bit_size / 8))\n\n    @property\n    def sha1(self):\n        \"\"\"\n        :return:\n            The SHA1 hash of the DER-encoded bytes of this public key info\n        \"\"\"\n\n        if self._sha1 is None:\n            self._sha1 = hashlib.sha1(byte_cls(self['public_key'])).digest()\n        return self._sha1\n\n    @property\n    def sha256(self):\n        \"\"\"\n        :return:\n            The SHA-256 hash of the DER-encoded bytes of this public key info\n        \"\"\"\n\n        if self._sha256 is None:\n            self._sha256 = hashlib.sha256(byte_cls(self['public_key'])).digest()\n        return self._sha256\n\n    @property\n    def fingerprint(self):\n        \"\"\"\n        Creates a fingerprint that can be compared with a private key to see if\n        the two form a pair.\n\n        This fingerprint is not compatible with fingerprints generated by any\n        other software.\n\n        :return:\n            A byte string that is a sha256 hash of selected components (based\n            on the key type)\n        \"\"\"\n\n        raise APIException(\n            'asn1crypto.keys.PublicKeyInfo().fingerprint has been removed, '\n            'please use oscrypto.asymmetric.PublicKey().fingerprint instead')\n"
  },
  {
    "path": "libs/asn1crypto/ocsp.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for the online certificate status protocol (OCSP). Exports\nthe following items:\n\n - OCSPRequest()\n - OCSPResponse()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom ._errors import unwrap\nfrom .algos import DigestAlgorithm, SignedDigestAlgorithm\nfrom .core import (\n    Boolean,\n    Choice,\n    Enumerated,\n    GeneralizedTime,\n    IA5String,\n    Integer,\n    Null,\n    ObjectIdentifier,\n    OctetBitString,\n    OctetString,\n    ParsableOctetString,\n    Sequence,\n    SequenceOf,\n)\nfrom .crl import AuthorityInfoAccessSyntax, CRLReason\nfrom .keys import PublicKeyAlgorithm\nfrom .x509 import Certificate, GeneralName, GeneralNames, Name\n\n\n# The structures in this file are taken from https://tools.ietf.org/html/rfc6960\n\n\nclass Version(Integer):\n    _map = {\n        0: 'v1'\n    }\n\n\nclass CertId(Sequence):\n    _fields = [\n        ('hash_algorithm', DigestAlgorithm),\n        ('issuer_name_hash', OctetString),\n        ('issuer_key_hash', OctetString),\n        ('serial_number', Integer),\n    ]\n\n\nclass ServiceLocator(Sequence):\n    _fields = [\n        ('issuer', Name),\n        ('locator', AuthorityInfoAccessSyntax),\n    ]\n\n\nclass RequestExtensionId(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.48.1.7': 'service_locator',\n    }\n\n\nclass RequestExtension(Sequence):\n    _fields = [\n        ('extn_id', RequestExtensionId),\n        ('critical', Boolean, {'default': False}),\n        ('extn_value', ParsableOctetString),\n    ]\n\n    _oid_pair = ('extn_id', 'extn_value')\n    _oid_specs = {\n        'service_locator': ServiceLocator,\n    }\n\n\nclass RequestExtensions(SequenceOf):\n    _child_spec = RequestExtension\n\n\nclass Request(Sequence):\n    _fields = [\n        ('req_cert', CertId),\n        ('single_request_extensions', RequestExtensions, {'explicit': 0, 'optional': True}),\n    ]\n\n    _processed_extensions = False\n    _critical_extensions = None\n    _service_locator_value = None\n\n    def _set_extensions(self):\n        \"\"\"\n        Sets common named extensions to private attributes and creates a list\n        of critical extensions\n        \"\"\"\n\n        self._critical_extensions = set()\n\n        for extension in self['single_request_extensions']:\n            name = extension['extn_id'].native\n            attribute_name = '_%s_value' % name\n            if hasattr(self, attribute_name):\n                setattr(self, attribute_name, extension['extn_value'].parsed)\n            if extension['critical'].native:\n                self._critical_extensions.add(name)\n\n        self._processed_extensions = True\n\n    @property\n    def critical_extensions(self):\n        \"\"\"\n        Returns a set of the names (or OID if not a known extension) of the\n        extensions marked as critical\n\n        :return:\n            A set of unicode strings\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._critical_extensions\n\n    @property\n    def service_locator_value(self):\n        \"\"\"\n        This extension is used when communicating with an OCSP responder that\n        acts as a proxy for OCSP requests\n\n        :return:\n            None or a ServiceLocator object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._service_locator_value\n\n\nclass Requests(SequenceOf):\n    _child_spec = Request\n\n\nclass ResponseType(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.48.1.1': 'basic_ocsp_response',\n    }\n\n\nclass AcceptableResponses(SequenceOf):\n    _child_spec = ResponseType\n\n\nclass PreferredSignatureAlgorithm(Sequence):\n    _fields = [\n        ('sig_identifier', SignedDigestAlgorithm),\n        ('cert_identifier', PublicKeyAlgorithm, {'optional': True}),\n    ]\n\n\nclass PreferredSignatureAlgorithms(SequenceOf):\n    _child_spec = PreferredSignatureAlgorithm\n\n\nclass TBSRequestExtensionId(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.48.1.2': 'nonce',\n        '1.3.6.1.5.5.7.48.1.4': 'acceptable_responses',\n        '1.3.6.1.5.5.7.48.1.8': 'preferred_signature_algorithms',\n    }\n\n\nclass TBSRequestExtension(Sequence):\n    _fields = [\n        ('extn_id', TBSRequestExtensionId),\n        ('critical', Boolean, {'default': False}),\n        ('extn_value', ParsableOctetString),\n    ]\n\n    _oid_pair = ('extn_id', 'extn_value')\n    _oid_specs = {\n        'nonce': OctetString,\n        'acceptable_responses': AcceptableResponses,\n        'preferred_signature_algorithms': PreferredSignatureAlgorithms,\n    }\n\n\nclass TBSRequestExtensions(SequenceOf):\n    _child_spec = TBSRequestExtension\n\n\nclass TBSRequest(Sequence):\n    _fields = [\n        ('version', Version, {'explicit': 0, 'default': 'v1'}),\n        ('requestor_name', GeneralName, {'explicit': 1, 'optional': True}),\n        ('request_list', Requests),\n        ('request_extensions', TBSRequestExtensions, {'explicit': 2, 'optional': True}),\n    ]\n\n\nclass Certificates(SequenceOf):\n    _child_spec = Certificate\n\n\nclass Signature(Sequence):\n    _fields = [\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature', OctetBitString),\n        ('certs', Certificates, {'explicit': 0, 'optional': True}),\n    ]\n\n\nclass OCSPRequest(Sequence):\n    _fields = [\n        ('tbs_request', TBSRequest),\n        ('optional_signature', Signature, {'explicit': 0, 'optional': True}),\n    ]\n\n    _processed_extensions = False\n    _critical_extensions = None\n    _nonce_value = None\n    _acceptable_responses_value = None\n    _preferred_signature_algorithms_value = None\n\n    def _set_extensions(self):\n        \"\"\"\n        Sets common named extensions to private attributes and creates a list\n        of critical extensions\n        \"\"\"\n\n        self._critical_extensions = set()\n\n        for extension in self['tbs_request']['request_extensions']:\n            name = extension['extn_id'].native\n            attribute_name = '_%s_value' % name\n            if hasattr(self, attribute_name):\n                setattr(self, attribute_name, extension['extn_value'].parsed)\n            if extension['critical'].native:\n                self._critical_extensions.add(name)\n\n        self._processed_extensions = True\n\n    @property\n    def critical_extensions(self):\n        \"\"\"\n        Returns a set of the names (or OID if not a known extension) of the\n        extensions marked as critical\n\n        :return:\n            A set of unicode strings\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._critical_extensions\n\n    @property\n    def nonce_value(self):\n        \"\"\"\n        This extension is used to prevent replay attacks by including a unique,\n        random value with each request/response pair\n\n        :return:\n            None or an OctetString object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._nonce_value\n\n    @property\n    def acceptable_responses_value(self):\n        \"\"\"\n        This extension is used to allow the client and server to communicate\n        with alternative response formats other than just basic_ocsp_response,\n        although no other formats are defined in the standard.\n\n        :return:\n            None or an AcceptableResponses object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._acceptable_responses_value\n\n    @property\n    def preferred_signature_algorithms_value(self):\n        \"\"\"\n        This extension is used by the client to define what signature algorithms\n        are preferred, including both the hash algorithm and the public key\n        algorithm, with a level of detail down to even the public key algorithm\n        parameters, such as curve name.\n\n        :return:\n            None or a PreferredSignatureAlgorithms object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._preferred_signature_algorithms_value\n\n\nclass OCSPResponseStatus(Enumerated):\n    _map = {\n        0: 'successful',\n        1: 'malformed_request',\n        2: 'internal_error',\n        3: 'try_later',\n        5: 'sign_required',\n        6: 'unauthorized',\n    }\n\n\nclass ResponderId(Choice):\n    _alternatives = [\n        ('by_name', Name, {'explicit': 1}),\n        ('by_key', OctetString, {'explicit': 2}),\n    ]\n\n\n# Custom class to return a meaningful .native attribute from CertStatus()\nclass StatusGood(Null):\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            None or 'good'\n        \"\"\"\n\n        if value is not None and value != 'good' and not isinstance(value, Null):\n            raise ValueError(unwrap(\n                '''\n                value must be one of None, \"good\", not %s\n                ''',\n                repr(value)\n            ))\n\n        self.contents = b''\n\n    @property\n    def native(self):\n        return 'good'\n\n\n# Custom class to return a meaningful .native attribute from CertStatus()\nclass StatusUnknown(Null):\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            None or 'unknown'\n        \"\"\"\n\n        if value is not None and value != 'unknown' and not isinstance(value, Null):\n            raise ValueError(unwrap(\n                '''\n                value must be one of None, \"unknown\", not %s\n                ''',\n                repr(value)\n            ))\n\n        self.contents = b''\n\n    @property\n    def native(self):\n        return 'unknown'\n\n\nclass RevokedInfo(Sequence):\n    _fields = [\n        ('revocation_time', GeneralizedTime),\n        ('revocation_reason', CRLReason, {'explicit': 0, 'optional': True}),\n    ]\n\n\nclass CertStatus(Choice):\n    _alternatives = [\n        ('good', StatusGood, {'implicit': 0}),\n        ('revoked', RevokedInfo, {'implicit': 1}),\n        ('unknown', StatusUnknown, {'implicit': 2}),\n    ]\n\n\nclass CrlId(Sequence):\n    _fields = [\n        ('crl_url', IA5String, {'explicit': 0, 'optional': True}),\n        ('crl_num', Integer, {'explicit': 1, 'optional': True}),\n        ('crl_time', GeneralizedTime, {'explicit': 2, 'optional': True}),\n    ]\n\n\nclass SingleResponseExtensionId(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.48.1.3': 'crl',\n        '1.3.6.1.5.5.7.48.1.6': 'archive_cutoff',\n        # These are CRLEntryExtension values from\n        # https://tools.ietf.org/html/rfc5280\n        '2.5.29.21': 'crl_reason',\n        '2.5.29.24': 'invalidity_date',\n        '2.5.29.29': 'certificate_issuer',\n        # https://tools.ietf.org/html/rfc6962.html#page-13\n        '1.3.6.1.4.1.11129.2.4.5': 'signed_certificate_timestamp_list',\n    }\n\n\nclass SingleResponseExtension(Sequence):\n    _fields = [\n        ('extn_id', SingleResponseExtensionId),\n        ('critical', Boolean, {'default': False}),\n        ('extn_value', ParsableOctetString),\n    ]\n\n    _oid_pair = ('extn_id', 'extn_value')\n    _oid_specs = {\n        'crl': CrlId,\n        'archive_cutoff': GeneralizedTime,\n        'crl_reason': CRLReason,\n        'invalidity_date': GeneralizedTime,\n        'certificate_issuer': GeneralNames,\n        'signed_certificate_timestamp_list': OctetString,\n    }\n\n\nclass SingleResponseExtensions(SequenceOf):\n    _child_spec = SingleResponseExtension\n\n\nclass SingleResponse(Sequence):\n    _fields = [\n        ('cert_id', CertId),\n        ('cert_status', CertStatus),\n        ('this_update', GeneralizedTime),\n        ('next_update', GeneralizedTime, {'explicit': 0, 'optional': True}),\n        ('single_extensions', SingleResponseExtensions, {'explicit': 1, 'optional': True}),\n    ]\n\n    _processed_extensions = False\n    _critical_extensions = None\n    _crl_value = None\n    _archive_cutoff_value = None\n    _crl_reason_value = None\n    _invalidity_date_value = None\n    _certificate_issuer_value = None\n\n    def _set_extensions(self):\n        \"\"\"\n        Sets common named extensions to private attributes and creates a list\n        of critical extensions\n        \"\"\"\n\n        self._critical_extensions = set()\n\n        for extension in self['single_extensions']:\n            name = extension['extn_id'].native\n            attribute_name = '_%s_value' % name\n            if hasattr(self, attribute_name):\n                setattr(self, attribute_name, extension['extn_value'].parsed)\n            if extension['critical'].native:\n                self._critical_extensions.add(name)\n\n        self._processed_extensions = True\n\n    @property\n    def critical_extensions(self):\n        \"\"\"\n        Returns a set of the names (or OID if not a known extension) of the\n        extensions marked as critical\n\n        :return:\n            A set of unicode strings\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._critical_extensions\n\n    @property\n    def crl_value(self):\n        \"\"\"\n        This extension is used to locate the CRL that a certificate's revocation\n        is contained within.\n\n        :return:\n            None or a CrlId object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._crl_value\n\n    @property\n    def archive_cutoff_value(self):\n        \"\"\"\n        This extension is used to indicate the date at which an archived\n        (historical) certificate status entry will no longer be available.\n\n        :return:\n            None or a GeneralizedTime object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._archive_cutoff_value\n\n    @property\n    def crl_reason_value(self):\n        \"\"\"\n        This extension indicates the reason that a certificate was revoked.\n\n        :return:\n            None or a CRLReason object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._crl_reason_value\n\n    @property\n    def invalidity_date_value(self):\n        \"\"\"\n        This extension indicates the suspected date/time the private key was\n        compromised or the certificate became invalid. This would usually be\n        before the revocation date, which is when the CA processed the\n        revocation.\n\n        :return:\n            None or a GeneralizedTime object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._invalidity_date_value\n\n    @property\n    def certificate_issuer_value(self):\n        \"\"\"\n        This extension indicates the issuer of the certificate in question.\n\n        :return:\n            None or an x509.GeneralNames object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._certificate_issuer_value\n\n\nclass Responses(SequenceOf):\n    _child_spec = SingleResponse\n\n\nclass ResponseDataExtensionId(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.48.1.2': 'nonce',\n        '1.3.6.1.5.5.7.48.1.9': 'extended_revoke',\n    }\n\n\nclass ResponseDataExtension(Sequence):\n    _fields = [\n        ('extn_id', ResponseDataExtensionId),\n        ('critical', Boolean, {'default': False}),\n        ('extn_value', ParsableOctetString),\n    ]\n\n    _oid_pair = ('extn_id', 'extn_value')\n    _oid_specs = {\n        'nonce': OctetString,\n        'extended_revoke': Null,\n    }\n\n\nclass ResponseDataExtensions(SequenceOf):\n    _child_spec = ResponseDataExtension\n\n\nclass ResponseData(Sequence):\n    _fields = [\n        ('version', Version, {'explicit': 0, 'default': 'v1'}),\n        ('responder_id', ResponderId),\n        ('produced_at', GeneralizedTime),\n        ('responses', Responses),\n        ('response_extensions', ResponseDataExtensions, {'explicit': 1, 'optional': True}),\n    ]\n\n\nclass BasicOCSPResponse(Sequence):\n    _fields = [\n        ('tbs_response_data', ResponseData),\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature', OctetBitString),\n        ('certs', Certificates, {'explicit': 0, 'optional': True}),\n    ]\n\n\nclass ResponseBytes(Sequence):\n    _fields = [\n        ('response_type', ResponseType),\n        ('response', ParsableOctetString),\n    ]\n\n    _oid_pair = ('response_type', 'response')\n    _oid_specs = {\n        'basic_ocsp_response': BasicOCSPResponse,\n    }\n\n\nclass OCSPResponse(Sequence):\n    _fields = [\n        ('response_status', OCSPResponseStatus),\n        ('response_bytes', ResponseBytes, {'explicit': 0, 'optional': True}),\n    ]\n\n    _processed_extensions = False\n    _critical_extensions = None\n    _nonce_value = None\n    _extended_revoke_value = None\n\n    def _set_extensions(self):\n        \"\"\"\n        Sets common named extensions to private attributes and creates a list\n        of critical extensions\n        \"\"\"\n\n        self._critical_extensions = set()\n\n        for extension in self['response_bytes']['response'].parsed['tbs_response_data']['response_extensions']:\n            name = extension['extn_id'].native\n            attribute_name = '_%s_value' % name\n            if hasattr(self, attribute_name):\n                setattr(self, attribute_name, extension['extn_value'].parsed)\n            if extension['critical'].native:\n                self._critical_extensions.add(name)\n\n        self._processed_extensions = True\n\n    @property\n    def critical_extensions(self):\n        \"\"\"\n        Returns a set of the names (or OID if not a known extension) of the\n        extensions marked as critical\n\n        :return:\n            A set of unicode strings\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._critical_extensions\n\n    @property\n    def nonce_value(self):\n        \"\"\"\n        This extension is used to prevent replay attacks on the request/response\n        exchange\n\n        :return:\n            None or an OctetString object\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._nonce_value\n\n    @property\n    def extended_revoke_value(self):\n        \"\"\"\n        This extension is used to signal that the responder will return a\n        \"revoked\" status for non-issued certificates.\n\n        :return:\n            None or a Null object (if present)\n        \"\"\"\n\n        if self._processed_extensions is False:\n            self._set_extensions()\n        return self._extended_revoke_value\n\n    @property\n    def basic_ocsp_response(self):\n        \"\"\"\n        A shortcut into the BasicOCSPResponse sequence\n\n        :return:\n            None or an asn1crypto.ocsp.BasicOCSPResponse object\n        \"\"\"\n\n        return self['response_bytes']['response'].parsed\n\n    @property\n    def response_data(self):\n        \"\"\"\n        A shortcut into the parsed, ResponseData sequence\n\n        :return:\n            None or an asn1crypto.ocsp.ResponseData object\n        \"\"\"\n\n        return self['response_bytes']['response'].parsed['tbs_response_data']\n"
  },
  {
    "path": "libs/asn1crypto/parser.py",
    "content": "# coding: utf-8\n\n\"\"\"\nFunctions for parsing and dumping using the ASN.1 DER encoding. Exports the\nfollowing items:\n\n - emit()\n - parse()\n - peek()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport sys\n\nfrom ._types import byte_cls, chr_cls, type_name\nfrom .util import int_from_bytes, int_to_bytes\n\n_PY2 = sys.version_info <= (3,)\n_INSUFFICIENT_DATA_MESSAGE = 'Insufficient data - %s bytes requested but only %s available'\n_MAX_DEPTH = 10\n\n\ndef emit(class_, method, tag, contents):\n    \"\"\"\n    Constructs a byte string of an ASN.1 DER-encoded value\n\n    This is typically not useful. Instead, use one of the standard classes from\n    asn1crypto.core, or construct a new class with specific fields, and call the\n    .dump() method.\n\n    :param class_:\n        An integer ASN.1 class value: 0 (universal), 1 (application),\n        2 (context), 3 (private)\n\n    :param method:\n        An integer ASN.1 method value: 0 (primitive), 1 (constructed)\n\n    :param tag:\n        An integer ASN.1 tag value\n\n    :param contents:\n        A byte string of the encoded byte contents\n\n    :return:\n        A byte string of the ASN.1 DER value (header and contents)\n    \"\"\"\n\n    if not isinstance(class_, int):\n        raise TypeError('class_ must be an integer, not %s' % type_name(class_))\n\n    if class_ < 0 or class_ > 3:\n        raise ValueError('class_ must be one of 0, 1, 2 or 3, not %s' % class_)\n\n    if not isinstance(method, int):\n        raise TypeError('method must be an integer, not %s' % type_name(method))\n\n    if method < 0 or method > 1:\n        raise ValueError('method must be 0 or 1, not %s' % method)\n\n    if not isinstance(tag, int):\n        raise TypeError('tag must be an integer, not %s' % type_name(tag))\n\n    if tag < 0:\n        raise ValueError('tag must be greater than zero, not %s' % tag)\n\n    if not isinstance(contents, byte_cls):\n        raise TypeError('contents must be a byte string, not %s' % type_name(contents))\n\n    return _dump_header(class_, method, tag, contents) + contents\n\n\ndef parse(contents, strict=False):\n    \"\"\"\n    Parses a byte string of ASN.1 BER/DER-encoded data.\n\n    This is typically not useful. Instead, use one of the standard classes from\n    asn1crypto.core, or construct a new class with specific fields, and call the\n    .load() class method.\n\n    :param contents:\n        A byte string of BER/DER-encoded data\n\n    :param strict:\n        A boolean indicating if trailing data should be forbidden - if so, a\n        ValueError will be raised when trailing data exists\n\n    :raises:\n        ValueError - when the contents do not contain an ASN.1 header or are truncated in some way\n        TypeError - when contents is not a byte string\n\n    :return:\n        A 6-element tuple:\n         - 0: integer class (0 to 3)\n         - 1: integer method\n         - 2: integer tag\n         - 3: byte string header\n         - 4: byte string content\n         - 5: byte string trailer\n    \"\"\"\n\n    if not isinstance(contents, byte_cls):\n        raise TypeError('contents must be a byte string, not %s' % type_name(contents))\n\n    contents_len = len(contents)\n    info, consumed = _parse(contents, contents_len)\n    if strict and consumed != contents_len:\n        raise ValueError('Extra data - %d bytes of trailing data were provided' % (contents_len - consumed))\n    return info\n\n\ndef peek(contents):\n    \"\"\"\n    Parses a byte string of ASN.1 BER/DER-encoded data to find the length\n\n    This is typically used to look into an encoded value to see how long the\n    next chunk of ASN.1-encoded data is. Primarily it is useful when a\n    value is a concatenation of multiple values.\n\n    :param contents:\n        A byte string of BER/DER-encoded data\n\n    :raises:\n        ValueError - when the contents do not contain an ASN.1 header or are truncated in some way\n        TypeError - when contents is not a byte string\n\n    :return:\n        An integer with the number of bytes occupied by the ASN.1 value\n    \"\"\"\n\n    if not isinstance(contents, byte_cls):\n        raise TypeError('contents must be a byte string, not %s' % type_name(contents))\n\n    info, consumed = _parse(contents, len(contents))\n    return consumed\n\n\ndef _parse(encoded_data, data_len, pointer=0, lengths_only=False, depth=0):\n    \"\"\"\n    Parses a byte string into component parts\n\n    :param encoded_data:\n        A byte string that contains BER-encoded data\n\n    :param data_len:\n        The integer length of the encoded data\n\n    :param pointer:\n        The index in the byte string to parse from\n\n    :param lengths_only:\n        A boolean to cause the call to return a 2-element tuple of the integer\n        number of bytes in the header and the integer number of bytes in the\n        contents. Internal use only.\n\n    :param depth:\n        The recursion depth when evaluating indefinite-length encoding.\n\n    :return:\n        A 2-element tuple:\n         - 0: A tuple of (class_, method, tag, header, content, trailer)\n         - 1: An integer indicating how many bytes were consumed\n    \"\"\"\n\n    if depth > _MAX_DEPTH:\n        raise ValueError('Indefinite-length recursion limit exceeded')\n\n    start = pointer\n\n    if data_len < pointer + 1:\n        raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))\n    first_octet = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]\n\n    pointer += 1\n\n    tag = first_octet & 31\n    constructed = (first_octet >> 5) & 1\n    # Base 128 length using 8th bit as continuation indicator\n    if tag == 31:\n        tag = 0\n        while True:\n            if data_len < pointer + 1:\n                raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))\n            num = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]\n            pointer += 1\n            if num == 0x80 and tag == 0:\n                raise ValueError('Non-minimal tag encoding')\n            tag *= 128\n            tag += num & 127\n            if num >> 7 == 0:\n                break\n        if tag < 31:\n            raise ValueError('Non-minimal tag encoding')\n\n    if data_len < pointer + 1:\n        raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))\n    length_octet = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]\n    pointer += 1\n    trailer = b''\n\n    if length_octet >> 7 == 0:\n        contents_end = pointer + (length_octet & 127)\n\n    else:\n        length_octets = length_octet & 127\n        if length_octets:\n            if data_len < pointer + length_octets:\n                raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (length_octets, data_len - pointer))\n            pointer += length_octets\n            contents_end = pointer + int_from_bytes(encoded_data[pointer - length_octets:pointer], signed=False)\n\n        else:\n            # To properly parse indefinite length values, we need to scan forward\n            # parsing headers until we find a value with a length of zero. If we\n            # just scanned looking for \\x00\\x00, nested indefinite length values\n            # would not work.\n            if not constructed:\n                raise ValueError('Indefinite-length element must be constructed')\n            contents_end = pointer\n            while data_len < contents_end + 2 or encoded_data[contents_end:contents_end+2] != b'\\x00\\x00':\n                _, contents_end = _parse(encoded_data, data_len, contents_end, lengths_only=True, depth=depth+1)\n            contents_end += 2\n            trailer = b'\\x00\\x00'\n\n    if contents_end > data_len:\n        raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (contents_end - pointer, data_len - pointer))\n\n    if lengths_only:\n        return (pointer, contents_end)\n\n    return (\n        (\n            first_octet >> 6,\n            constructed,\n            tag,\n            encoded_data[start:pointer],\n            encoded_data[pointer:contents_end-len(trailer)],\n            trailer\n        ),\n        contents_end\n    )\n\n\ndef _dump_header(class_, method, tag, contents):\n    \"\"\"\n    Constructs the header bytes for an ASN.1 object\n\n    :param class_:\n        An integer ASN.1 class value: 0 (universal), 1 (application),\n        2 (context), 3 (private)\n\n    :param method:\n        An integer ASN.1 method value: 0 (primitive), 1 (constructed)\n\n    :param tag:\n        An integer ASN.1 tag value\n\n    :param contents:\n        A byte string of the encoded byte contents\n\n    :return:\n        A byte string of the ASN.1 DER header\n    \"\"\"\n\n    header = b''\n\n    id_num = 0\n    id_num |= class_ << 6\n    id_num |= method << 5\n\n    if tag >= 31:\n        cont_bit = 0\n        while tag > 0:\n            header = chr_cls(cont_bit | (tag & 0x7f)) + header\n            if not cont_bit:\n                cont_bit = 0x80\n            tag = tag >> 7\n        header = chr_cls(id_num | 31) + header\n    else:\n        header += chr_cls(id_num | tag)\n\n    length = len(contents)\n    if length <= 127:\n        header += chr_cls(length)\n    else:\n        length_bytes = int_to_bytes(length)\n        header += chr_cls(0x80 | len(length_bytes))\n        header += length_bytes\n\n    return header\n"
  },
  {
    "path": "libs/asn1crypto/pdf.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for PDF signature structures. Adds extra oid mapping and\nvalue parsing to asn1crypto.x509.Extension() and asn1crypto.xms.CMSAttribute().\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom .cms import CMSAttributeType, CMSAttribute\nfrom .core import (\n    Boolean,\n    Integer,\n    Null,\n    ObjectIdentifier,\n    OctetString,\n    Sequence,\n    SequenceOf,\n    SetOf,\n)\nfrom .crl import CertificateList\nfrom .ocsp import OCSPResponse\nfrom .x509 import (\n    Extension,\n    ExtensionId,\n    GeneralName,\n    KeyPurposeId,\n)\n\n\nclass AdobeArchiveRevInfo(Sequence):\n    _fields = [\n        ('version', Integer)\n    ]\n\n\nclass AdobeTimestamp(Sequence):\n    _fields = [\n        ('version', Integer),\n        ('location', GeneralName),\n        ('requires_auth', Boolean, {'optional': True, 'default': False}),\n    ]\n\n\nclass OtherRevInfo(Sequence):\n    _fields = [\n        ('type', ObjectIdentifier),\n        ('value', OctetString),\n    ]\n\n\nclass SequenceOfCertificateList(SequenceOf):\n    _child_spec = CertificateList\n\n\nclass SequenceOfOCSPResponse(SequenceOf):\n    _child_spec = OCSPResponse\n\n\nclass SequenceOfOtherRevInfo(SequenceOf):\n    _child_spec = OtherRevInfo\n\n\nclass RevocationInfoArchival(Sequence):\n    _fields = [\n        ('crl', SequenceOfCertificateList, {'explicit': 0, 'optional': True}),\n        ('ocsp', SequenceOfOCSPResponse, {'explicit': 1, 'optional': True}),\n        ('other_rev_info', SequenceOfOtherRevInfo, {'explicit': 2, 'optional': True}),\n    ]\n\n\nclass SetOfRevocationInfoArchival(SetOf):\n    _child_spec = RevocationInfoArchival\n\n\nExtensionId._map['1.2.840.113583.1.1.9.2'] = 'adobe_archive_rev_info'\nExtensionId._map['1.2.840.113583.1.1.9.1'] = 'adobe_timestamp'\nExtensionId._map['1.2.840.113583.1.1.10'] = 'adobe_ppklite_credential'\nExtension._oid_specs['adobe_archive_rev_info'] = AdobeArchiveRevInfo\nExtension._oid_specs['adobe_timestamp'] = AdobeTimestamp\nExtension._oid_specs['adobe_ppklite_credential'] = Null\nKeyPurposeId._map['1.2.840.113583.1.1.5'] = 'pdf_signing'\nCMSAttributeType._map['1.2.840.113583.1.1.8'] = 'adobe_revocation_info_archival'\nCMSAttribute._oid_specs['adobe_revocation_info_archival'] = SetOfRevocationInfoArchival\n"
  },
  {
    "path": "libs/asn1crypto/pem.py",
    "content": "# coding: utf-8\n\n\"\"\"\nEncoding DER to PEM and decoding PEM to DER. Exports the following items:\n\n - armor()\n - detect()\n - unarmor()\n\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport base64\nimport re\nimport sys\n\nfrom ._errors import unwrap\nfrom ._types import type_name as _type_name, str_cls, byte_cls\n\nif sys.version_info < (3,):\n    from cStringIO import StringIO as BytesIO\nelse:\n    from io import BytesIO\n\n\ndef detect(byte_string):\n    \"\"\"\n    Detect if a byte string seems to contain a PEM-encoded block\n\n    :param byte_string:\n        A byte string to look through\n\n    :return:\n        A boolean, indicating if a PEM-encoded block is contained in the byte\n        string\n    \"\"\"\n\n    if not isinstance(byte_string, byte_cls):\n        raise TypeError(unwrap(\n            '''\n            byte_string must be a byte string, not %s\n            ''',\n            _type_name(byte_string)\n        ))\n\n    return byte_string.find(b'-----BEGIN') != -1 or byte_string.find(b'---- BEGIN') != -1\n\n\ndef armor(type_name, der_bytes, headers=None):\n    \"\"\"\n    Armors a DER-encoded byte string in PEM\n\n    :param type_name:\n        A unicode string that will be capitalized and placed in the header\n        and footer of the block. E.g. \"CERTIFICATE\", \"PRIVATE KEY\", etc. This\n        will appear as \"-----BEGIN CERTIFICATE-----\" and\n        \"-----END CERTIFICATE-----\".\n\n    :param der_bytes:\n        A byte string to be armored\n\n    :param headers:\n        An OrderedDict of the header lines to write after the BEGIN line\n\n    :return:\n        A byte string of the PEM block\n    \"\"\"\n\n    if not isinstance(der_bytes, byte_cls):\n        raise TypeError(unwrap(\n            '''\n            der_bytes must be a byte string, not %s\n            ''' % _type_name(der_bytes)\n        ))\n\n    if not isinstance(type_name, str_cls):\n        raise TypeError(unwrap(\n            '''\n            type_name must be a unicode string, not %s\n            ''',\n            _type_name(type_name)\n        ))\n\n    type_name = type_name.upper().encode('ascii')\n\n    output = BytesIO()\n    output.write(b'-----BEGIN ')\n    output.write(type_name)\n    output.write(b'-----\\n')\n    if headers:\n        for key in headers:\n            output.write(key.encode('ascii'))\n            output.write(b': ')\n            output.write(headers[key].encode('ascii'))\n            output.write(b'\\n')\n        output.write(b'\\n')\n    b64_bytes = base64.b64encode(der_bytes)\n    b64_len = len(b64_bytes)\n    i = 0\n    while i < b64_len:\n        output.write(b64_bytes[i:i + 64])\n        output.write(b'\\n')\n        i += 64\n    output.write(b'-----END ')\n    output.write(type_name)\n    output.write(b'-----\\n')\n\n    return output.getvalue()\n\n\ndef _unarmor(pem_bytes):\n    \"\"\"\n    Convert a PEM-encoded byte string into one or more DER-encoded byte strings\n\n    :param pem_bytes:\n        A byte string of the PEM-encoded data\n\n    :raises:\n        ValueError - when the pem_bytes do not appear to be PEM-encoded bytes\n\n    :return:\n        A generator of 3-element tuples in the format: (object_type, headers,\n        der_bytes). The object_type is a unicode string of what is between\n        \"-----BEGIN \" and \"-----\". Examples include: \"CERTIFICATE\",\n        \"PUBLIC KEY\", \"PRIVATE KEY\". The headers is a dict containing any lines\n        in the form \"Name: Value\" that are right after the begin line.\n    \"\"\"\n\n    if not isinstance(pem_bytes, byte_cls):\n        raise TypeError(unwrap(\n            '''\n            pem_bytes must be a byte string, not %s\n            ''',\n            _type_name(pem_bytes)\n        ))\n\n    # Valid states include: \"trash\", \"headers\", \"body\"\n    state = 'trash'\n    headers = {}\n    base64_data = b''\n    object_type = None\n\n    found_start = False\n    found_end = False\n\n    for line in pem_bytes.splitlines(False):\n        if line == b'':\n            continue\n\n        if state == \"trash\":\n            # Look for a starting line since some CA cert bundle show the cert\n            # into in a parsed format above each PEM block\n            type_name_match = re.match(b'^(?:---- |-----)BEGIN ([A-Z0-9 ]+)(?: ----|-----)', line)\n            if not type_name_match:\n                continue\n            object_type = type_name_match.group(1).decode('ascii')\n\n            found_start = True\n            state = 'headers'\n            continue\n\n        if state == 'headers':\n            if line.find(b':') == -1:\n                state = 'body'\n            else:\n                decoded_line = line.decode('ascii')\n                name, value = decoded_line.split(':', 1)\n                headers[name] = value.strip()\n                continue\n\n        if state == 'body':\n            if line[0:5] in (b'-----', b'---- '):\n                der_bytes = base64.b64decode(base64_data)\n\n                yield (object_type, headers, der_bytes)\n\n                state = 'trash'\n                headers = {}\n                base64_data = b''\n                object_type = None\n                found_end = True\n                continue\n\n            base64_data += line\n\n    if not found_start or not found_end:\n        raise ValueError(unwrap(\n            '''\n            pem_bytes does not appear to contain PEM-encoded data - no\n            BEGIN/END combination found\n            '''\n        ))\n\n\ndef unarmor(pem_bytes, multiple=False):\n    \"\"\"\n    Convert a PEM-encoded byte string into a DER-encoded byte string\n\n    :param pem_bytes:\n        A byte string of the PEM-encoded data\n\n    :param multiple:\n        If True, function will return a generator\n\n    :raises:\n        ValueError - when the pem_bytes do not appear to be PEM-encoded bytes\n\n    :return:\n        A 3-element tuple (object_name, headers, der_bytes). The object_name is\n        a unicode string of what is between \"-----BEGIN \" and \"-----\". Examples\n        include: \"CERTIFICATE\", \"PUBLIC KEY\", \"PRIVATE KEY\". The headers is a\n        dict containing any lines in the form \"Name: Value\" that are right\n        after the begin line.\n    \"\"\"\n\n    generator = _unarmor(pem_bytes)\n\n    if not multiple:\n        return next(generator)\n\n    return generator\n"
  },
  {
    "path": "libs/asn1crypto/pkcs12.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for PKCS#12 files. Exports the following items:\n\n - CertBag()\n - CrlBag()\n - Pfx()\n - SafeBag()\n - SecretBag()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom .algos import DigestInfo\nfrom .cms import ContentInfo, SignedData\nfrom .core import (\n    Any,\n    BMPString,\n    Integer,\n    ObjectIdentifier,\n    OctetString,\n    ParsableOctetString,\n    Sequence,\n    SequenceOf,\n    SetOf,\n)\nfrom .keys import PrivateKeyInfo, EncryptedPrivateKeyInfo\nfrom .x509 import Certificate, KeyPurposeId\n\n\n# The structures in this file are taken from https://tools.ietf.org/html/rfc7292\n\nclass MacData(Sequence):\n    _fields = [\n        ('mac', DigestInfo),\n        ('mac_salt', OctetString),\n        ('iterations', Integer, {'default': 1}),\n    ]\n\n\nclass Version(Integer):\n    _map = {\n        3: 'v3'\n    }\n\n\nclass AttributeType(ObjectIdentifier):\n    _map = {\n        # https://tools.ietf.org/html/rfc2985#page-18\n        '1.2.840.113549.1.9.20': 'friendly_name',\n        '1.2.840.113549.1.9.21': 'local_key_id',\n        # https://support.microsoft.com/en-us/kb/287547\n        '1.3.6.1.4.1.311.17.1': 'microsoft_local_machine_keyset',\n        # https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java\n        # this is a set of OIDs, representing key usage, the usual value is a SET of one element OID 2.5.29.37.0\n        '2.16.840.1.113894.746875.1.1': 'trusted_key_usage',\n    }\n\n\nclass SetOfAny(SetOf):\n    _child_spec = Any\n\n\nclass SetOfBMPString(SetOf):\n    _child_spec = BMPString\n\n\nclass SetOfOctetString(SetOf):\n    _child_spec = OctetString\n\n\nclass SetOfKeyPurposeId(SetOf):\n    _child_spec = KeyPurposeId\n\n\nclass Attribute(Sequence):\n    _fields = [\n        ('type', AttributeType),\n        ('values', None),\n    ]\n\n    _oid_specs = {\n        'friendly_name': SetOfBMPString,\n        'local_key_id': SetOfOctetString,\n        'microsoft_csp_name': SetOfBMPString,\n        'trusted_key_usage': SetOfKeyPurposeId,\n    }\n\n    def _values_spec(self):\n        return self._oid_specs.get(self['type'].native, SetOfAny)\n\n    _spec_callbacks = {\n        'values': _values_spec\n    }\n\n\nclass Attributes(SetOf):\n    _child_spec = Attribute\n\n\nclass Pfx(Sequence):\n    _fields = [\n        ('version', Version),\n        ('auth_safe', ContentInfo),\n        ('mac_data', MacData, {'optional': True})\n    ]\n\n    _authenticated_safe = None\n\n    @property\n    def authenticated_safe(self):\n        if self._authenticated_safe is None:\n            content = self['auth_safe']['content']\n            if isinstance(content, SignedData):\n                content = content['content_info']['content']\n            self._authenticated_safe = AuthenticatedSafe.load(content.native)\n        return self._authenticated_safe\n\n\nclass AuthenticatedSafe(SequenceOf):\n    _child_spec = ContentInfo\n\n\nclass BagId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.12.10.1.1': 'key_bag',\n        '1.2.840.113549.1.12.10.1.2': 'pkcs8_shrouded_key_bag',\n        '1.2.840.113549.1.12.10.1.3': 'cert_bag',\n        '1.2.840.113549.1.12.10.1.4': 'crl_bag',\n        '1.2.840.113549.1.12.10.1.5': 'secret_bag',\n        '1.2.840.113549.1.12.10.1.6': 'safe_contents',\n    }\n\n\nclass CertId(ObjectIdentifier):\n    _map = {\n        '1.2.840.113549.1.9.22.1': 'x509',\n        '1.2.840.113549.1.9.22.2': 'sdsi',\n    }\n\n\nclass CertBag(Sequence):\n    _fields = [\n        ('cert_id', CertId),\n        ('cert_value', ParsableOctetString, {'explicit': 0}),\n    ]\n\n    _oid_pair = ('cert_id', 'cert_value')\n    _oid_specs = {\n        'x509': Certificate,\n    }\n\n\nclass CrlBag(Sequence):\n    _fields = [\n        ('crl_id', ObjectIdentifier),\n        ('crl_value', OctetString, {'explicit': 0}),\n    ]\n\n\nclass SecretBag(Sequence):\n    _fields = [\n        ('secret_type_id', ObjectIdentifier),\n        ('secret_value', OctetString, {'explicit': 0}),\n    ]\n\n\nclass SafeContents(SequenceOf):\n    pass\n\n\nclass SafeBag(Sequence):\n    _fields = [\n        ('bag_id', BagId),\n        ('bag_value', Any, {'explicit': 0}),\n        ('bag_attributes', Attributes, {'optional': True}),\n    ]\n\n    _oid_pair = ('bag_id', 'bag_value')\n    _oid_specs = {\n        'key_bag': PrivateKeyInfo,\n        'pkcs8_shrouded_key_bag': EncryptedPrivateKeyInfo,\n        'cert_bag': CertBag,\n        'crl_bag': CrlBag,\n        'secret_bag': SecretBag,\n        'safe_contents': SafeContents\n    }\n\n\nSafeContents._child_spec = SafeBag\n"
  },
  {
    "path": "libs/asn1crypto/tsp.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for the time stamp protocol (TSP). Exports the following\nitems:\n\n - TimeStampReq()\n - TimeStampResp()\n\nAlso adds TimeStampedData() support to asn1crypto.cms.ContentInfo(),\nTimeStampedData() and TSTInfo() support to\nasn1crypto.cms.EncapsulatedContentInfo() and some oids and value parsers to\nasn1crypto.cms.CMSAttribute().\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom .algos import DigestAlgorithm\nfrom .cms import (\n    CMSAttribute,\n    CMSAttributeType,\n    ContentInfo,\n    ContentType,\n    EncapsulatedContentInfo,\n)\nfrom .core import (\n    Any,\n    BitString,\n    Boolean,\n    Choice,\n    GeneralizedTime,\n    IA5String,\n    Integer,\n    ObjectIdentifier,\n    OctetString,\n    Sequence,\n    SequenceOf,\n    SetOf,\n    UTF8String,\n)\nfrom .crl import CertificateList\nfrom .x509 import (\n    Attributes,\n    CertificatePolicies,\n    GeneralName,\n    GeneralNames,\n)\n\n\n# The structures in this file are based on https://tools.ietf.org/html/rfc3161,\n# https://tools.ietf.org/html/rfc4998, https://tools.ietf.org/html/rfc5544,\n# https://tools.ietf.org/html/rfc5035, https://tools.ietf.org/html/rfc2634\n\nclass Version(Integer):\n    _map = {\n        0: 'v0',\n        1: 'v1',\n        2: 'v2',\n        3: 'v3',\n        4: 'v4',\n        5: 'v5',\n    }\n\n\nclass MessageImprint(Sequence):\n    _fields = [\n        ('hash_algorithm', DigestAlgorithm),\n        ('hashed_message', OctetString),\n    ]\n\n\nclass Accuracy(Sequence):\n    _fields = [\n        ('seconds', Integer, {'optional': True}),\n        ('millis', Integer, {'implicit': 0, 'optional': True}),\n        ('micros', Integer, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass Extension(Sequence):\n    _fields = [\n        ('extn_id', ObjectIdentifier),\n        ('critical', Boolean, {'default': False}),\n        ('extn_value', OctetString),\n    ]\n\n\nclass Extensions(SequenceOf):\n    _child_spec = Extension\n\n\nclass TSTInfo(Sequence):\n    _fields = [\n        ('version', Version),\n        ('policy', ObjectIdentifier),\n        ('message_imprint', MessageImprint),\n        ('serial_number', Integer),\n        ('gen_time', GeneralizedTime),\n        ('accuracy', Accuracy, {'optional': True}),\n        ('ordering', Boolean, {'default': False}),\n        ('nonce', Integer, {'optional': True}),\n        ('tsa', GeneralName, {'explicit': 0, 'optional': True}),\n        ('extensions', Extensions, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass TimeStampReq(Sequence):\n    _fields = [\n        ('version', Version),\n        ('message_imprint', MessageImprint),\n        ('req_policy', ObjectIdentifier, {'optional': True}),\n        ('nonce', Integer, {'optional': True}),\n        ('cert_req', Boolean, {'default': False}),\n        ('extensions', Extensions, {'implicit': 0, 'optional': True}),\n    ]\n\n\nclass PKIStatus(Integer):\n    _map = {\n        0: 'granted',\n        1: 'granted_with_mods',\n        2: 'rejection',\n        3: 'waiting',\n        4: 'revocation_warning',\n        5: 'revocation_notification',\n    }\n\n\nclass PKIFreeText(SequenceOf):\n    _child_spec = UTF8String\n\n\nclass PKIFailureInfo(BitString):\n    _map = {\n        0: 'bad_alg',\n        2: 'bad_request',\n        5: 'bad_data_format',\n        14: 'time_not_available',\n        15: 'unaccepted_policy',\n        16: 'unaccepted_extensions',\n        17: 'add_info_not_available',\n        25: 'system_failure',\n    }\n\n\nclass PKIStatusInfo(Sequence):\n    _fields = [\n        ('status', PKIStatus),\n        ('status_string', PKIFreeText, {'optional': True}),\n        ('fail_info', PKIFailureInfo, {'optional': True}),\n    ]\n\n\nclass TimeStampResp(Sequence):\n    _fields = [\n        ('status', PKIStatusInfo),\n        ('time_stamp_token', ContentInfo),\n    ]\n\n\nclass MetaData(Sequence):\n    _fields = [\n        ('hash_protected', Boolean),\n        ('file_name', UTF8String, {'optional': True}),\n        ('media_type', IA5String, {'optional': True}),\n        ('other_meta_data', Attributes, {'optional': True}),\n    ]\n\n\nclass TimeStampAndCRL(Sequence):\n    _fields = [\n        ('time_stamp', EncapsulatedContentInfo),\n        ('crl', CertificateList, {'optional': True}),\n    ]\n\n\nclass TimeStampTokenEvidence(SequenceOf):\n    _child_spec = TimeStampAndCRL\n\n\nclass DigestAlgorithms(SequenceOf):\n    _child_spec = DigestAlgorithm\n\n\nclass EncryptionInfo(Sequence):\n    _fields = [\n        ('encryption_info_type', ObjectIdentifier),\n        ('encryption_info_value', Any),\n    ]\n\n\nclass PartialHashtree(SequenceOf):\n    _child_spec = OctetString\n\n\nclass PartialHashtrees(SequenceOf):\n    _child_spec = PartialHashtree\n\n\nclass ArchiveTimeStamp(Sequence):\n    _fields = [\n        ('digest_algorithm', DigestAlgorithm, {'implicit': 0, 'optional': True}),\n        ('attributes', Attributes, {'implicit': 1, 'optional': True}),\n        ('reduced_hashtree', PartialHashtrees, {'implicit': 2, 'optional': True}),\n        ('time_stamp', ContentInfo),\n    ]\n\n\nclass ArchiveTimeStampSequence(SequenceOf):\n    _child_spec = ArchiveTimeStamp\n\n\nclass EvidenceRecord(Sequence):\n    _fields = [\n        ('version', Version),\n        ('digest_algorithms', DigestAlgorithms),\n        ('crypto_infos', Attributes, {'implicit': 0, 'optional': True}),\n        ('encryption_info', EncryptionInfo, {'implicit': 1, 'optional': True}),\n        ('archive_time_stamp_sequence', ArchiveTimeStampSequence),\n    ]\n\n\nclass OtherEvidence(Sequence):\n    _fields = [\n        ('oe_type', ObjectIdentifier),\n        ('oe_value', Any),\n    ]\n\n\nclass Evidence(Choice):\n    _alternatives = [\n        ('tst_evidence', TimeStampTokenEvidence, {'implicit': 0}),\n        ('ers_evidence', EvidenceRecord, {'implicit': 1}),\n        ('other_evidence', OtherEvidence, {'implicit': 2}),\n    ]\n\n\nclass TimeStampedData(Sequence):\n    _fields = [\n        ('version', Version),\n        ('data_uri', IA5String, {'optional': True}),\n        ('meta_data', MetaData, {'optional': True}),\n        ('content', OctetString, {'optional': True}),\n        ('temporal_evidence', Evidence),\n    ]\n\n\nclass IssuerSerial(Sequence):\n    _fields = [\n        ('issuer', GeneralNames),\n        ('serial_number', Integer),\n    ]\n\n\nclass ESSCertID(Sequence):\n    _fields = [\n        ('cert_hash', OctetString),\n        ('issuer_serial', IssuerSerial, {'optional': True}),\n    ]\n\n\nclass ESSCertIDs(SequenceOf):\n    _child_spec = ESSCertID\n\n\nclass SigningCertificate(Sequence):\n    _fields = [\n        ('certs', ESSCertIDs),\n        ('policies', CertificatePolicies, {'optional': True}),\n    ]\n\n\nclass SetOfSigningCertificates(SetOf):\n    _child_spec = SigningCertificate\n\n\nclass ESSCertIDv2(Sequence):\n    _fields = [\n        ('hash_algorithm', DigestAlgorithm, {'default': {'algorithm': 'sha256'}}),\n        ('cert_hash', OctetString),\n        ('issuer_serial', IssuerSerial, {'optional': True}),\n    ]\n\n\nclass ESSCertIDv2s(SequenceOf):\n    _child_spec = ESSCertIDv2\n\n\nclass SigningCertificateV2(Sequence):\n    _fields = [\n        ('certs', ESSCertIDv2s),\n        ('policies', CertificatePolicies, {'optional': True}),\n    ]\n\n\nclass SetOfSigningCertificatesV2(SetOf):\n    _child_spec = SigningCertificateV2\n\n\nEncapsulatedContentInfo._oid_specs['tst_info'] = TSTInfo\nEncapsulatedContentInfo._oid_specs['timestamped_data'] = TimeStampedData\nContentInfo._oid_specs['timestamped_data'] = TimeStampedData\nContentType._map['1.2.840.113549.1.9.16.1.4'] = 'tst_info'\nContentType._map['1.2.840.113549.1.9.16.1.31'] = 'timestamped_data'\nCMSAttributeType._map['1.2.840.113549.1.9.16.2.12'] = 'signing_certificate'\nCMSAttribute._oid_specs['signing_certificate'] = SetOfSigningCertificates\nCMSAttributeType._map['1.2.840.113549.1.9.16.2.47'] = 'signing_certificate_v2'\nCMSAttribute._oid_specs['signing_certificate_v2'] = SetOfSigningCertificatesV2\n"
  },
  {
    "path": "libs/asn1crypto/util.py",
    "content": "# coding: utf-8\n\n\"\"\"\nMiscellaneous data helpers, including functions for converting integers to and\nfrom bytes and UTC timezone. Exports the following items:\n\n - OrderedDict()\n - int_from_bytes()\n - int_to_bytes()\n - timezone.utc\n - utc_with_dst\n - create_timezone()\n - inet_ntop()\n - inet_pton()\n - uri_to_iri()\n - iri_to_uri()\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nimport math\nimport sys\nfrom datetime import datetime, date, timedelta, tzinfo\n\nfrom ._errors import unwrap\nfrom ._iri import iri_to_uri, uri_to_iri  # noqa\nfrom ._ordereddict import OrderedDict  # noqa\nfrom ._types import type_name\n\nif sys.platform == 'win32':\n    from ._inet import inet_ntop, inet_pton\nelse:\n    from socket import inet_ntop, inet_pton  # noqa\n\n\n# Python 2\nif sys.version_info <= (3,):\n\n    def int_to_bytes(value, signed=False, width=None):\n        \"\"\"\n        Converts an integer to a byte string\n\n        :param value:\n            The integer to convert\n\n        :param signed:\n            If the byte string should be encoded using two's complement\n\n        :param width:\n            If None, the minimal possible size (but at least 1),\n            otherwise an integer of the byte width for the return value\n\n        :return:\n            A byte string\n        \"\"\"\n\n        if value == 0 and width == 0:\n            return b''\n\n        # Handle negatives in two's complement\n        is_neg = False\n        if signed and value < 0:\n            is_neg = True\n            bits = int(math.ceil(len('%x' % abs(value)) / 2.0) * 8)\n            value = (value + (1 << bits)) % (1 << bits)\n\n        hex_str = '%x' % value\n        if len(hex_str) & 1:\n            hex_str = '0' + hex_str\n\n        output = hex_str.decode('hex')\n\n        if signed and not is_neg and ord(output[0:1]) & 0x80:\n            output = b'\\x00' + output\n\n        if width is not None:\n            if len(output) > width:\n                raise OverflowError('int too big to convert')\n            if is_neg:\n                pad_char = b'\\xFF'\n            else:\n                pad_char = b'\\x00'\n            output = (pad_char * (width - len(output))) + output\n        elif is_neg and ord(output[0:1]) & 0x80 == 0:\n            output = b'\\xFF' + output\n\n        return output\n\n    def int_from_bytes(value, signed=False):\n        \"\"\"\n        Converts a byte string to an integer\n\n        :param value:\n            The byte string to convert\n\n        :param signed:\n            If the byte string should be interpreted using two's complement\n\n        :return:\n            An integer\n        \"\"\"\n\n        if value == b'':\n            return 0\n\n        num = long(value.encode(\"hex\"), 16)  # noqa\n\n        if not signed:\n            return num\n\n        # Check for sign bit and handle two's complement\n        if ord(value[0:1]) & 0x80:\n            bit_len = len(value) * 8\n            return num - (1 << bit_len)\n\n        return num\n\n    class timezone(tzinfo):  # noqa\n        \"\"\"\n        Implements datetime.timezone for py2.\n        Only full minute offsets are supported.\n        DST is not supported.\n        \"\"\"\n\n        def __init__(self, offset, name=None):\n            \"\"\"\n            :param offset:\n                A timedelta with this timezone's offset from UTC\n\n            :param name:\n                Name of the timezone; if None, generate one.\n            \"\"\"\n\n            if not timedelta(hours=-24) < offset < timedelta(hours=24):\n                raise ValueError('Offset must be in [-23:59, 23:59]')\n\n            if offset.seconds % 60 or offset.microseconds:\n                raise ValueError('Offset must be full minutes')\n\n            self._offset = offset\n\n            if name is not None:\n                self._name = name\n            elif not offset:\n                self._name = 'UTC'\n            else:\n                self._name = 'UTC' + _format_offset(offset)\n\n        def __eq__(self, other):\n            \"\"\"\n            Compare two timezones\n\n            :param other:\n                The other timezone to compare to\n\n            :return:\n                A boolean\n            \"\"\"\n\n            if type(other) != timezone:\n                return False\n            return self._offset == other._offset\n\n        def __getinitargs__(self):\n            \"\"\"\n            Called by tzinfo.__reduce__ to support pickle and copy.\n\n            :return:\n                offset and name, to be used for __init__\n            \"\"\"\n\n            return self._offset, self._name\n\n        def tzname(self, dt):\n            \"\"\"\n            :param dt:\n                A datetime object; ignored.\n\n            :return:\n                Name of this timezone\n            \"\"\"\n\n            return self._name\n\n        def utcoffset(self, dt):\n            \"\"\"\n            :param dt:\n                A datetime object; ignored.\n\n            :return:\n                A timedelta object with the offset from UTC\n            \"\"\"\n\n            return self._offset\n\n        def dst(self, dt):\n            \"\"\"\n            :param dt:\n                A datetime object; ignored.\n\n            :return:\n                Zero timedelta\n            \"\"\"\n\n            return timedelta(0)\n\n    timezone.utc = timezone(timedelta(0))\n\n# Python 3\nelse:\n\n    from datetime import timezone  # noqa\n\n    def int_to_bytes(value, signed=False, width=None):\n        \"\"\"\n        Converts an integer to a byte string\n\n        :param value:\n            The integer to convert\n\n        :param signed:\n            If the byte string should be encoded using two's complement\n\n        :param width:\n            If None, the minimal possible size (but at least 1),\n            otherwise an integer of the byte width for the return value\n\n        :return:\n            A byte string\n        \"\"\"\n\n        if width is None:\n            if signed:\n                if value < 0:\n                    bits_required = abs(value + 1).bit_length()\n                else:\n                    bits_required = value.bit_length()\n                if bits_required % 8 == 0:\n                    bits_required += 1\n            else:\n                bits_required = value.bit_length()\n            width = math.ceil(bits_required / 8) or 1\n        return value.to_bytes(width, byteorder='big', signed=signed)\n\n    def int_from_bytes(value, signed=False):\n        \"\"\"\n        Converts a byte string to an integer\n\n        :param value:\n            The byte string to convert\n\n        :param signed:\n            If the byte string should be interpreted using two's complement\n\n        :return:\n            An integer\n        \"\"\"\n\n        return int.from_bytes(value, 'big', signed=signed)\n\n\ndef _format_offset(off):\n    \"\"\"\n    Format a timedelta into \"[+-]HH:MM\" format or \"\" for None\n    \"\"\"\n\n    if off is None:\n        return ''\n    mins = off.days * 24 * 60 + off.seconds // 60\n    sign = '-' if mins < 0 else '+'\n    return sign + '%02d:%02d' % divmod(abs(mins), 60)\n\n\nclass _UtcWithDst(tzinfo):\n    \"\"\"\n    Utc class where dst does not return None; required for astimezone\n    \"\"\"\n\n    def tzname(self, dt):\n        return 'UTC'\n\n    def utcoffset(self, dt):\n        return timedelta(0)\n\n    def dst(self, dt):\n        return timedelta(0)\n\n\nutc_with_dst = _UtcWithDst()\n\n_timezone_cache = {}\n\n\ndef create_timezone(offset):\n    \"\"\"\n    Returns a new datetime.timezone object with the given offset.\n    Uses cached objects if possible.\n\n    :param offset:\n        A datetime.timedelta object; It needs to be in full minutes and between -23:59 and +23:59.\n\n    :return:\n        A datetime.timezone object\n    \"\"\"\n\n    try:\n        tz = _timezone_cache[offset]\n    except KeyError:\n        tz = _timezone_cache[offset] = timezone(offset)\n    return tz\n\n\nclass extended_date(object):\n    \"\"\"\n    A datetime.datetime-like object that represents the year 0. This is just\n    to handle 0000-01-01 found in some certificates. Python's datetime does\n    not support year 0.\n\n    The proleptic gregorian calendar repeats itself every 400 years. Therefore,\n    the simplest way to format is to substitute year 2000.\n    \"\"\"\n\n    def __init__(self, year, month, day):\n        \"\"\"\n        :param year:\n            The integer 0\n\n        :param month:\n            An integer from 1 to 12\n\n        :param day:\n            An integer from 1 to 31\n        \"\"\"\n\n        if year != 0:\n            raise ValueError('year must be 0')\n\n        self._y2k = date(2000, month, day)\n\n    @property\n    def year(self):\n        \"\"\"\n        :return:\n            The integer 0\n        \"\"\"\n\n        return 0\n\n    @property\n    def month(self):\n        \"\"\"\n        :return:\n            An integer from 1 to 12\n        \"\"\"\n\n        return self._y2k.month\n\n    @property\n    def day(self):\n        \"\"\"\n        :return:\n            An integer from 1 to 31\n        \"\"\"\n\n        return self._y2k.day\n\n    def strftime(self, format):\n        \"\"\"\n        Formats the date using strftime()\n\n        :param format:\n            A strftime() format string\n\n        :return:\n            A str, the formatted date as a unicode string\n            in Python 3 and a byte string in Python 2\n        \"\"\"\n\n        # Format the date twice, once with year 2000, once with year 4000.\n        # The only differences in the result will be in the millennium. Find them and replace by zeros.\n        y2k = self._y2k.strftime(format)\n        y4k = self._y2k.replace(year=4000).strftime(format)\n        return ''.join('0' if (c2, c4) == ('2', '4') else c2 for c2, c4 in zip(y2k, y4k))\n\n    def isoformat(self):\n        \"\"\"\n        Formats the date as %Y-%m-%d\n\n        :return:\n            The date formatted to %Y-%m-%d as a unicode string in Python 3\n            and a byte string in Python 2\n        \"\"\"\n\n        return self.strftime('0000-%m-%d')\n\n    def replace(self, year=None, month=None, day=None):\n        \"\"\"\n        Returns a new datetime.date or asn1crypto.util.extended_date\n        object with the specified components replaced\n\n        :return:\n            A datetime.date or asn1crypto.util.extended_date object\n        \"\"\"\n\n        if year is None:\n            year = self.year\n        if month is None:\n            month = self.month\n        if day is None:\n            day = self.day\n\n        if year > 0:\n            cls = date\n        else:\n            cls = extended_date\n\n        return cls(\n            year,\n            month,\n            day\n        )\n\n    def __str__(self):\n        \"\"\"\n        :return:\n            A str representing this extended_date, e.g. \"0000-01-01\"\n        \"\"\"\n\n        return self.strftime('%Y-%m-%d')\n\n    def __eq__(self, other):\n        \"\"\"\n        Compare two extended_date objects\n\n        :param other:\n            The other extended_date to compare to\n\n        :return:\n            A boolean\n        \"\"\"\n\n        # datetime.date object wouldn't compare equal because it can't be year 0\n        if not isinstance(other, self.__class__):\n            return False\n        return self.__cmp__(other) == 0\n\n    def __ne__(self, other):\n        \"\"\"\n        Compare two extended_date objects\n\n        :param other:\n            The other extended_date to compare to\n\n        :return:\n            A boolean\n        \"\"\"\n\n        return not self.__eq__(other)\n\n    def _comparison_error(self, other):\n        raise TypeError(unwrap(\n            '''\n            An asn1crypto.util.extended_date object can only be compared to\n            an asn1crypto.util.extended_date or datetime.date object, not %s\n            ''',\n            type_name(other)\n        ))\n\n    def __cmp__(self, other):\n        \"\"\"\n        Compare two extended_date or datetime.date objects\n\n        :param other:\n            The other extended_date object to compare to\n\n        :return:\n            An integer smaller than, equal to, or larger than 0\n        \"\"\"\n\n        # self is year 0, other is >= year 1\n        if isinstance(other, date):\n            return -1\n\n        if not isinstance(other, self.__class__):\n            self._comparison_error(other)\n\n        if self._y2k < other._y2k:\n            return -1\n        if self._y2k > other._y2k:\n            return 1\n        return 0\n\n    def __lt__(self, other):\n        return self.__cmp__(other) < 0\n\n    def __le__(self, other):\n        return self.__cmp__(other) <= 0\n\n    def __gt__(self, other):\n        return self.__cmp__(other) > 0\n\n    def __ge__(self, other):\n        return self.__cmp__(other) >= 0\n\n\nclass extended_datetime(object):\n    \"\"\"\n    A datetime.datetime-like object that represents the year 0. This is just\n    to handle 0000-01-01 found in some certificates. Python's datetime does\n    not support year 0.\n\n    The proleptic gregorian calendar repeats itself every 400 years. Therefore,\n    the simplest way to format is to substitute year 2000.\n    \"\"\"\n\n    # There are 97 leap days during 400 years.\n    DAYS_IN_400_YEARS = 400 * 365 + 97\n    DAYS_IN_2000_YEARS = 5 * DAYS_IN_400_YEARS\n\n    def __init__(self, year, *args, **kwargs):\n        \"\"\"\n        :param year:\n            The integer 0\n\n        :param args:\n            Other positional arguments; see datetime.datetime.\n\n        :param kwargs:\n            Other keyword arguments; see datetime.datetime.\n        \"\"\"\n\n        if year != 0:\n            raise ValueError('year must be 0')\n\n        self._y2k = datetime(2000, *args, **kwargs)\n\n    @property\n    def year(self):\n        \"\"\"\n        :return:\n            The integer 0\n        \"\"\"\n\n        return 0\n\n    @property\n    def month(self):\n        \"\"\"\n        :return:\n            An integer from 1 to 12\n        \"\"\"\n\n        return self._y2k.month\n\n    @property\n    def day(self):\n        \"\"\"\n        :return:\n            An integer from 1 to 31\n        \"\"\"\n\n        return self._y2k.day\n\n    @property\n    def hour(self):\n        \"\"\"\n        :return:\n            An integer from 1 to 24\n        \"\"\"\n\n        return self._y2k.hour\n\n    @property\n    def minute(self):\n        \"\"\"\n        :return:\n            An integer from 1 to 60\n        \"\"\"\n\n        return self._y2k.minute\n\n    @property\n    def second(self):\n        \"\"\"\n        :return:\n            An integer from 1 to 60\n        \"\"\"\n\n        return self._y2k.second\n\n    @property\n    def microsecond(self):\n        \"\"\"\n        :return:\n            An integer from 0 to 999999\n        \"\"\"\n\n        return self._y2k.microsecond\n\n    @property\n    def tzinfo(self):\n        \"\"\"\n        :return:\n            If object is timezone aware, a datetime.tzinfo object, else None.\n        \"\"\"\n\n        return self._y2k.tzinfo\n\n    def utcoffset(self):\n        \"\"\"\n        :return:\n            If object is timezone aware, a datetime.timedelta object, else None.\n        \"\"\"\n\n        return self._y2k.utcoffset()\n\n    def time(self):\n        \"\"\"\n        :return:\n            A datetime.time object\n        \"\"\"\n\n        return self._y2k.time()\n\n    def date(self):\n        \"\"\"\n        :return:\n            An asn1crypto.util.extended_date of the date\n        \"\"\"\n\n        return extended_date(0, self.month, self.day)\n\n    def strftime(self, format):\n        \"\"\"\n        Performs strftime(), always returning a str\n\n        :param format:\n            A strftime() format string\n\n        :return:\n            A str of the formatted datetime\n        \"\"\"\n\n        # Format the datetime twice, once with year 2000, once with year 4000.\n        # The only differences in the result will be in the millennium. Find them and replace by zeros.\n        y2k = self._y2k.strftime(format)\n        y4k = self._y2k.replace(year=4000).strftime(format)\n        return ''.join('0' if (c2, c4) == ('2', '4') else c2 for c2, c4 in zip(y2k, y4k))\n\n    def isoformat(self, sep='T'):\n        \"\"\"\n        Formats the date as \"%Y-%m-%d %H:%M:%S\" with the sep param between the\n        date and time portions\n\n        :param set:\n            A single character of the separator to place between the date and\n            time\n\n        :return:\n            The formatted datetime as a unicode string in Python 3 and a byte\n            string in Python 2\n        \"\"\"\n\n        s = '0000-%02d-%02d%c%02d:%02d:%02d' % (self.month, self.day, sep, self.hour, self.minute, self.second)\n        if self.microsecond:\n            s += '.%06d' % self.microsecond\n        return s + _format_offset(self.utcoffset())\n\n    def replace(self, year=None, *args, **kwargs):\n        \"\"\"\n        Returns a new datetime.datetime or asn1crypto.util.extended_datetime\n        object with the specified components replaced\n\n        :param year:\n            The new year to substitute. None to keep it.\n\n        :param args:\n            Other positional arguments; see datetime.datetime.replace.\n\n        :param kwargs:\n            Other keyword arguments; see datetime.datetime.replace.\n\n        :return:\n            A datetime.datetime or asn1crypto.util.extended_datetime object\n        \"\"\"\n\n        if year:\n            return self._y2k.replace(year, *args, **kwargs)\n\n        return extended_datetime.from_y2k(self._y2k.replace(2000, *args, **kwargs))\n\n    def astimezone(self, tz):\n        \"\"\"\n        Convert this extended_datetime to another timezone.\n\n        :param tz:\n            A datetime.tzinfo object.\n\n        :return:\n            A new extended_datetime or datetime.datetime object\n        \"\"\"\n\n        return extended_datetime.from_y2k(self._y2k.astimezone(tz))\n\n    def timestamp(self):\n        \"\"\"\n        Return POSIX timestamp. Only supported in python >= 3.3\n\n        :return:\n            A float representing the seconds since 1970-01-01 UTC. This will be a negative value.\n        \"\"\"\n\n        return self._y2k.timestamp() - self.DAYS_IN_2000_YEARS * 86400\n\n    def __str__(self):\n        \"\"\"\n        :return:\n            A str representing this extended_datetime, e.g. \"0000-01-01 00:00:00.000001-10:00\"\n        \"\"\"\n\n        return self.isoformat(sep=' ')\n\n    def __eq__(self, other):\n        \"\"\"\n        Compare two extended_datetime objects\n\n        :param other:\n            The other extended_datetime to compare to\n\n        :return:\n            A boolean\n        \"\"\"\n\n        # Only compare against other datetime or extended_datetime objects\n        if not isinstance(other, (self.__class__, datetime)):\n            return False\n\n        # Offset-naive and offset-aware datetimes are never the same\n        if (self.tzinfo is None) != (other.tzinfo is None):\n            return False\n\n        return self.__cmp__(other) == 0\n\n    def __ne__(self, other):\n        \"\"\"\n        Compare two extended_datetime objects\n\n        :param other:\n            The other extended_datetime to compare to\n\n        :return:\n            A boolean\n        \"\"\"\n\n        return not self.__eq__(other)\n\n    def _comparison_error(self, other):\n        \"\"\"\n        Raises a TypeError about the other object not being suitable for\n        comparison\n\n        :param other:\n            The object being compared to\n        \"\"\"\n\n        raise TypeError(unwrap(\n            '''\n            An asn1crypto.util.extended_datetime object can only be compared to\n            an asn1crypto.util.extended_datetime or datetime.datetime object,\n            not %s\n            ''',\n            type_name(other)\n        ))\n\n    def __cmp__(self, other):\n        \"\"\"\n        Compare two extended_datetime or datetime.datetime objects\n\n        :param other:\n            The other extended_datetime or datetime.datetime object to compare to\n\n        :return:\n            An integer smaller than, equal to, or larger than 0\n        \"\"\"\n\n        if not isinstance(other, (self.__class__, datetime)):\n            self._comparison_error(other)\n\n        if (self.tzinfo is None) != (other.tzinfo is None):\n            raise TypeError(\"can't compare offset-naive and offset-aware datetimes\")\n\n        diff = self - other\n        zero = timedelta(0)\n        if diff < zero:\n            return -1\n        if diff > zero:\n            return 1\n        return 0\n\n    def __lt__(self, other):\n        return self.__cmp__(other) < 0\n\n    def __le__(self, other):\n        return self.__cmp__(other) <= 0\n\n    def __gt__(self, other):\n        return self.__cmp__(other) > 0\n\n    def __ge__(self, other):\n        return self.__cmp__(other) >= 0\n\n    def __add__(self, other):\n        \"\"\"\n        Adds a timedelta\n\n        :param other:\n            A datetime.timedelta object to add.\n\n        :return:\n            A new extended_datetime or datetime.datetime object.\n        \"\"\"\n\n        return extended_datetime.from_y2k(self._y2k + other)\n\n    def __sub__(self, other):\n        \"\"\"\n        Subtracts a timedelta or another datetime.\n\n        :param other:\n            A datetime.timedelta or datetime.datetime or extended_datetime object to subtract.\n\n        :return:\n            If a timedelta is passed, a new extended_datetime or datetime.datetime object.\n            Else a datetime.timedelta object.\n        \"\"\"\n\n        if isinstance(other, timedelta):\n            return extended_datetime.from_y2k(self._y2k - other)\n\n        if isinstance(other, extended_datetime):\n            return self._y2k - other._y2k\n\n        if isinstance(other, datetime):\n            return self._y2k - other - timedelta(days=self.DAYS_IN_2000_YEARS)\n\n        return NotImplemented\n\n    def __rsub__(self, other):\n        return -(self - other)\n\n    @classmethod\n    def from_y2k(cls, value):\n        \"\"\"\n        Revert substitution of year 2000.\n\n        :param value:\n            A datetime.datetime object which is 2000 years in the future.\n        :return:\n            A new extended_datetime or datetime.datetime object.\n        \"\"\"\n\n        year = value.year - 2000\n\n        if year > 0:\n            new_cls = datetime\n        else:\n            new_cls = cls\n\n        return new_cls(\n            year,\n            value.month,\n            value.day,\n            value.hour,\n            value.minute,\n            value.second,\n            value.microsecond,\n            value.tzinfo\n        )\n"
  },
  {
    "path": "libs/asn1crypto/version.py",
    "content": "# coding: utf-8\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\n\n__version__ = '1.5.1'\n__version_info__ = (1, 5, 1)\n"
  },
  {
    "path": "libs/asn1crypto/x509.py",
    "content": "# coding: utf-8\n\n\"\"\"\nASN.1 type classes for X.509 certificates. Exports the following items:\n\n - Attributes()\n - Certificate()\n - Extensions()\n - GeneralName()\n - GeneralNames()\n - Name()\n\nOther type classes are defined that help compose the types listed above.\n\"\"\"\n\nfrom __future__ import unicode_literals, division, absolute_import, print_function\n\nfrom contextlib import contextmanager\nfrom encodings import idna  # noqa\nimport hashlib\nimport re\nimport socket\nimport stringprep\nimport sys\nimport unicodedata\n\nfrom ._errors import unwrap\nfrom ._iri import iri_to_uri, uri_to_iri\nfrom ._ordereddict import OrderedDict\nfrom ._types import type_name, str_cls, bytes_to_list\nfrom .algos import AlgorithmIdentifier, AnyAlgorithmIdentifier, DigestAlgorithm, SignedDigestAlgorithm\nfrom .core import (\n    Any,\n    BitString,\n    BMPString,\n    Boolean,\n    Choice,\n    Concat,\n    Enumerated,\n    GeneralizedTime,\n    GeneralString,\n    IA5String,\n    Integer,\n    Null,\n    NumericString,\n    ObjectIdentifier,\n    OctetBitString,\n    OctetString,\n    ParsableOctetString,\n    PrintableString,\n    Sequence,\n    SequenceOf,\n    Set,\n    SetOf,\n    TeletexString,\n    UniversalString,\n    UTCTime,\n    UTF8String,\n    VisibleString,\n    VOID,\n)\nfrom .keys import PublicKeyInfo\nfrom .util import int_to_bytes, int_from_bytes, inet_ntop, inet_pton\n\n\n# The structures in this file are taken from https://tools.ietf.org/html/rfc5280\n# and a few other supplementary sources, mostly due to extra supported\n# extension and name OIDs\n\n\nclass DNSName(IA5String):\n\n    _encoding = 'idna'\n    _bad_tag = (12, 19)\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.2\n\n        :param other:\n            Another DNSName object\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, DNSName):\n            return False\n\n        return self.__unicode__().lower() == other.__unicode__().lower()\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the DNS name\n\n        :param value:\n            A unicode string\n        \"\"\"\n\n        if not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a unicode string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        if value.startswith('.'):\n            encoded_value = b'.' + value[1:].encode(self._encoding)\n        else:\n            encoded_value = value.encode(self._encoding)\n\n        self._unicode = value\n        self.contents = encoded_value\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n\nclass URI(IA5String):\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the string\n\n        :param value:\n            A unicode string\n        \"\"\"\n\n        if not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a unicode string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        self._unicode = value\n        self.contents = iri_to_uri(value)\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.4\n\n        :param other:\n            Another URI object\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, URI):\n            return False\n\n        return iri_to_uri(self.native, True) == iri_to_uri(other.native, True)\n\n    def __unicode__(self):\n        \"\"\"\n        :return:\n            A unicode string\n        \"\"\"\n\n        if self.contents is None:\n            return ''\n        if self._unicode is None:\n            self._unicode = uri_to_iri(self._merge_chunks())\n        return self._unicode\n\n\nclass EmailAddress(IA5String):\n\n    _contents = None\n\n    # If the value has gone through the .set() method, thus normalizing it\n    _normalized = False\n\n    # In the wild we've seen this encoded as a UTF8String and PrintableString\n    _bad_tag = (12, 19)\n\n    @property\n    def contents(self):\n        \"\"\"\n        :return:\n            A byte string of the DER-encoded contents of the sequence\n        \"\"\"\n\n        return self._contents\n\n    @contents.setter\n    def contents(self, value):\n        \"\"\"\n        :param value:\n            A byte string of the DER-encoded contents of the sequence\n        \"\"\"\n\n        self._normalized = False\n        self._contents = value\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the string\n\n        :param value:\n            A unicode string\n        \"\"\"\n\n        if not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a unicode string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        if value.find('@') != -1:\n            mailbox, hostname = value.rsplit('@', 1)\n            encoded_value = mailbox.encode('ascii') + b'@' + hostname.encode('idna')\n        else:\n            encoded_value = value.encode('ascii')\n\n        self._normalized = True\n        self._unicode = value\n        self.contents = encoded_value\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    def __unicode__(self):\n        \"\"\"\n        :return:\n            A unicode string\n        \"\"\"\n\n        # We've seen this in the wild as a PrintableString, and since ascii is a\n        # subset of cp1252, we use the later for decoding to be more user friendly\n        if self._unicode is None:\n            contents = self._merge_chunks()\n            if contents.find(b'@') == -1:\n                self._unicode = contents.decode('cp1252')\n            else:\n                mailbox, hostname = contents.rsplit(b'@', 1)\n                self._unicode = mailbox.decode('cp1252') + '@' + hostname.decode('idna')\n        return self._unicode\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.5\n\n        :param other:\n            Another EmailAddress object\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, EmailAddress):\n            return False\n\n        if not self._normalized:\n            self.set(self.native)\n        if not other._normalized:\n            other.set(other.native)\n\n        if self._contents.find(b'@') == -1 or other._contents.find(b'@') == -1:\n            return self._contents == other._contents\n\n        other_mailbox, other_hostname = other._contents.rsplit(b'@', 1)\n        mailbox, hostname = self._contents.rsplit(b'@', 1)\n\n        if mailbox != other_mailbox:\n            return False\n\n        if hostname.lower() != other_hostname.lower():\n            return False\n\n        return True\n\n\nclass IPAddress(OctetString):\n    def parse(self, spec=None, spec_params=None):\n        \"\"\"\n        This method is not applicable to IP addresses\n        \"\"\"\n\n        raise ValueError(unwrap(\n            '''\n            IP address values can not be parsed\n            '''\n        ))\n\n    def set(self, value):\n        \"\"\"\n        Sets the value of the object\n\n        :param value:\n            A unicode string containing an IPv4 address, IPv4 address with CIDR,\n            an IPv6 address or IPv6 address with CIDR\n        \"\"\"\n\n        if not isinstance(value, str_cls):\n            raise TypeError(unwrap(\n                '''\n                %s value must be a unicode string, not %s\n                ''',\n                type_name(self),\n                type_name(value)\n            ))\n\n        original_value = value\n\n        has_cidr = value.find('/') != -1\n        cidr = 0\n        if has_cidr:\n            parts = value.split('/', 1)\n            value = parts[0]\n            cidr = int(parts[1])\n            if cidr < 0:\n                raise ValueError(unwrap(\n                    '''\n                    %s value contains a CIDR range less than 0\n                    ''',\n                    type_name(self)\n                ))\n\n        if value.find(':') != -1:\n            family = socket.AF_INET6\n            if cidr > 128:\n                raise ValueError(unwrap(\n                    '''\n                    %s value contains a CIDR range bigger than 128, the maximum\n                    value for an IPv6 address\n                    ''',\n                    type_name(self)\n                ))\n            cidr_size = 128\n        else:\n            family = socket.AF_INET\n            if cidr > 32:\n                raise ValueError(unwrap(\n                    '''\n                    %s value contains a CIDR range bigger than 32, the maximum\n                    value for an IPv4 address\n                    ''',\n                    type_name(self)\n                ))\n            cidr_size = 32\n\n        cidr_bytes = b''\n        if has_cidr:\n            cidr_mask = '1' * cidr\n            cidr_mask += '0' * (cidr_size - len(cidr_mask))\n            cidr_bytes = int_to_bytes(int(cidr_mask, 2))\n            cidr_bytes = (b'\\x00' * ((cidr_size // 8) - len(cidr_bytes))) + cidr_bytes\n\n        self._native = original_value\n        self.contents = inet_pton(family, value) + cidr_bytes\n        self._bytes = self.contents\n        self._header = None\n        if self._trailer != b'':\n            self._trailer = b''\n\n    @property\n    def native(self):\n        \"\"\"\n        The native Python datatype representation of this value\n\n        :return:\n            A unicode string or None\n        \"\"\"\n\n        if self.contents is None:\n            return None\n\n        if self._native is None:\n            byte_string = self.__bytes__()\n            byte_len = len(byte_string)\n            value = None\n            cidr_int = None\n            if byte_len in set([32, 16]):\n                value = inet_ntop(socket.AF_INET6, byte_string[0:16])\n                if byte_len > 16:\n                    cidr_int = int_from_bytes(byte_string[16:])\n            elif byte_len in set([8, 4]):\n                value = inet_ntop(socket.AF_INET, byte_string[0:4])\n                if byte_len > 4:\n                    cidr_int = int_from_bytes(byte_string[4:])\n            if cidr_int is not None:\n                cidr_bits = '{0:b}'.format(cidr_int)\n                cidr = len(cidr_bits.rstrip('0'))\n                value = value + '/' + str_cls(cidr)\n            self._native = value\n        return self._native\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        :param other:\n            Another IPAddress object\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, IPAddress):\n            return False\n\n        return self.__bytes__() == other.__bytes__()\n\n\nclass Attribute(Sequence):\n    _fields = [\n        ('type', ObjectIdentifier),\n        ('values', SetOf, {'spec': Any}),\n    ]\n\n\nclass Attributes(SequenceOf):\n    _child_spec = Attribute\n\n\nclass KeyUsage(BitString):\n    _map = {\n        0: 'digital_signature',\n        1: 'non_repudiation',\n        2: 'key_encipherment',\n        3: 'data_encipherment',\n        4: 'key_agreement',\n        5: 'key_cert_sign',\n        6: 'crl_sign',\n        7: 'encipher_only',\n        8: 'decipher_only',\n    }\n\n\nclass PrivateKeyUsagePeriod(Sequence):\n    _fields = [\n        ('not_before', GeneralizedTime, {'implicit': 0, 'optional': True}),\n        ('not_after', GeneralizedTime, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass NotReallyTeletexString(TeletexString):\n    \"\"\"\n    OpenSSL (and probably some other libraries) puts ISO-8859-1\n    into TeletexString instead of ITU T.61. We use Windows-1252 when\n    decoding since it is a superset of ISO-8859-1, and less likely to\n    cause encoding issues, but we stay strict with encoding to prevent\n    us from creating bad data.\n    \"\"\"\n\n    _decoding_encoding = 'cp1252'\n\n    def __unicode__(self):\n        \"\"\"\n        :return:\n            A unicode string\n        \"\"\"\n\n        if self.contents is None:\n            return ''\n        if self._unicode is None:\n            self._unicode = self._merge_chunks().decode(self._decoding_encoding)\n        return self._unicode\n\n\n@contextmanager\ndef strict_teletex():\n    try:\n        NotReallyTeletexString._decoding_encoding = 'teletex'\n        yield\n    finally:\n        NotReallyTeletexString._decoding_encoding = 'cp1252'\n\n\nclass DirectoryString(Choice):\n    _alternatives = [\n        ('teletex_string', NotReallyTeletexString),\n        ('printable_string', PrintableString),\n        ('universal_string', UniversalString),\n        ('utf8_string', UTF8String),\n        ('bmp_string', BMPString),\n        # This is an invalid/bad alternative, but some broken certs use it\n        ('ia5_string', IA5String),\n    ]\n\n\nclass NameType(ObjectIdentifier):\n    _map = {\n        '2.5.4.3': 'common_name',\n        '2.5.4.4': 'surname',\n        '2.5.4.5': 'serial_number',\n        '2.5.4.6': 'country_name',\n        '2.5.4.7': 'locality_name',\n        '2.5.4.8': 'state_or_province_name',\n        '2.5.4.9': 'street_address',\n        '2.5.4.10': 'organization_name',\n        '2.5.4.11': 'organizational_unit_name',\n        '2.5.4.12': 'title',\n        '2.5.4.15': 'business_category',\n        '2.5.4.17': 'postal_code',\n        '2.5.4.20': 'telephone_number',\n        '2.5.4.41': 'name',\n        '2.5.4.42': 'given_name',\n        '2.5.4.43': 'initials',\n        '2.5.4.44': 'generation_qualifier',\n        '2.5.4.45': 'unique_identifier',\n        '2.5.4.46': 'dn_qualifier',\n        '2.5.4.65': 'pseudonym',\n        '2.5.4.97': 'organization_identifier',\n        # https://www.trustedcomputinggroup.org/wp-content/uploads/Credential_Profile_EK_V2.0_R14_published.pdf\n        '2.23.133.2.1': 'tpm_manufacturer',\n        '2.23.133.2.2': 'tpm_model',\n        '2.23.133.2.3': 'tpm_version',\n        '2.23.133.2.4': 'platform_manufacturer',\n        '2.23.133.2.5': 'platform_model',\n        '2.23.133.2.6': 'platform_version',\n        # https://tools.ietf.org/html/rfc2985#page-26\n        '1.2.840.113549.1.9.1': 'email_address',\n        # Page 10 of https://cabforum.org/wp-content/uploads/EV-V1_5_5.pdf\n        '1.3.6.1.4.1.311.60.2.1.1': 'incorporation_locality',\n        '1.3.6.1.4.1.311.60.2.1.2': 'incorporation_state_or_province',\n        '1.3.6.1.4.1.311.60.2.1.3': 'incorporation_country',\n        # https://tools.ietf.org/html/rfc4519#section-2.39\n        '0.9.2342.19200300.100.1.1': 'user_id',\n        # https://tools.ietf.org/html/rfc2247#section-4\n        '0.9.2342.19200300.100.1.25': 'domain_component',\n        # http://www.alvestrand.no/objectid/0.2.262.1.10.7.20.html\n        '0.2.262.1.10.7.20': 'name_distinguisher',\n    }\n\n    # This order is largely based on observed order seen in EV certs from\n    # Symantec and DigiCert. Some of the uncommon name-related fields are\n    # just placed in what seems like a reasonable order.\n    preferred_order = [\n        'incorporation_country',\n        'incorporation_state_or_province',\n        'incorporation_locality',\n        'business_category',\n        'serial_number',\n        'country_name',\n        'postal_code',\n        'state_or_province_name',\n        'locality_name',\n        'street_address',\n        'organization_name',\n        'organizational_unit_name',\n        'title',\n        'common_name',\n        'user_id',\n        'initials',\n        'generation_qualifier',\n        'surname',\n        'given_name',\n        'name',\n        'pseudonym',\n        'dn_qualifier',\n        'telephone_number',\n        'email_address',\n        'domain_component',\n        'name_distinguisher',\n        'organization_identifier',\n        'tpm_manufacturer',\n        'tpm_model',\n        'tpm_version',\n        'platform_manufacturer',\n        'platform_model',\n        'platform_version',\n    ]\n\n    @classmethod\n    def preferred_ordinal(cls, attr_name):\n        \"\"\"\n        Returns an ordering value for a particular attribute key.\n\n        Unrecognized attributes and OIDs will be sorted lexically at the end.\n\n        :return:\n            An orderable value.\n\n        \"\"\"\n\n        attr_name = cls.map(attr_name)\n        if attr_name in cls.preferred_order:\n            ordinal = cls.preferred_order.index(attr_name)\n        else:\n            ordinal = len(cls.preferred_order)\n\n        return (ordinal, attr_name)\n\n    @property\n    def human_friendly(self):\n        \"\"\"\n        :return:\n            A human-friendly unicode string to display to users\n        \"\"\"\n\n        return {\n            'common_name': 'Common Name',\n            'surname': 'Surname',\n            'serial_number': 'Serial Number',\n            'country_name': 'Country',\n            'locality_name': 'Locality',\n            'state_or_province_name': 'State/Province',\n            'street_address': 'Street Address',\n            'organization_name': 'Organization',\n            'organizational_unit_name': 'Organizational Unit',\n            'title': 'Title',\n            'business_category': 'Business Category',\n            'postal_code': 'Postal Code',\n            'telephone_number': 'Telephone Number',\n            'name': 'Name',\n            'given_name': 'Given Name',\n            'initials': 'Initials',\n            'generation_qualifier': 'Generation Qualifier',\n            'unique_identifier': 'Unique Identifier',\n            'dn_qualifier': 'DN Qualifier',\n            'pseudonym': 'Pseudonym',\n            'email_address': 'Email Address',\n            'incorporation_locality': 'Incorporation Locality',\n            'incorporation_state_or_province': 'Incorporation State/Province',\n            'incorporation_country': 'Incorporation Country',\n            'domain_component': 'Domain Component',\n            'name_distinguisher': 'Name Distinguisher',\n            'organization_identifier': 'Organization Identifier',\n            'tpm_manufacturer': 'TPM Manufacturer',\n            'tpm_model': 'TPM Model',\n            'tpm_version': 'TPM Version',\n            'platform_manufacturer': 'Platform Manufacturer',\n            'platform_model': 'Platform Model',\n            'platform_version': 'Platform Version',\n            'user_id': 'User ID',\n        }.get(self.native, self.native)\n\n\nclass NameTypeAndValue(Sequence):\n    _fields = [\n        ('type', NameType),\n        ('value', Any),\n    ]\n\n    _oid_pair = ('type', 'value')\n    _oid_specs = {\n        'common_name': DirectoryString,\n        'surname': DirectoryString,\n        'serial_number': DirectoryString,\n        'country_name': DirectoryString,\n        'locality_name': DirectoryString,\n        'state_or_province_name': DirectoryString,\n        'street_address': DirectoryString,\n        'organization_name': DirectoryString,\n        'organizational_unit_name': DirectoryString,\n        'title': DirectoryString,\n        'business_category': DirectoryString,\n        'postal_code': DirectoryString,\n        'telephone_number': PrintableString,\n        'name': DirectoryString,\n        'given_name': DirectoryString,\n        'initials': DirectoryString,\n        'generation_qualifier': DirectoryString,\n        'unique_identifier': OctetBitString,\n        'dn_qualifier': DirectoryString,\n        'pseudonym': DirectoryString,\n        # https://tools.ietf.org/html/rfc2985#page-26\n        'email_address': EmailAddress,\n        # Page 10 of https://cabforum.org/wp-content/uploads/EV-V1_5_5.pdf\n        'incorporation_locality': DirectoryString,\n        'incorporation_state_or_province': DirectoryString,\n        'incorporation_country': DirectoryString,\n        'domain_component': DNSName,\n        'name_distinguisher': DirectoryString,\n        'organization_identifier': DirectoryString,\n        'tpm_manufacturer': UTF8String,\n        'tpm_model': UTF8String,\n        'tpm_version': UTF8String,\n        'platform_manufacturer': UTF8String,\n        'platform_model': UTF8String,\n        'platform_version': UTF8String,\n        'user_id': DirectoryString,\n    }\n\n    _prepped = None\n\n    @property\n    def prepped_value(self):\n        \"\"\"\n        Returns the value after being processed by the internationalized string\n        preparation as specified by RFC 5280\n\n        :return:\n            A unicode string\n        \"\"\"\n\n        if self._prepped is None:\n            self._prepped = self._ldap_string_prep(self['value'].native)\n        return self._prepped\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1\n\n        :param other:\n            Another NameTypeAndValue object\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, NameTypeAndValue):\n            return False\n\n        if other['type'].native != self['type'].native:\n            return False\n\n        return other.prepped_value == self.prepped_value\n\n    def _ldap_string_prep(self, string):\n        \"\"\"\n        Implements the internationalized string preparation algorithm from\n        RFC 4518. https://tools.ietf.org/html/rfc4518#section-2\n\n        :param string:\n            A unicode string to prepare\n\n        :return:\n            A prepared unicode string, ready for comparison\n        \"\"\"\n\n        # Map step\n        string = re.sub('[\\u00ad\\u1806\\u034f\\u180b-\\u180d\\ufe0f-\\uff00\\ufffc]+', '', string)\n        string = re.sub('[\\u0009\\u000a\\u000b\\u000c\\u000d\\u0085]', ' ', string)\n        if sys.maxunicode == 0xffff:\n            # Some installs of Python 2.7 don't support 8-digit unicode escape\n            # ranges, so we have to break them into pieces\n            # Original was: \\U0001D173-\\U0001D17A and \\U000E0020-\\U000E007F\n            string = re.sub('\\ud834[\\udd73-\\udd7a]|\\udb40[\\udc20-\\udc7f]|\\U000e0001', '', string)\n        else:\n            string = re.sub('[\\U0001D173-\\U0001D17A\\U000E0020-\\U000E007F\\U000e0001]', '', string)\n        string = re.sub(\n            '[\\u0000-\\u0008\\u000e-\\u001f\\u007f-\\u0084\\u0086-\\u009f\\u06dd\\u070f\\u180e\\u200c-\\u200f'\n            '\\u202a-\\u202e\\u2060-\\u2063\\u206a-\\u206f\\ufeff\\ufff9-\\ufffb]+',\n            '',\n            string\n        )\n        string = string.replace('\\u200b', '')\n        string = re.sub('[\\u00a0\\u1680\\u2000-\\u200a\\u2028-\\u2029\\u202f\\u205f\\u3000]', ' ', string)\n\n        string = ''.join(map(stringprep.map_table_b2, string))\n\n        # Normalize step\n        string = unicodedata.normalize('NFKC', string)\n\n        # Prohibit step\n        for char in string:\n            if stringprep.in_table_a1(char):\n                raise ValueError(unwrap(\n                    '''\n                    X.509 Name objects may not contain unassigned code points\n                    '''\n                ))\n\n            if stringprep.in_table_c8(char):\n                raise ValueError(unwrap(\n                    '''\n                    X.509 Name objects may not contain change display or\n                    zzzzdeprecated characters\n                    '''\n                ))\n\n            if stringprep.in_table_c3(char):\n                raise ValueError(unwrap(\n                    '''\n                    X.509 Name objects may not contain private use characters\n                    '''\n                ))\n\n            if stringprep.in_table_c4(char):\n                raise ValueError(unwrap(\n                    '''\n                    X.509 Name objects may not contain non-character code points\n                    '''\n                ))\n\n            if stringprep.in_table_c5(char):\n                raise ValueError(unwrap(\n                    '''\n                    X.509 Name objects may not contain surrogate code points\n                    '''\n                ))\n\n            if char == '\\ufffd':\n                raise ValueError(unwrap(\n                    '''\n                    X.509 Name objects may not contain the replacement character\n                    '''\n                ))\n\n        # Check bidirectional step - here we ensure that we are not mixing\n        # left-to-right and right-to-left text in the string\n        has_r_and_al_cat = False\n        has_l_cat = False\n        for char in string:\n            if stringprep.in_table_d1(char):\n                has_r_and_al_cat = True\n            elif stringprep.in_table_d2(char):\n                has_l_cat = True\n\n        if has_r_and_al_cat:\n            first_is_r_and_al = stringprep.in_table_d1(string[0])\n            last_is_r_and_al = stringprep.in_table_d1(string[-1])\n\n            if has_l_cat or not first_is_r_and_al or not last_is_r_and_al:\n                raise ValueError(unwrap(\n                    '''\n                    X.509 Name object contains a malformed bidirectional\n                    sequence\n                    '''\n                ))\n\n        # Insignificant space handling step\n        string = ' ' + re.sub(' +', '  ', string).strip() + ' '\n\n        return string\n\n\nclass RelativeDistinguishedName(SetOf):\n    _child_spec = NameTypeAndValue\n\n    @property\n    def hashable(self):\n        \"\"\"\n        :return:\n            A unicode string that can be used as a dict key or in a set\n        \"\"\"\n\n        output = []\n        values = self._get_values(self)\n        for key in sorted(values.keys()):\n            output.append('%s: %s' % (key, values[key]))\n        # Unit separator is used here since the normalization process for\n        # values moves any such character, and the keys are all dotted integers\n        # or under_score_words\n        return '\\x1F'.join(output)\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1\n\n        :param other:\n            Another RelativeDistinguishedName object\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, RelativeDistinguishedName):\n            return False\n\n        if len(self) != len(other):\n            return False\n\n        self_types = self._get_types(self)\n        other_types = self._get_types(other)\n\n        if self_types != other_types:\n            return False\n\n        self_values = self._get_values(self)\n        other_values = self._get_values(other)\n\n        for type_name_ in self_types:\n            if self_values[type_name_] != other_values[type_name_]:\n                return False\n\n        return True\n\n    def _get_types(self, rdn):\n        \"\"\"\n        Returns a set of types contained in an RDN\n\n        :param rdn:\n            A RelativeDistinguishedName object\n\n        :return:\n            A set object with unicode strings of NameTypeAndValue type field\n            values\n        \"\"\"\n\n        return set([ntv['type'].native for ntv in rdn])\n\n    def _get_values(self, rdn):\n        \"\"\"\n        Returns a dict of prepped values contained in an RDN\n\n        :param rdn:\n            A RelativeDistinguishedName object\n\n        :return:\n            A dict object with unicode strings of NameTypeAndValue value field\n            values that have been prepped for comparison\n        \"\"\"\n\n        output = {}\n        [output.update([(ntv['type'].native, ntv.prepped_value)]) for ntv in rdn]\n        return output\n\n\nclass RDNSequence(SequenceOf):\n    _child_spec = RelativeDistinguishedName\n\n    @property\n    def hashable(self):\n        \"\"\"\n        :return:\n            A unicode string that can be used as a dict key or in a set\n        \"\"\"\n\n        # Record separator is used here since the normalization process for\n        # values moves any such character, and the keys are all dotted integers\n        # or under_score_words\n        return '\\x1E'.join(rdn.hashable for rdn in self)\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1\n\n        :param other:\n            Another RDNSequence object\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, RDNSequence):\n            return False\n\n        if len(self) != len(other):\n            return False\n\n        for index, self_rdn in enumerate(self):\n            if other[index] != self_rdn:\n                return False\n\n        return True\n\n\nclass Name(Choice):\n    _alternatives = [\n        ('', RDNSequence),\n    ]\n\n    _human_friendly = None\n    _sha1 = None\n    _sha256 = None\n\n    @classmethod\n    def build(cls, name_dict, use_printable=False):\n        \"\"\"\n        Creates a Name object from a dict of unicode string keys and values.\n        The keys should be from NameType._map, or a dotted-integer OID unicode\n        string.\n\n        :param name_dict:\n            A dict of name information, e.g. {\"common_name\": \"Will Bond\",\n            \"country_name\": \"US\", \"organization_name\": \"Codex Non Sufficit LC\"}\n\n        :param use_printable:\n            A bool - if PrintableString should be used for encoding instead of\n            UTF8String. This is for backwards compatibility with old software.\n\n        :return:\n            An x509.Name object\n        \"\"\"\n\n        rdns = []\n        if not use_printable:\n            encoding_name = 'utf8_string'\n            encoding_class = UTF8String\n        else:\n            encoding_name = 'printable_string'\n            encoding_class = PrintableString\n\n        # Sort the attributes according to NameType.preferred_order\n        name_dict = OrderedDict(\n            sorted(\n                name_dict.items(),\n                key=lambda item: NameType.preferred_ordinal(item[0])\n            )\n        )\n\n        for attribute_name, attribute_value in name_dict.items():\n            attribute_name = NameType.map(attribute_name)\n            if attribute_name == 'email_address':\n                value = EmailAddress(attribute_value)\n            elif attribute_name == 'domain_component':\n                value = DNSName(attribute_value)\n            elif attribute_name in set(['dn_qualifier', 'country_name', 'serial_number']):\n                value = DirectoryString(\n                    name='printable_string',\n                    value=PrintableString(attribute_value)\n                )\n            else:\n                value = DirectoryString(\n                    name=encoding_name,\n                    value=encoding_class(attribute_value)\n                )\n\n            rdns.append(RelativeDistinguishedName([\n                NameTypeAndValue({\n                    'type': attribute_name,\n                    'value': value\n                })\n            ]))\n\n        return cls(name='', value=RDNSequence(rdns))\n\n    @property\n    def hashable(self):\n        \"\"\"\n        :return:\n            A unicode string that can be used as a dict key or in a set\n        \"\"\"\n\n        return self.chosen.hashable\n\n    def __len__(self):\n        return len(self.chosen)\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1\n\n        :param other:\n            Another Name object\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if not isinstance(other, Name):\n            return False\n        return self.chosen == other.chosen\n\n    @property\n    def native(self):\n        if self._native is None:\n            self._native = OrderedDict()\n            for rdn in self.chosen.native:\n                for type_val in rdn:\n                    field_name = type_val['type']\n                    if field_name in self._native:\n                        existing = self._native[field_name]\n                        if not isinstance(existing, list):\n                            existing = self._native[field_name] = [existing]\n                        existing.append(type_val['value'])\n                    else:\n                        self._native[field_name] = type_val['value']\n        return self._native\n\n    @property\n    def human_friendly(self):\n        \"\"\"\n        :return:\n            A human-friendly unicode string containing the parts of the name\n        \"\"\"\n\n        if self._human_friendly is None:\n            data = OrderedDict()\n            last_field = None\n            for rdn in self.chosen:\n                for type_val in rdn:\n                    field_name = type_val['type'].human_friendly\n                    last_field = field_name\n                    if field_name in data:\n                        data[field_name] = [data[field_name]]\n                        data[field_name].append(type_val['value'])\n                    else:\n                        data[field_name] = type_val['value']\n            to_join = []\n            keys = data.keys()\n            if last_field == 'Country':\n                keys = reversed(list(keys))\n            for key in keys:\n                value = data[key]\n                native_value = self._recursive_humanize(value)\n                to_join.append('%s: %s' % (key, native_value))\n\n            has_comma = False\n            for element in to_join:\n                if element.find(',') != -1:\n                    has_comma = True\n                    break\n\n            separator = ', ' if not has_comma else '; '\n            self._human_friendly = separator.join(to_join[::-1])\n\n        return self._human_friendly\n\n    def _recursive_humanize(self, value):\n        \"\"\"\n        Recursively serializes data compiled from the RDNSequence\n\n        :param value:\n            An Asn1Value object, or a list of Asn1Value objects\n\n        :return:\n            A unicode string\n        \"\"\"\n\n        if isinstance(value, list):\n            return ', '.join(\n                reversed([self._recursive_humanize(sub_value) for sub_value in value])\n            )\n        return value.native\n\n    @property\n    def sha1(self):\n        \"\"\"\n        :return:\n            The SHA1 hash of the DER-encoded bytes of this name\n        \"\"\"\n\n        if self._sha1 is None:\n            self._sha1 = hashlib.sha1(self.dump()).digest()\n        return self._sha1\n\n    @property\n    def sha256(self):\n        \"\"\"\n        :return:\n            The SHA-256 hash of the DER-encoded bytes of this name\n        \"\"\"\n\n        if self._sha256 is None:\n            self._sha256 = hashlib.sha256(self.dump()).digest()\n        return self._sha256\n\n\nclass AnotherName(Sequence):\n    _fields = [\n        ('type_id', ObjectIdentifier),\n        ('value', Any, {'explicit': 0}),\n    ]\n\n\nclass CountryName(Choice):\n    class_ = 1\n    tag = 1\n\n    _alternatives = [\n        ('x121_dcc_code', NumericString),\n        ('iso_3166_alpha2_code', PrintableString),\n    ]\n\n\nclass AdministrationDomainName(Choice):\n    class_ = 1\n    tag = 2\n\n    _alternatives = [\n        ('numeric', NumericString),\n        ('printable', PrintableString),\n    ]\n\n\nclass PrivateDomainName(Choice):\n    _alternatives = [\n        ('numeric', NumericString),\n        ('printable', PrintableString),\n    ]\n\n\nclass PersonalName(Set):\n    _fields = [\n        ('surname', PrintableString, {'implicit': 0}),\n        ('given_name', PrintableString, {'implicit': 1, 'optional': True}),\n        ('initials', PrintableString, {'implicit': 2, 'optional': True}),\n        ('generation_qualifier', PrintableString, {'implicit': 3, 'optional': True}),\n    ]\n\n\nclass TeletexPersonalName(Set):\n    _fields = [\n        ('surname', TeletexString, {'implicit': 0}),\n        ('given_name', TeletexString, {'implicit': 1, 'optional': True}),\n        ('initials', TeletexString, {'implicit': 2, 'optional': True}),\n        ('generation_qualifier', TeletexString, {'implicit': 3, 'optional': True}),\n    ]\n\n\nclass OrganizationalUnitNames(SequenceOf):\n    _child_spec = PrintableString\n\n\nclass TeletexOrganizationalUnitNames(SequenceOf):\n    _child_spec = TeletexString\n\n\nclass BuiltInStandardAttributes(Sequence):\n    _fields = [\n        ('country_name', CountryName, {'optional': True}),\n        ('administration_domain_name', AdministrationDomainName, {'optional': True}),\n        ('network_address', NumericString, {'implicit': 0, 'optional': True}),\n        ('terminal_identifier', PrintableString, {'implicit': 1, 'optional': True}),\n        ('private_domain_name', PrivateDomainName, {'explicit': 2, 'optional': True}),\n        ('organization_name', PrintableString, {'implicit': 3, 'optional': True}),\n        ('numeric_user_identifier', NumericString, {'implicit': 4, 'optional': True}),\n        ('personal_name', PersonalName, {'implicit': 5, 'optional': True}),\n        ('organizational_unit_names', OrganizationalUnitNames, {'implicit': 6, 'optional': True}),\n    ]\n\n\nclass BuiltInDomainDefinedAttribute(Sequence):\n    _fields = [\n        ('type', PrintableString),\n        ('value', PrintableString),\n    ]\n\n\nclass BuiltInDomainDefinedAttributes(SequenceOf):\n    _child_spec = BuiltInDomainDefinedAttribute\n\n\nclass TeletexDomainDefinedAttribute(Sequence):\n    _fields = [\n        ('type', TeletexString),\n        ('value', TeletexString),\n    ]\n\n\nclass TeletexDomainDefinedAttributes(SequenceOf):\n    _child_spec = TeletexDomainDefinedAttribute\n\n\nclass PhysicalDeliveryCountryName(Choice):\n    _alternatives = [\n        ('x121_dcc_code', NumericString),\n        ('iso_3166_alpha2_code', PrintableString),\n    ]\n\n\nclass PostalCode(Choice):\n    _alternatives = [\n        ('numeric_code', NumericString),\n        ('printable_code', PrintableString),\n    ]\n\n\nclass PDSParameter(Set):\n    _fields = [\n        ('printable_string', PrintableString, {'optional': True}),\n        ('teletex_string', TeletexString, {'optional': True}),\n    ]\n\n\nclass PrintableAddress(SequenceOf):\n    _child_spec = PrintableString\n\n\nclass UnformattedPostalAddress(Set):\n    _fields = [\n        ('printable_address', PrintableAddress, {'optional': True}),\n        ('teletex_string', TeletexString, {'optional': True}),\n    ]\n\n\nclass E1634Address(Sequence):\n    _fields = [\n        ('number', NumericString, {'implicit': 0}),\n        ('sub_address', NumericString, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass NAddresses(SetOf):\n    _child_spec = OctetString\n\n\nclass PresentationAddress(Sequence):\n    _fields = [\n        ('p_selector', OctetString, {'explicit': 0, 'optional': True}),\n        ('s_selector', OctetString, {'explicit': 1, 'optional': True}),\n        ('t_selector', OctetString, {'explicit': 2, 'optional': True}),\n        ('n_addresses', NAddresses, {'explicit': 3}),\n    ]\n\n\nclass ExtendedNetworkAddress(Choice):\n    _alternatives = [\n        ('e163_4_address', E1634Address),\n        ('psap_address', PresentationAddress, {'implicit': 0})\n    ]\n\n\nclass TerminalType(Integer):\n    _map = {\n        3: 'telex',\n        4: 'teletex',\n        5: 'g3_facsimile',\n        6: 'g4_facsimile',\n        7: 'ia5_terminal',\n        8: 'videotex',\n    }\n\n\nclass ExtensionAttributeType(Integer):\n    _map = {\n        1: 'common_name',\n        2: 'teletex_common_name',\n        3: 'teletex_organization_name',\n        4: 'teletex_personal_name',\n        5: 'teletex_organization_unit_names',\n        6: 'teletex_domain_defined_attributes',\n        7: 'pds_name',\n        8: 'physical_delivery_country_name',\n        9: 'postal_code',\n        10: 'physical_delivery_office_name',\n        11: 'physical_delivery_office_number',\n        12: 'extension_of_address_components',\n        13: 'physical_delivery_personal_name',\n        14: 'physical_delivery_organization_name',\n        15: 'extension_physical_delivery_address_components',\n        16: 'unformatted_postal_address',\n        17: 'street_address',\n        18: 'post_office_box_address',\n        19: 'poste_restante_address',\n        20: 'unique_postal_name',\n        21: 'local_postal_attributes',\n        22: 'extended_network_address',\n        23: 'terminal_type',\n    }\n\n\nclass ExtensionAttribute(Sequence):\n    _fields = [\n        ('extension_attribute_type', ExtensionAttributeType, {'implicit': 0}),\n        ('extension_attribute_value', Any, {'explicit': 1}),\n    ]\n\n    _oid_pair = ('extension_attribute_type', 'extension_attribute_value')\n    _oid_specs = {\n        'common_name': PrintableString,\n        'teletex_common_name': TeletexString,\n        'teletex_organization_name': TeletexString,\n        'teletex_personal_name': TeletexPersonalName,\n        'teletex_organization_unit_names': TeletexOrganizationalUnitNames,\n        'teletex_domain_defined_attributes': TeletexDomainDefinedAttributes,\n        'pds_name': PrintableString,\n        'physical_delivery_country_name': PhysicalDeliveryCountryName,\n        'postal_code': PostalCode,\n        'physical_delivery_office_name': PDSParameter,\n        'physical_delivery_office_number': PDSParameter,\n        'extension_of_address_components': PDSParameter,\n        'physical_delivery_personal_name': PDSParameter,\n        'physical_delivery_organization_name': PDSParameter,\n        'extension_physical_delivery_address_components': PDSParameter,\n        'unformatted_postal_address': UnformattedPostalAddress,\n        'street_address': PDSParameter,\n        'post_office_box_address': PDSParameter,\n        'poste_restante_address': PDSParameter,\n        'unique_postal_name': PDSParameter,\n        'local_postal_attributes': PDSParameter,\n        'extended_network_address': ExtendedNetworkAddress,\n        'terminal_type': TerminalType,\n    }\n\n\nclass ExtensionAttributes(SequenceOf):\n    _child_spec = ExtensionAttribute\n\n\nclass ORAddress(Sequence):\n    _fields = [\n        ('built_in_standard_attributes', BuiltInStandardAttributes),\n        ('built_in_domain_defined_attributes', BuiltInDomainDefinedAttributes, {'optional': True}),\n        ('extension_attributes', ExtensionAttributes, {'optional': True}),\n    ]\n\n\nclass EDIPartyName(Sequence):\n    _fields = [\n        ('name_assigner', DirectoryString, {'implicit': 0, 'optional': True}),\n        ('party_name', DirectoryString, {'implicit': 1}),\n    ]\n\n\nclass GeneralName(Choice):\n    _alternatives = [\n        ('other_name', AnotherName, {'implicit': 0}),\n        ('rfc822_name', EmailAddress, {'implicit': 1}),\n        ('dns_name', DNSName, {'implicit': 2}),\n        ('x400_address', ORAddress, {'implicit': 3}),\n        ('directory_name', Name, {'explicit': 4}),\n        ('edi_party_name', EDIPartyName, {'implicit': 5}),\n        ('uniform_resource_identifier', URI, {'implicit': 6}),\n        ('ip_address', IPAddress, {'implicit': 7}),\n        ('registered_id', ObjectIdentifier, {'implicit': 8}),\n    ]\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __eq__(self, other):\n        \"\"\"\n        Does not support other_name, x400_address or edi_party_name\n\n        :param other:\n            The other GeneralName to compare to\n\n        :return:\n            A boolean\n        \"\"\"\n\n        if self.name in ('other_name', 'x400_address', 'edi_party_name'):\n            raise ValueError(unwrap(\n                '''\n                Comparison is not supported for GeneralName objects of\n                choice %s\n                ''',\n                self.name\n            ))\n\n        if other.name in ('other_name', 'x400_address', 'edi_party_name'):\n            raise ValueError(unwrap(\n                '''\n                Comparison is not supported for GeneralName objects of choice\n                %s''',\n                other.name\n            ))\n\n        if self.name != other.name:\n            return False\n\n        return self.chosen == other.chosen\n\n\nclass GeneralNames(SequenceOf):\n    _child_spec = GeneralName\n\n\nclass Time(Choice):\n    _alternatives = [\n        ('utc_time', UTCTime),\n        ('general_time', GeneralizedTime),\n    ]\n\n\nclass Validity(Sequence):\n    _fields = [\n        ('not_before', Time),\n        ('not_after', Time),\n    ]\n\n\nclass BasicConstraints(Sequence):\n    _fields = [\n        ('ca', Boolean, {'default': False}),\n        ('path_len_constraint', Integer, {'optional': True}),\n    ]\n\n\nclass AuthorityKeyIdentifier(Sequence):\n    _fields = [\n        ('key_identifier', OctetString, {'implicit': 0, 'optional': True}),\n        ('authority_cert_issuer', GeneralNames, {'implicit': 1, 'optional': True}),\n        ('authority_cert_serial_number', Integer, {'implicit': 2, 'optional': True}),\n    ]\n\n\nclass DistributionPointName(Choice):\n    _alternatives = [\n        ('full_name', GeneralNames, {'implicit': 0}),\n        ('name_relative_to_crl_issuer', RelativeDistinguishedName, {'implicit': 1}),\n    ]\n\n\nclass ReasonFlags(BitString):\n    _map = {\n        0: 'unused',\n        1: 'key_compromise',\n        2: 'ca_compromise',\n        3: 'affiliation_changed',\n        4: 'superseded',\n        5: 'cessation_of_operation',\n        6: 'certificate_hold',\n        7: 'privilege_withdrawn',\n        8: 'aa_compromise',\n    }\n\n\nclass GeneralSubtree(Sequence):\n    _fields = [\n        ('base', GeneralName),\n        ('minimum', Integer, {'implicit': 0, 'default': 0}),\n        ('maximum', Integer, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass GeneralSubtrees(SequenceOf):\n    _child_spec = GeneralSubtree\n\n\nclass NameConstraints(Sequence):\n    _fields = [\n        ('permitted_subtrees', GeneralSubtrees, {'implicit': 0, 'optional': True}),\n        ('excluded_subtrees', GeneralSubtrees, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass DistributionPoint(Sequence):\n    _fields = [\n        ('distribution_point', DistributionPointName, {'explicit': 0, 'optional': True}),\n        ('reasons', ReasonFlags, {'implicit': 1, 'optional': True}),\n        ('crl_issuer', GeneralNames, {'implicit': 2, 'optional': True}),\n    ]\n\n    _url = False\n\n    @property\n    def url(self):\n        \"\"\"\n        :return:\n            None or a unicode string of the distribution point's URL\n        \"\"\"\n\n        if self._url is False:\n            self._url = None\n            name = self['distribution_point']\n            if name.name != 'full_name':\n                raise ValueError(unwrap(\n                    '''\n                    CRL distribution points that are relative to the issuer are\n                    not supported\n                    '''\n                ))\n\n            for general_name in name.chosen:\n                if general_name.name == 'uniform_resource_identifier':\n                    url = general_name.native\n                    if url.lower().startswith(('http://', 'https://', 'ldap://', 'ldaps://')):\n                        self._url = url\n                        break\n\n        return self._url\n\n\nclass CRLDistributionPoints(SequenceOf):\n    _child_spec = DistributionPoint\n\n\nclass DisplayText(Choice):\n    _alternatives = [\n        ('ia5_string', IA5String),\n        ('visible_string', VisibleString),\n        ('bmp_string', BMPString),\n        ('utf8_string', UTF8String),\n    ]\n\n\nclass NoticeNumbers(SequenceOf):\n    _child_spec = Integer\n\n\nclass NoticeReference(Sequence):\n    _fields = [\n        ('organization', DisplayText),\n        ('notice_numbers', NoticeNumbers),\n    ]\n\n\nclass UserNotice(Sequence):\n    _fields = [\n        ('notice_ref', NoticeReference, {'optional': True}),\n        ('explicit_text', DisplayText, {'optional': True}),\n    ]\n\n\nclass PolicyQualifierId(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.2.1': 'certification_practice_statement',\n        '1.3.6.1.5.5.7.2.2': 'user_notice',\n    }\n\n\nclass PolicyQualifierInfo(Sequence):\n    _fields = [\n        ('policy_qualifier_id', PolicyQualifierId),\n        ('qualifier', Any),\n    ]\n\n    _oid_pair = ('policy_qualifier_id', 'qualifier')\n    _oid_specs = {\n        'certification_practice_statement': IA5String,\n        'user_notice': UserNotice,\n    }\n\n\nclass PolicyQualifierInfos(SequenceOf):\n    _child_spec = PolicyQualifierInfo\n\n\nclass PolicyIdentifier(ObjectIdentifier):\n    _map = {\n        '2.5.29.32.0': 'any_policy',\n    }\n\n\nclass PolicyInformation(Sequence):\n    _fields = [\n        ('policy_identifier', PolicyIdentifier),\n        ('policy_qualifiers', PolicyQualifierInfos, {'optional': True})\n    ]\n\n\nclass CertificatePolicies(SequenceOf):\n    _child_spec = PolicyInformation\n\n\nclass PolicyMapping(Sequence):\n    _fields = [\n        ('issuer_domain_policy', PolicyIdentifier),\n        ('subject_domain_policy', PolicyIdentifier),\n    ]\n\n\nclass PolicyMappings(SequenceOf):\n    _child_spec = PolicyMapping\n\n\nclass PolicyConstraints(Sequence):\n    _fields = [\n        ('require_explicit_policy', Integer, {'implicit': 0, 'optional': True}),\n        ('inhibit_policy_mapping', Integer, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass KeyPurposeId(ObjectIdentifier):\n    _map = {\n        # https://tools.ietf.org/html/rfc5280#page-45\n        '2.5.29.37.0': 'any_extended_key_usage',\n        '1.3.6.1.5.5.7.3.1': 'server_auth',\n        '1.3.6.1.5.5.7.3.2': 'client_auth',\n        '1.3.6.1.5.5.7.3.3': 'code_signing',\n        '1.3.6.1.5.5.7.3.4': 'email_protection',\n        '1.3.6.1.5.5.7.3.5': 'ipsec_end_system',\n        '1.3.6.1.5.5.7.3.6': 'ipsec_tunnel',\n        '1.3.6.1.5.5.7.3.7': 'ipsec_user',\n        '1.3.6.1.5.5.7.3.8': 'time_stamping',\n        '1.3.6.1.5.5.7.3.9': 'ocsp_signing',\n        # http://tools.ietf.org/html/rfc3029.html#page-9\n        '1.3.6.1.5.5.7.3.10': 'dvcs',\n        # http://tools.ietf.org/html/rfc6268.html#page-16\n        '1.3.6.1.5.5.7.3.13': 'eap_over_ppp',\n        '1.3.6.1.5.5.7.3.14': 'eap_over_lan',\n        # https://tools.ietf.org/html/rfc5055#page-76\n        '1.3.6.1.5.5.7.3.15': 'scvp_server',\n        '1.3.6.1.5.5.7.3.16': 'scvp_client',\n        # https://tools.ietf.org/html/rfc4945#page-31\n        '1.3.6.1.5.5.7.3.17': 'ipsec_ike',\n        # https://tools.ietf.org/html/rfc5415#page-38\n        '1.3.6.1.5.5.7.3.18': 'capwap_ac',\n        '1.3.6.1.5.5.7.3.19': 'capwap_wtp',\n        # https://tools.ietf.org/html/rfc5924#page-8\n        '1.3.6.1.5.5.7.3.20': 'sip_domain',\n        # https://tools.ietf.org/html/rfc6187#page-7\n        '1.3.6.1.5.5.7.3.21': 'secure_shell_client',\n        '1.3.6.1.5.5.7.3.22': 'secure_shell_server',\n        # https://tools.ietf.org/html/rfc6494#page-7\n        '1.3.6.1.5.5.7.3.23': 'send_router',\n        '1.3.6.1.5.5.7.3.24': 'send_proxied_router',\n        '1.3.6.1.5.5.7.3.25': 'send_owner',\n        '1.3.6.1.5.5.7.3.26': 'send_proxied_owner',\n        # https://tools.ietf.org/html/rfc6402#page-10\n        '1.3.6.1.5.5.7.3.27': 'cmc_ca',\n        '1.3.6.1.5.5.7.3.28': 'cmc_ra',\n        '1.3.6.1.5.5.7.3.29': 'cmc_archive',\n        # https://tools.ietf.org/html/draft-ietf-sidr-bgpsec-pki-profiles-15#page-6\n        '1.3.6.1.5.5.7.3.30': 'bgpspec_router',\n        # https://www.ietf.org/proceedings/44/I-D/draft-ietf-ipsec-pki-req-01.txt\n        '1.3.6.1.5.5.8.2.2': 'ike_intermediate',\n        # https://msdn.microsoft.com/en-us/library/windows/desktop/aa378132(v=vs.85).aspx\n        # and https://support.microsoft.com/en-us/kb/287547\n        '1.3.6.1.4.1.311.10.3.1': 'microsoft_trust_list_signing',\n        '1.3.6.1.4.1.311.10.3.2': 'microsoft_time_stamp_signing',\n        '1.3.6.1.4.1.311.10.3.3': 'microsoft_server_gated',\n        '1.3.6.1.4.1.311.10.3.3.1': 'microsoft_serialized',\n        '1.3.6.1.4.1.311.10.3.4': 'microsoft_efs',\n        '1.3.6.1.4.1.311.10.3.4.1': 'microsoft_efs_recovery',\n        '1.3.6.1.4.1.311.10.3.5': 'microsoft_whql',\n        '1.3.6.1.4.1.311.10.3.6': 'microsoft_nt5',\n        '1.3.6.1.4.1.311.10.3.7': 'microsoft_oem_whql',\n        '1.3.6.1.4.1.311.10.3.8': 'microsoft_embedded_nt',\n        '1.3.6.1.4.1.311.10.3.9': 'microsoft_root_list_signer',\n        '1.3.6.1.4.1.311.10.3.10': 'microsoft_qualified_subordination',\n        '1.3.6.1.4.1.311.10.3.11': 'microsoft_key_recovery',\n        '1.3.6.1.4.1.311.10.3.12': 'microsoft_document_signing',\n        '1.3.6.1.4.1.311.10.3.13': 'microsoft_lifetime_signing',\n        '1.3.6.1.4.1.311.10.3.14': 'microsoft_mobile_device_software',\n        # https://support.microsoft.com/en-us/help/287547/object-ids-associated-with-microsoft-cryptography\n        '1.3.6.1.4.1.311.20.2.2': 'microsoft_smart_card_logon',\n        # https://opensource.apple.com/source\n        #  - /Security/Security-57031.40.6/Security/libsecurity_keychain/lib/SecPolicy.cpp\n        #  - /libsecurity_cssm/libsecurity_cssm-36064/lib/oidsalg.c\n        '1.2.840.113635.100.1.2': 'apple_x509_basic',\n        '1.2.840.113635.100.1.3': 'apple_ssl',\n        '1.2.840.113635.100.1.4': 'apple_local_cert_gen',\n        '1.2.840.113635.100.1.5': 'apple_csr_gen',\n        '1.2.840.113635.100.1.6': 'apple_revocation_crl',\n        '1.2.840.113635.100.1.7': 'apple_revocation_ocsp',\n        '1.2.840.113635.100.1.8': 'apple_smime',\n        '1.2.840.113635.100.1.9': 'apple_eap',\n        '1.2.840.113635.100.1.10': 'apple_software_update_signing',\n        '1.2.840.113635.100.1.11': 'apple_ipsec',\n        '1.2.840.113635.100.1.12': 'apple_ichat',\n        '1.2.840.113635.100.1.13': 'apple_resource_signing',\n        '1.2.840.113635.100.1.14': 'apple_pkinit_client',\n        '1.2.840.113635.100.1.15': 'apple_pkinit_server',\n        '1.2.840.113635.100.1.16': 'apple_code_signing',\n        '1.2.840.113635.100.1.17': 'apple_package_signing',\n        '1.2.840.113635.100.1.18': 'apple_id_validation',\n        '1.2.840.113635.100.1.20': 'apple_time_stamping',\n        '1.2.840.113635.100.1.21': 'apple_revocation',\n        '1.2.840.113635.100.1.22': 'apple_passbook_signing',\n        '1.2.840.113635.100.1.23': 'apple_mobile_store',\n        '1.2.840.113635.100.1.24': 'apple_escrow_service',\n        '1.2.840.113635.100.1.25': 'apple_profile_signer',\n        '1.2.840.113635.100.1.26': 'apple_qa_profile_signer',\n        '1.2.840.113635.100.1.27': 'apple_test_mobile_store',\n        '1.2.840.113635.100.1.28': 'apple_otapki_signer',\n        '1.2.840.113635.100.1.29': 'apple_test_otapki_signer',\n        '1.2.840.113625.100.1.30': 'apple_id_validation_record_signing_policy',\n        '1.2.840.113625.100.1.31': 'apple_smp_encryption',\n        '1.2.840.113625.100.1.32': 'apple_test_smp_encryption',\n        '1.2.840.113635.100.1.33': 'apple_server_authentication',\n        '1.2.840.113635.100.1.34': 'apple_pcs_escrow_service',\n        # http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.201-2.pdf\n        '2.16.840.1.101.3.6.8': 'piv_card_authentication',\n        '2.16.840.1.101.3.6.7': 'piv_content_signing',\n        # https://tools.ietf.org/html/rfc4556.html\n        '1.3.6.1.5.2.3.4': 'pkinit_kpclientauth',\n        '1.3.6.1.5.2.3.5': 'pkinit_kpkdc',\n        # https://www.adobe.com/devnet-docs/acrobatetk/tools/DigSig/changes.html\n        '1.2.840.113583.1.1.5': 'adobe_authentic_documents_trust',\n        # https://www.idmanagement.gov/wp-content/uploads/sites/1171/uploads/fpki-pivi-cert-profiles.pdf\n        '2.16.840.1.101.3.8.7': 'fpki_pivi_content_signing'\n    }\n\n\nclass ExtKeyUsageSyntax(SequenceOf):\n    _child_spec = KeyPurposeId\n\n\nclass AccessMethod(ObjectIdentifier):\n    _map = {\n        '1.3.6.1.5.5.7.48.1': 'ocsp',\n        '1.3.6.1.5.5.7.48.2': 'ca_issuers',\n        '1.3.6.1.5.5.7.48.3': 'time_stamping',\n        '1.3.6.1.5.5.7.48.5': 'ca_repository',\n    }\n\n\nclass AccessDescription(Sequence):\n    _fields = [\n        ('access_method', AccessMethod),\n        ('access_location', GeneralName),\n    ]\n\n\nclass AuthorityInfoAccessSyntax(SequenceOf):\n    _child_spec = AccessDescription\n\n\nclass SubjectInfoAccessSyntax(SequenceOf):\n    _child_spec = AccessDescription\n\n\n# https://tools.ietf.org/html/rfc7633\nclass Features(SequenceOf):\n    _child_spec = Integer\n\n\nclass EntrustVersionInfo(Sequence):\n    _fields = [\n        ('entrust_vers', GeneralString),\n        ('entrust_info_flags', BitString)\n    ]\n\n\nclass NetscapeCertificateType(BitString):\n    _map = {\n        0: 'ssl_client',\n        1: 'ssl_server',\n        2: 'email',\n        3: 'object_signing',\n        4: 'reserved',\n        5: 'ssl_ca',\n        6: 'email_ca',\n        7: 'object_signing_ca',\n    }\n\n\nclass Version(Integer):\n    _map = {\n        0: 'v1',\n        1: 'v2',\n        2: 'v3',\n    }\n\n\nclass TPMSpecification(Sequence):\n    _fields = [\n        ('family', UTF8String),\n        ('level', Integer),\n        ('revision', Integer),\n    ]\n\n\nclass SetOfTPMSpecification(SetOf):\n    _child_spec = TPMSpecification\n\n\nclass TCGSpecificationVersion(Sequence):\n    _fields = [\n        ('major_version', Integer),\n        ('minor_version', Integer),\n        ('revision', Integer),\n    ]\n\n\nclass TCGPlatformSpecification(Sequence):\n    _fields = [\n        ('version', TCGSpecificationVersion),\n        ('platform_class', OctetString),\n    ]\n\n\nclass SetOfTCGPlatformSpecification(SetOf):\n    _child_spec = TCGPlatformSpecification\n\n\nclass EKGenerationType(Enumerated):\n    _map = {\n        0: 'internal',\n        1: 'injected',\n        2: 'internal_revocable',\n        3: 'injected_revocable',\n    }\n\n\nclass EKGenerationLocation(Enumerated):\n    _map = {\n        0: 'tpm_manufacturer',\n        1: 'platform_manufacturer',\n        2: 'ek_cert_signer',\n    }\n\n\nclass EKCertificateGenerationLocation(Enumerated):\n    _map = {\n        0: 'tpm_manufacturer',\n        1: 'platform_manufacturer',\n        2: 'ek_cert_signer',\n    }\n\n\nclass EvaluationAssuranceLevel(Enumerated):\n    _map = {\n        1: 'level1',\n        2: 'level2',\n        3: 'level3',\n        4: 'level4',\n        5: 'level5',\n        6: 'level6',\n        7: 'level7',\n    }\n\n\nclass EvaluationStatus(Enumerated):\n    _map = {\n        0: 'designed_to_meet',\n        1: 'evaluation_in_progress',\n        2: 'evaluation_completed',\n    }\n\n\nclass StrengthOfFunction(Enumerated):\n    _map = {\n        0: 'basic',\n        1: 'medium',\n        2: 'high',\n    }\n\n\nclass URIReference(Sequence):\n    _fields = [\n        ('uniform_resource_identifier', IA5String),\n        ('hash_algorithm', DigestAlgorithm, {'optional': True}),\n        ('hash_value', BitString, {'optional': True}),\n    ]\n\n\nclass CommonCriteriaMeasures(Sequence):\n    _fields = [\n        ('version', IA5String),\n        ('assurance_level', EvaluationAssuranceLevel),\n        ('evaluation_status', EvaluationStatus),\n        ('plus', Boolean, {'default': False}),\n        ('strengh_of_function', StrengthOfFunction, {'implicit': 0, 'optional': True}),\n        ('profile_oid', ObjectIdentifier, {'implicit': 1, 'optional': True}),\n        ('profile_url', URIReference, {'implicit': 2, 'optional': True}),\n        ('target_oid', ObjectIdentifier, {'implicit': 3, 'optional': True}),\n        ('target_uri', URIReference, {'implicit': 4, 'optional': True}),\n    ]\n\n\nclass SecurityLevel(Enumerated):\n    _map = {\n        1: 'level1',\n        2: 'level2',\n        3: 'level3',\n        4: 'level4',\n    }\n\n\nclass FIPSLevel(Sequence):\n    _fields = [\n        ('version', IA5String),\n        ('level', SecurityLevel),\n        ('plus', Boolean, {'default': False}),\n    ]\n\n\nclass TPMSecurityAssertions(Sequence):\n    _fields = [\n        ('version', Version, {'default': 'v1'}),\n        ('field_upgradable', Boolean, {'default': False}),\n        ('ek_generation_type', EKGenerationType, {'implicit': 0, 'optional': True}),\n        ('ek_generation_location', EKGenerationLocation, {'implicit': 1, 'optional': True}),\n        ('ek_certificate_generation_location', EKCertificateGenerationLocation, {'implicit': 2, 'optional': True}),\n        ('cc_info', CommonCriteriaMeasures, {'implicit': 3, 'optional': True}),\n        ('fips_level', FIPSLevel, {'implicit': 4, 'optional': True}),\n        ('iso_9000_certified', Boolean, {'implicit': 5, 'default': False}),\n        ('iso_9000_uri', IA5String, {'optional': True}),\n    ]\n\n\nclass SetOfTPMSecurityAssertions(SetOf):\n    _child_spec = TPMSecurityAssertions\n\n\nclass SubjectDirectoryAttributeId(ObjectIdentifier):\n    _map = {\n        # https://tools.ietf.org/html/rfc2256#page-11\n        '2.5.4.52': 'supported_algorithms',\n        # https://www.trustedcomputinggroup.org/wp-content/uploads/Credential_Profile_EK_V2.0_R14_published.pdf\n        '2.23.133.2.16': 'tpm_specification',\n        '2.23.133.2.17': 'tcg_platform_specification',\n        '2.23.133.2.18': 'tpm_security_assertions',\n        # https://tools.ietf.org/html/rfc3739#page-18\n        '1.3.6.1.5.5.7.9.1': 'pda_date_of_birth',\n        '1.3.6.1.5.5.7.9.2': 'pda_place_of_birth',\n        '1.3.6.1.5.5.7.9.3': 'pda_gender',\n        '1.3.6.1.5.5.7.9.4': 'pda_country_of_citizenship',\n        '1.3.6.1.5.5.7.9.5': 'pda_country_of_residence',\n        # https://holtstrom.com/michael/tools/asn1decoder.php\n        '1.2.840.113533.7.68.29': 'entrust_user_role',\n    }\n\n\nclass SetOfGeneralizedTime(SetOf):\n    _child_spec = GeneralizedTime\n\n\nclass SetOfDirectoryString(SetOf):\n    _child_spec = DirectoryString\n\n\nclass SetOfPrintableString(SetOf):\n    _child_spec = PrintableString\n\n\nclass SupportedAlgorithm(Sequence):\n    _fields = [\n        ('algorithm_identifier', AnyAlgorithmIdentifier),\n        ('intended_usage', KeyUsage, {'explicit': 0, 'optional': True}),\n        ('intended_certificate_policies', CertificatePolicies, {'explicit': 1, 'optional': True}),\n    ]\n\n\nclass SetOfSupportedAlgorithm(SetOf):\n    _child_spec = SupportedAlgorithm\n\n\nclass SubjectDirectoryAttribute(Sequence):\n    _fields = [\n        ('type', SubjectDirectoryAttributeId),\n        ('values', Any),\n    ]\n\n    _oid_pair = ('type', 'values')\n    _oid_specs = {\n        'supported_algorithms': SetOfSupportedAlgorithm,\n        'tpm_specification': SetOfTPMSpecification,\n        'tcg_platform_specification': SetOfTCGPlatformSpecification,\n        'tpm_security_assertions': SetOfTPMSecurityAssertions,\n        'pda_date_of_birth': SetOfGeneralizedTime,\n        'pda_place_of_birth': SetOfDirectoryString,\n        'pda_gender': SetOfPrintableString,\n        'pda_country_of_citizenship': SetOfPrintableString,\n        'pda_country_of_residence': SetOfPrintableString,\n    }\n\n    def _values_spec(self):\n        type_ = self['type'].native\n        if type_ in self._oid_specs:\n            return self._oid_specs[type_]\n        return SetOf\n\n    _spec_callbacks = {\n        'values': _values_spec\n    }\n\n\nclass SubjectDirectoryAttributes(SequenceOf):\n    _child_spec = SubjectDirectoryAttribute\n\n\nclass ExtensionId(ObjectIdentifier):\n    _map = {\n        '2.5.29.9': 'subject_directory_attributes',\n        '2.5.29.14': 'key_identifier',\n        '2.5.29.15': 'key_usage',\n        '2.5.29.16': 'private_key_usage_period',\n        '2.5.29.17': 'subject_alt_name',\n        '2.5.29.18': 'issuer_alt_name',\n        '2.5.29.19': 'basic_constraints',\n        '2.5.29.30': 'name_constraints',\n        '2.5.29.31': 'crl_distribution_points',\n        '2.5.29.32': 'certificate_policies',\n        '2.5.29.33': 'policy_mappings',\n        '2.5.29.35': 'authority_key_identifier',\n        '2.5.29.36': 'policy_constraints',\n        '2.5.29.37': 'extended_key_usage',\n        '2.5.29.46': 'freshest_crl',\n        '2.5.29.54': 'inhibit_any_policy',\n        '1.3.6.1.5.5.7.1.1': 'authority_information_access',\n        '1.3.6.1.5.5.7.1.11': 'subject_information_access',\n        # https://tools.ietf.org/html/rfc7633\n        '1.3.6.1.5.5.7.1.24': 'tls_feature',\n        '1.3.6.1.5.5.7.48.1.5': 'ocsp_no_check',\n        '1.2.840.113533.7.65.0': 'entrust_version_extension',\n        '2.16.840.1.113730.1.1': 'netscape_certificate_type',\n        # https://tools.ietf.org/html/rfc6962.html#page-14\n        '1.3.6.1.4.1.11129.2.4.2': 'signed_certificate_timestamp_list',\n        # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/3aec3e50-511a-42f9-a5d5-240af503e470\n        '1.3.6.1.4.1.311.20.2': 'microsoft_enroll_certtype',\n    }\n\n\nclass Extension(Sequence):\n    _fields = [\n        ('extn_id', ExtensionId),\n        ('critical', Boolean, {'default': False}),\n        ('extn_value', ParsableOctetString),\n    ]\n\n    _oid_pair = ('extn_id', 'extn_value')\n    _oid_specs = {\n        'subject_directory_attributes': SubjectDirectoryAttributes,\n        'key_identifier': OctetString,\n        'key_usage': KeyUsage,\n        'private_key_usage_period': PrivateKeyUsagePeriod,\n        'subject_alt_name': GeneralNames,\n        'issuer_alt_name': GeneralNames,\n        'basic_constraints': BasicConstraints,\n        'name_constraints': NameConstraints,\n        'crl_distribution_points': CRLDistributionPoints,\n        'certificate_policies': CertificatePolicies,\n        'policy_mappings': PolicyMappings,\n        'authority_key_identifier': AuthorityKeyIdentifier,\n        'policy_constraints': PolicyConstraints,\n        'extended_key_usage': ExtKeyUsageSyntax,\n        'freshest_crl': CRLDistributionPoints,\n        'inhibit_any_policy': Integer,\n        'authority_information_access': AuthorityInfoAccessSyntax,\n        'subject_information_access': SubjectInfoAccessSyntax,\n        'tls_feature': Features,\n        'ocsp_no_check': Null,\n        'entrust_version_extension': EntrustVersionInfo,\n        'netscape_certificate_type': NetscapeCertificateType,\n        'signed_certificate_timestamp_list': OctetString,\n        # Not UTF8String as Microsofts docs claim, see:\n        # https://www.alvestrand.no/objectid/1.3.6.1.4.1.311.20.2.html\n        'microsoft_enroll_certtype': BMPString,\n    }\n\n\nclass Extensions(SequenceOf):\n    _child_spec = Extension\n\n\nclass TbsCertificate(Sequence):\n    _fields = [\n        ('version', Version, {'explicit': 0, 'default': 'v1'}),\n        ('serial_number', Integer),\n        ('signature', SignedDigestAlgorithm),\n        ('issuer', Name),\n        ('validity', Validity),\n        ('subject', Name),\n        ('subject_public_key_info', PublicKeyInfo),\n        ('issuer_unique_id', OctetBitString, {'implicit': 1, 'optional': True}),\n        ('subject_unique_id', OctetBitString, {'implicit': 2, 'optional': True}),\n        ('extensions', Extensions, {'explicit': 3, 'optional': True}),\n    ]\n\n\nclass Certificate(Sequence):\n    _fields = [\n        ('tbs_certificate', TbsCertificate),\n        ('signature_algorithm', SignedDigestAlgorithm),\n        ('signature_value', OctetBitString),\n    ]\n\n    _processed_extensions = False\n    _critical_extensions = None\n    _subject_directory_attributes_value = None\n    _key_identifier_value = None\n    _key_usage_value = None\n    _subject_alt_name_value = None\n    _issuer_alt_name_value = None\n    _basic_constraints_value = None\n    _name_constraints_value = None\n    _crl_distribution_points_value = None\n    _certificate_policies_value = None\n    _policy_mappings_value = None\n    _authority_key_identifier_value = None\n    _policy_constraints_value = None\n    _freshest_crl_value = None\n    _inhibit_any_policy_value = None\n    _extended_key_usage_value = None\n    _authority_information_access_value = None\n    _subject_information_access_value = None\n    _private_key_usage_period_value = None\n    _tls_feature_value = None\n    _ocsp_no_check_value = None\n    _issuer_serial = None\n    _authority_issuer_serial = False\n    _crl_distribution_points = None\n    _delta_crl_distribution_points = None\n    _valid_domains = None\n    _valid_ips = None\n    _self_issued = None\n    _self_signed = None\n    _sha1 = None\n    _sha256 = None\n\n    def _set_extensions(self):\n        \"\"\"\n        Sets common named extensions to private attributes and creates a list\n        of critical extensions\n        \"\"\"\n\n        self._critical_extensions = set()\n\n        for extension in self['tbs_certificate']['extensions']:\n            name = extension['extn_id'].native\n            attribute_name = '_%s_value' % name\n            if hasattr(self, attribute_name):\n                setattr(self, attribute_name, extension['extn_value'].parsed)\n            if extension['critical'].native:\n                self._critical_extensions.add(name)\n\n        self._processed_extensions = True\n\n    @property\n    def critical_extensions(self):\n        \"\"\"\n        Returns a set of the names (or OID if not a known extension) of the\n        extensions marked as critical\n\n        :return:\n            A set of unicode strings\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._critical_extensions\n\n    @property\n    def private_key_usage_period_value(self):\n        \"\"\"\n        This extension is used to constrain the period over which the subject\n        private key may be used\n\n        :return:\n            None or a PrivateKeyUsagePeriod object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._private_key_usage_period_value\n\n    @property\n    def subject_directory_attributes_value(self):\n        \"\"\"\n        This extension is used to contain additional identification attributes\n        about the subject.\n\n        :return:\n            None or a SubjectDirectoryAttributes object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._subject_directory_attributes_value\n\n    @property\n    def key_identifier_value(self):\n        \"\"\"\n        This extension is used to help in creating certificate validation paths.\n        It contains an identifier that should generally, but is not guaranteed\n        to, be unique.\n\n        :return:\n            None or an OctetString object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._key_identifier_value\n\n    @property\n    def key_usage_value(self):\n        \"\"\"\n        This extension is used to define the purpose of the public key\n        contained within the certificate.\n\n        :return:\n            None or a KeyUsage\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._key_usage_value\n\n    @property\n    def subject_alt_name_value(self):\n        \"\"\"\n        This extension allows for additional names to be associate with the\n        subject of the certificate. While it may contain a whole host of\n        possible names, it is usually used to allow certificates to be used\n        with multiple different domain names.\n\n        :return:\n            None or a GeneralNames object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._subject_alt_name_value\n\n    @property\n    def issuer_alt_name_value(self):\n        \"\"\"\n        This extension allows associating one or more alternative names with\n        the issuer of the certificate.\n\n        :return:\n            None or an x509.GeneralNames object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._issuer_alt_name_value\n\n    @property\n    def basic_constraints_value(self):\n        \"\"\"\n        This extension is used to determine if the subject of the certificate\n        is a CA, and if so, what the maximum number of intermediate CA certs\n        after this are, before an end-entity certificate is found.\n\n        :return:\n            None or a BasicConstraints object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._basic_constraints_value\n\n    @property\n    def name_constraints_value(self):\n        \"\"\"\n        This extension is used in CA certificates, and is used to limit the\n        possible names of certificates issued.\n\n        :return:\n            None or a NameConstraints object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._name_constraints_value\n\n    @property\n    def crl_distribution_points_value(self):\n        \"\"\"\n        This extension is used to help in locating the CRL for this certificate.\n\n        :return:\n            None or a CRLDistributionPoints object\n            extension\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._crl_distribution_points_value\n\n    @property\n    def certificate_policies_value(self):\n        \"\"\"\n        This extension defines policies in CA certificates under which\n        certificates may be issued. In end-entity certificates, the inclusion\n        of a policy indicates the issuance of the certificate follows the\n        policy.\n\n        :return:\n            None or a CertificatePolicies object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._certificate_policies_value\n\n    @property\n    def policy_mappings_value(self):\n        \"\"\"\n        This extension allows mapping policy OIDs to other OIDs. This is used\n        to allow different policies to be treated as equivalent in the process\n        of validation.\n\n        :return:\n            None or a PolicyMappings object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._policy_mappings_value\n\n    @property\n    def authority_key_identifier_value(self):\n        \"\"\"\n        This extension helps in identifying the public key with which to\n        validate the authenticity of the certificate.\n\n        :return:\n            None or an AuthorityKeyIdentifier object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._authority_key_identifier_value\n\n    @property\n    def policy_constraints_value(self):\n        \"\"\"\n        This extension is used to control if policy mapping is allowed and\n        when policies are required.\n\n        :return:\n            None or a PolicyConstraints object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._policy_constraints_value\n\n    @property\n    def freshest_crl_value(self):\n        \"\"\"\n        This extension is used to help locate any available delta CRLs\n\n        :return:\n            None or an CRLDistributionPoints object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._freshest_crl_value\n\n    @property\n    def inhibit_any_policy_value(self):\n        \"\"\"\n        This extension is used to prevent mapping of the any policy to\n        specific requirements\n\n        :return:\n            None or a Integer object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._inhibit_any_policy_value\n\n    @property\n    def extended_key_usage_value(self):\n        \"\"\"\n        This extension is used to define additional purposes for the public key\n        beyond what is contained in the basic constraints.\n\n        :return:\n            None or an ExtKeyUsageSyntax object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._extended_key_usage_value\n\n    @property\n    def authority_information_access_value(self):\n        \"\"\"\n        This extension is used to locate the CA certificate used to sign this\n        certificate, or the OCSP responder for this certificate.\n\n        :return:\n            None or an AuthorityInfoAccessSyntax object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._authority_information_access_value\n\n    @property\n    def subject_information_access_value(self):\n        \"\"\"\n        This extension is used to access information about the subject of this\n        certificate.\n\n        :return:\n            None or a SubjectInfoAccessSyntax object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._subject_information_access_value\n\n    @property\n    def tls_feature_value(self):\n        \"\"\"\n        This extension is used to list the TLS features a server must respond\n        with if a client initiates a request supporting them.\n\n        :return:\n            None or a Features object\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._tls_feature_value\n\n    @property\n    def ocsp_no_check_value(self):\n        \"\"\"\n        This extension is used on certificates of OCSP responders, indicating\n        that revocation information for the certificate should never need to\n        be verified, thus preventing possible loops in path validation.\n\n        :return:\n            None or a Null object (if present)\n        \"\"\"\n\n        if not self._processed_extensions:\n            self._set_extensions()\n        return self._ocsp_no_check_value\n\n    @property\n    def signature(self):\n        \"\"\"\n        :return:\n            A byte string of the signature\n        \"\"\"\n\n        return self['signature_value'].native\n\n    @property\n    def signature_algo(self):\n        \"\"\"\n        :return:\n            A unicode string of \"rsassa_pkcs1v15\", \"rsassa_pss\", \"dsa\", \"ecdsa\"\n        \"\"\"\n\n        return self['signature_algorithm'].signature_algo\n\n    @property\n    def hash_algo(self):\n        \"\"\"\n        :return:\n            A unicode string of \"md2\", \"md5\", \"sha1\", \"sha224\", \"sha256\",\n            \"sha384\", \"sha512\", \"sha512_224\", \"sha512_256\"\n        \"\"\"\n\n        return self['signature_algorithm'].hash_algo\n\n    @property\n    def public_key(self):\n        \"\"\"\n        :return:\n            The PublicKeyInfo object for this certificate\n        \"\"\"\n\n        return self['tbs_certificate']['subject_public_key_info']\n\n    @property\n    def subject(self):\n        \"\"\"\n        :return:\n            The Name object for the subject of this certificate\n        \"\"\"\n\n        return self['tbs_certificate']['subject']\n\n    @property\n    def issuer(self):\n        \"\"\"\n        :return:\n            The Name object for the issuer of this certificate\n        \"\"\"\n\n        return self['tbs_certificate']['issuer']\n\n    @property\n    def serial_number(self):\n        \"\"\"\n        :return:\n            An integer of the certificate's serial number\n        \"\"\"\n\n        return self['tbs_certificate']['serial_number'].native\n\n    @property\n    def key_identifier(self):\n        \"\"\"\n        :return:\n            None or a byte string of the certificate's key identifier from the\n            key identifier extension\n        \"\"\"\n\n        if not self.key_identifier_value:\n            return None\n\n        return self.key_identifier_value.native\n\n    @property\n    def issuer_serial(self):\n        \"\"\"\n        :return:\n            A byte string of the SHA-256 hash of the issuer concatenated with\n            the ascii character \":\", concatenated with the serial number as\n            an ascii string\n        \"\"\"\n\n        if self._issuer_serial is None:\n            self._issuer_serial = self.issuer.sha256 + b':' + str_cls(self.serial_number).encode('ascii')\n        return self._issuer_serial\n\n    @property\n    def not_valid_after(self):\n        \"\"\"\n        :return:\n            A datetime of latest time when the certificate is still valid\n        \"\"\"\n        return self['tbs_certificate']['validity']['not_after'].native\n\n    @property\n    def not_valid_before(self):\n        \"\"\"\n        :return:\n            A datetime of the earliest time when the certificate is valid\n        \"\"\"\n        return self['tbs_certificate']['validity']['not_before'].native\n\n    @property\n    def authority_key_identifier(self):\n        \"\"\"\n        :return:\n            None or a byte string of the key_identifier from the authority key\n            identifier extension\n        \"\"\"\n\n        if not self.authority_key_identifier_value:\n            return None\n\n        return self.authority_key_identifier_value['key_identifier'].native\n\n    @property\n    def authority_issuer_serial(self):\n        \"\"\"\n        :return:\n            None or a byte string of the SHA-256 hash of the isser from the\n            authority key identifier extension concatenated with the ascii\n            character \":\", concatenated with the serial number from the\n            authority key identifier extension as an ascii string\n        \"\"\"\n\n        if self._authority_issuer_serial is False:\n            akiv = self.authority_key_identifier_value\n            if akiv and akiv['authority_cert_issuer'].native:\n                issuer = self.authority_key_identifier_value['authority_cert_issuer'][0].chosen\n                # We untag the element since it is tagged via being a choice from GeneralName\n                issuer = issuer.untag()\n                authority_serial = self.authority_key_identifier_value['authority_cert_serial_number'].native\n                self._authority_issuer_serial = issuer.sha256 + b':' + str_cls(authority_serial).encode('ascii')\n            else:\n                self._authority_issuer_serial = None\n        return self._authority_issuer_serial\n\n    @property\n    def crl_distribution_points(self):\n        \"\"\"\n        Returns complete CRL URLs - does not include delta CRLs\n\n        :return:\n            A list of zero or more DistributionPoint objects\n        \"\"\"\n\n        if self._crl_distribution_points is None:\n            self._crl_distribution_points = self._get_http_crl_distribution_points(self.crl_distribution_points_value)\n        return self._crl_distribution_points\n\n    @property\n    def delta_crl_distribution_points(self):\n        \"\"\"\n        Returns delta CRL URLs - does not include complete CRLs\n\n        :return:\n            A list of zero or more DistributionPoint objects\n        \"\"\"\n\n        if self._delta_crl_distribution_points is None:\n            self._delta_crl_distribution_points = self._get_http_crl_distribution_points(self.freshest_crl_value)\n        return self._delta_crl_distribution_points\n\n    def _get_http_crl_distribution_points(self, crl_distribution_points):\n        \"\"\"\n        Fetches the DistributionPoint object for non-relative, HTTP CRLs\n        referenced by the certificate\n\n        :param crl_distribution_points:\n            A CRLDistributionPoints object to grab the DistributionPoints from\n\n        :return:\n            A list of zero or more DistributionPoint objects\n        \"\"\"\n\n        output = []\n\n        if crl_distribution_points is None:\n            return []\n\n        for distribution_point in crl_distribution_points:\n            distribution_point_name = distribution_point['distribution_point']\n            if distribution_point_name is VOID:\n                continue\n            # RFC 5280 indicates conforming CA should not use the relative form\n            if distribution_point_name.name == 'name_relative_to_crl_issuer':\n                continue\n            # This library is currently only concerned with HTTP-based CRLs\n            for general_name in distribution_point_name.chosen:\n                if general_name.name == 'uniform_resource_identifier':\n                    output.append(distribution_point)\n\n        return output\n\n    @property\n    def ocsp_urls(self):\n        \"\"\"\n        :return:\n            A list of zero or more unicode strings of the OCSP URLs for this\n            cert\n        \"\"\"\n\n        if not self.authority_information_access_value:\n            return []\n\n        output = []\n        for entry in self.authority_information_access_value:\n            if entry['access_method'].native == 'ocsp':\n                location = entry['access_location']\n                if location.name != 'uniform_resource_identifier':\n                    continue\n                url = location.native\n                if url.lower().startswith(('http://', 'https://', 'ldap://', 'ldaps://')):\n                    output.append(url)\n        return output\n\n    @property\n    def valid_domains(self):\n        \"\"\"\n        :return:\n            A list of unicode strings of valid domain names for the certificate.\n            Wildcard certificates will have a domain in the form: *.example.com\n        \"\"\"\n\n        if self._valid_domains is None:\n            self._valid_domains = []\n\n            # For the subject alt name extension, we can look at the name of\n            # the choice selected since it distinguishes between domain names,\n            # email addresses, IPs, etc\n            if self.subject_alt_name_value:\n                for general_name in self.subject_alt_name_value:\n                    if general_name.name == 'dns_name' and general_name.native not in self._valid_domains:\n                        self._valid_domains.append(general_name.native)\n\n            # If there was no subject alt name extension, and the common name\n            # in the subject looks like a domain, that is considered the valid\n            # list. This is done because according to\n            # https://tools.ietf.org/html/rfc6125#section-6.4.4, the common\n            # name should not be used if the subject alt name is present.\n            else:\n                pattern = re.compile('^(\\\\*\\\\.)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\\\-]*[a-zA-Z0-9])?\\\\.)+[a-zA-Z]{2,}$')\n                for rdn in self.subject.chosen:\n                    for name_type_value in rdn:\n                        if name_type_value['type'].native == 'common_name':\n                            value = name_type_value['value'].native\n                            if pattern.match(value):\n                                self._valid_domains.append(value)\n\n        return self._valid_domains\n\n    @property\n    def valid_ips(self):\n        \"\"\"\n        :return:\n            A list of unicode strings of valid IP addresses for the certificate\n        \"\"\"\n\n        if self._valid_ips is None:\n            self._valid_ips = []\n\n            if self.subject_alt_name_value:\n                for general_name in self.subject_alt_name_value:\n                    if general_name.name == 'ip_address':\n                        self._valid_ips.append(general_name.native)\n\n        return self._valid_ips\n\n    @property\n    def ca(self):\n        \"\"\"\n        :return;\n            A boolean - if the certificate is marked as a CA\n        \"\"\"\n\n        return self.basic_constraints_value and self.basic_constraints_value['ca'].native\n\n    @property\n    def max_path_length(self):\n        \"\"\"\n        :return;\n            None or an integer of the maximum path length\n        \"\"\"\n\n        if not self.ca:\n            return None\n        return self.basic_constraints_value['path_len_constraint'].native\n\n    @property\n    def self_issued(self):\n        \"\"\"\n        :return:\n            A boolean - if the certificate is self-issued, as defined by RFC\n            5280\n        \"\"\"\n\n        if self._self_issued is None:\n            self._self_issued = self.subject == self.issuer\n        return self._self_issued\n\n    @property\n    def self_signed(self):\n        \"\"\"\n        :return:\n            A unicode string of \"no\" or \"maybe\". The \"maybe\" result will\n            be returned if the certificate issuer and subject are the same.\n            If a key identifier and authority key identifier are present,\n            they will need to match otherwise \"no\" will be returned.\n\n            To verify is a certificate is truly self-signed, the signature\n            will need to be verified. See the certvalidator package for\n            one possible solution.\n        \"\"\"\n\n        if self._self_signed is None:\n            self._self_signed = 'no'\n            if self.self_issued:\n                if self.key_identifier:\n                    if not self.authority_key_identifier:\n                        self._self_signed = 'maybe'\n                    elif self.authority_key_identifier == self.key_identifier:\n                        self._self_signed = 'maybe'\n                else:\n                    self._self_signed = 'maybe'\n        return self._self_signed\n\n    @property\n    def sha1(self):\n        \"\"\"\n        :return:\n            The SHA-1 hash of the DER-encoded bytes of this complete certificate\n        \"\"\"\n\n        if self._sha1 is None:\n            self._sha1 = hashlib.sha1(self.dump()).digest()\n        return self._sha1\n\n    @property\n    def sha1_fingerprint(self):\n        \"\"\"\n        :return:\n            A unicode string of the SHA-1 hash, formatted using hex encoding\n            with a space between each pair of characters, all uppercase\n        \"\"\"\n\n        return ' '.join('%02X' % c for c in bytes_to_list(self.sha1))\n\n    @property\n    def sha256(self):\n        \"\"\"\n        :return:\n            The SHA-256 hash of the DER-encoded bytes of this complete\n            certificate\n        \"\"\"\n\n        if self._sha256 is None:\n            self._sha256 = hashlib.sha256(self.dump()).digest()\n        return self._sha256\n\n    @property\n    def sha256_fingerprint(self):\n        \"\"\"\n        :return:\n            A unicode string of the SHA-256 hash, formatted using hex encoding\n            with a space between each pair of characters, all uppercase\n        \"\"\"\n\n        return ' '.join('%02X' % c for c in bytes_to_list(self.sha256))\n\n    def is_valid_domain_ip(self, domain_ip):\n        \"\"\"\n        Check if a domain name or IP address is valid according to the\n        certificate\n\n        :param domain_ip:\n            A unicode string of a domain name or IP address\n\n        :return:\n            A boolean - if the domain or IP is valid for the certificate\n        \"\"\"\n\n        if not isinstance(domain_ip, str_cls):\n            raise TypeError(unwrap(\n                '''\n                domain_ip must be a unicode string, not %s\n                ''',\n                type_name(domain_ip)\n            ))\n\n        encoded_domain_ip = domain_ip.encode('idna').decode('ascii').lower()\n\n        is_ipv6 = encoded_domain_ip.find(':') != -1\n        is_ipv4 = not is_ipv6 and re.match('^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$', encoded_domain_ip)\n        is_domain = not is_ipv6 and not is_ipv4\n\n        # Handle domain name checks\n        if is_domain:\n            if not self.valid_domains:\n                return False\n\n            domain_labels = encoded_domain_ip.split('.')\n\n            for valid_domain in self.valid_domains:\n                encoded_valid_domain = valid_domain.encode('idna').decode('ascii').lower()\n                valid_domain_labels = encoded_valid_domain.split('.')\n\n                # The domain must be equal in label length to match\n                if len(valid_domain_labels) != len(domain_labels):\n                    continue\n\n                if valid_domain_labels == domain_labels:\n                    return True\n\n                is_wildcard = self._is_wildcard_domain(encoded_valid_domain)\n                if is_wildcard and self._is_wildcard_match(domain_labels, valid_domain_labels):\n                    return True\n\n            return False\n\n        # Handle IP address checks\n        if not self.valid_ips:\n            return False\n\n        family = socket.AF_INET if is_ipv4 else socket.AF_INET6\n        normalized_ip = inet_pton(family, encoded_domain_ip)\n\n        for valid_ip in self.valid_ips:\n            valid_family = socket.AF_INET if valid_ip.find('.') != -1 else socket.AF_INET6\n            normalized_valid_ip = inet_pton(valid_family, valid_ip)\n\n            if normalized_valid_ip == normalized_ip:\n                return True\n\n        return False\n\n    def _is_wildcard_domain(self, domain):\n        \"\"\"\n        Checks if a domain is a valid wildcard according to\n        https://tools.ietf.org/html/rfc6125#section-6.4.3\n\n        :param domain:\n            A unicode string of the domain name, where any U-labels from an IDN\n            have been converted to A-labels\n\n        :return:\n            A boolean - if the domain is a valid wildcard domain\n        \"\"\"\n\n        # The * character must be present for a wildcard match, and if there is\n        # most than one, it is an invalid wildcard specification\n        if domain.count('*') != 1:\n            return False\n\n        labels = domain.lower().split('.')\n\n        if not labels:\n            return False\n\n        # Wildcards may only appear in the left-most label\n        if labels[0].find('*') == -1:\n            return False\n\n        # Wildcards may not be embedded in an A-label from an IDN\n        if labels[0][0:4] == 'xn--':\n            return False\n\n        return True\n\n    def _is_wildcard_match(self, domain_labels, valid_domain_labels):\n        \"\"\"\n        Determines if the labels in a domain are a match for labels from a\n        wildcard valid domain name\n\n        :param domain_labels:\n            A list of unicode strings, with A-label form for IDNs, of the labels\n            in the domain name to check\n\n        :param valid_domain_labels:\n            A list of unicode strings, with A-label form for IDNs, of the labels\n            in a wildcard domain pattern\n\n        :return:\n            A boolean - if the domain matches the valid domain\n        \"\"\"\n\n        first_domain_label = domain_labels[0]\n        other_domain_labels = domain_labels[1:]\n\n        wildcard_label = valid_domain_labels[0]\n        other_valid_domain_labels = valid_domain_labels[1:]\n\n        # The wildcard is only allowed in the first label, so if\n        # The subsequent labels are not equal, there is no match\n        if other_domain_labels != other_valid_domain_labels:\n            return False\n\n        if wildcard_label == '*':\n            return True\n\n        wildcard_regex = re.compile('^' + wildcard_label.replace('*', '.*') + '$')\n        if wildcard_regex.match(first_domain_label):\n            return True\n\n        return False\n\n\n# The structures are taken from the OpenSSL source file x_x509a.c, and specify\n# extra information that is added to X.509 certificates to store trust\n# information about the certificate.\n\nclass KeyPurposeIdentifiers(SequenceOf):\n    _child_spec = KeyPurposeId\n\n\nclass SequenceOfAlgorithmIdentifiers(SequenceOf):\n    _child_spec = AlgorithmIdentifier\n\n\nclass CertificateAux(Sequence):\n    _fields = [\n        ('trust', KeyPurposeIdentifiers, {'optional': True}),\n        ('reject', KeyPurposeIdentifiers, {'implicit': 0, 'optional': True}),\n        ('alias', UTF8String, {'optional': True}),\n        ('keyid', OctetString, {'optional': True}),\n        ('other', SequenceOfAlgorithmIdentifiers, {'implicit': 1, 'optional': True}),\n    ]\n\n\nclass TrustedCertificate(Concat):\n    _child_specs = [Certificate, CertificateAux]\n"
  },
  {
    "path": "libs/asn1crypto-1.5.1.dist-info/LICENSE",
    "content": "Copyright (c) 2015-2022 Will Bond <will@wbond.net>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "libs/asn1crypto-1.5.1.dist-info/METADATA",
    "content": "Metadata-Version: 2.1\nName: asn1crypto\nVersion: 1.5.1\nSummary: Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP\nHome-page: https://github.com/wbond/asn1crypto\nAuthor: wbond\nAuthor-email: will@wbond.net\nLicense: MIT\nKeywords: asn1 crypto pki x509 certificate rsa dsa ec dh\nPlatform: UNKNOWN\nClassifier: Development Status :: 5 - Production/Stable\nClassifier: Intended Audience :: Developers\nClassifier: License :: OSI Approved :: MIT License\nClassifier: Programming Language :: Python\nClassifier: Programming Language :: Python :: 2\nClassifier: Programming Language :: Python :: 2.6\nClassifier: Programming Language :: Python :: 2.7\nClassifier: Programming Language :: Python :: 3\nClassifier: Programming Language :: Python :: 3.2\nClassifier: Programming Language :: Python :: 3.3\nClassifier: Programming Language :: Python :: 3.4\nClassifier: Programming Language :: Python :: 3.5\nClassifier: Programming Language :: Python :: 3.6\nClassifier: Programming Language :: Python :: 3.7\nClassifier: Programming Language :: Python :: 3.8\nClassifier: Programming Language :: Python :: 3.9\nClassifier: Programming Language :: Python :: 3.10\nClassifier: Programming Language :: Python :: Implementation :: CPython\nClassifier: Programming Language :: Python :: Implementation :: PyPy\nClassifier: Topic :: Security :: Cryptography\nDescription-Content-Type: text/markdown\n\n# asn1crypto\n\nA fast, pure Python library for parsing and serializing ASN.1 structures.\n\n - [Features](#features)\n - [Why Another Python ASN.1 Library?](#why-another-python-asn1-library)\n - [Related Crypto Libraries](#related-crypto-libraries)\n - [Current Release](#current-release)\n - [Dependencies](#dependencies)\n - [Installation](#installation)\n - [License](#license)\n - [Security Policy](#security-policy)\n - [Documentation](#documentation)\n - [Continuous Integration](#continuous-integration)\n - [Testing](#testing)\n - [Development](#development)\n - [CI Tasks](#ci-tasks)\n\n[![GitHub Actions CI](https://github.com/wbond/asn1crypto/workflows/CI/badge.svg)](https://github.com/wbond/asn1crypto/actions?workflow=CI)\n[![CircleCI](https://circleci.com/gh/wbond/asn1crypto.svg?style=shield)](https://circleci.com/gh/wbond/asn1crypto)\n[![PyPI](https://img.shields.io/pypi/v/asn1crypto.svg)](https://pypi.org/project/asn1crypto/)\n\n## Features\n\nIn addition to an ASN.1 BER/DER decoder and DER serializer, the project includes\na bunch of ASN.1 structures for use with various common cryptography standards:\n\n| Standard               | Module                                      | Source                                                                                                                 |\n| ---------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| X.509                  | [`asn1crypto.x509`](asn1crypto/x509.py)     | [RFC 5280](https://tools.ietf.org/html/rfc5280)                                                                        |\n| CRL                    | [`asn1crypto.crl`](asn1crypto/crl.py)       | [RFC 5280](https://tools.ietf.org/html/rfc5280)                                                                        |\n| CSR                    | [`asn1crypto.csr`](asn1crypto/csr.py)       | [RFC 2986](https://tools.ietf.org/html/rfc2986), [RFC 2985](https://tools.ietf.org/html/rfc2985)                       |\n| OCSP                   | [`asn1crypto.ocsp`](asn1crypto/ocsp.py)     | [RFC 6960](https://tools.ietf.org/html/rfc6960)                                                                        |\n| PKCS#12                | [`asn1crypto.pkcs12`](asn1crypto/pkcs12.py) | [RFC 7292](https://tools.ietf.org/html/rfc7292)                                                                        |\n| PKCS#8                 | [`asn1crypto.keys`](asn1crypto/keys.py)     | [RFC 5208](https://tools.ietf.org/html/rfc5208)                                                                        |\n| PKCS#1 v2.1 (RSA keys) | [`asn1crypto.keys`](asn1crypto/keys.py)     | [RFC 3447](https://tools.ietf.org/html/rfc3447)                                                                        |\n| DSA keys               | [`asn1crypto.keys`](asn1crypto/keys.py)     | [RFC 3279](https://tools.ietf.org/html/rfc3279)                                                                        |\n| Elliptic curve keys    | [`asn1crypto.keys`](asn1crypto/keys.py)     | [SECG SEC1 V2](http://www.secg.org/sec1-v2.pdf)                                                                        |\n| PKCS#3 v1.4            | [`asn1crypto.algos`](asn1crypto/algos.py)   | [PKCS#3 v1.4](ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-3.asc)                                                        |\n| PKCS#5 v2.1            | [`asn1crypto.algos`](asn1crypto/algos.py)   | [PKCS#5 v2.1](http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf) |\n| CMS (and PKCS#7)       | [`asn1crypto.cms`](asn1crypto/cms.py)       | [RFC 5652](https://tools.ietf.org/html/rfc5652), [RFC 2315](https://tools.ietf.org/html/rfc2315)                       |\n| TSP                    | [`asn1crypto.tsp`](asn1crypto/tsp.py)       | [RFC 3161](https://tools.ietf.org/html/rfc3161)                                                                        |\n| PDF signatures         | [`asn1crypto.pdf`](asn1crypto/pdf.py)       | [PDF 1.7](http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf)                           |\n\n## Why Another Python ASN.1 Library?\n\nPython has long had the [pyasn1](https://pypi.org/project/pyasn1/) and\n[pyasn1_modules](https://pypi.org/project/pyasn1-modules/) available for\nparsing and serializing ASN.1 structures. While the project does include a\ncomprehensive set of tools for parsing and serializing, the performance of the\nlibrary can be very poor, especially when dealing with bit fields and parsing\nlarge structures such as CRLs.\n\nAfter spending extensive time using *pyasn1*, the following issues were\nidentified:\n\n 1. Poor performance\n 2. Verbose, non-pythonic API\n 3. Out-dated and incomplete definitions in *pyasn1-modules*\n 4. No simple way to map data to native Python data structures\n 5. No mechanism for overridden universal ASN.1 types\n\nThe *pyasn1* API is largely method driven, and uses extensive configuration\nobjects and lowerCamelCase names. There were no consistent options for\nconverting types of native Python data structures. Since the project supports\nout-dated versions of Python, many newer language features are unavailable\nfor use.\n\nTime was spent trying to profile issues with the performance, however the\narchitecture made it hard to pin down the primary source of the poor\nperformance. Attempts were made to improve performance by utilizing unreleased\npatches and delaying parsing using the `Any` type. Even with such changes, the\nperformance was still unacceptably slow.\n\nFinally, a number of structures in the cryptographic space use universal data\ntypes such as `BitString` and `OctetString`, but interpret the data as other\ntypes. For instance, signatures are really byte strings, but are encoded as\n`BitString`. Elliptic curve keys use both `BitString` and `OctetString` to\nrepresent integers. Parsing these structures as the base universal types and\nthen re-interpreting them wastes computation.\n\n*asn1crypto* uses the following techniques to improve performance, especially\nwhen extracting one or two fields from large, complex structures:\n\n - Delayed parsing of byte string values\n - Persistence of original ASN.1 encoded data until a value is changed\n - Lazy loading of child fields\n - Utilization of high-level Python stdlib modules\n\nWhile there is no extensive performance test suite, the\n`CRLTests.test_parse_crl` test case was used to parse a 21MB CRL file on a\nlate 2013 rMBP. *asn1crypto* parsed the certificate serial numbers in just\nunder 8 seconds. With *pyasn1*, using definitions from *pyasn1-modules*, the\nsame parsing took over 4,100 seconds.\n\nFor smaller structures the performance difference can range from a few times\nfaster to an order of magnitude or more.\n\n## Related Crypto Libraries\n\n*asn1crypto* is part of the modularcrypto family of Python packages:\n\n - [asn1crypto](https://github.com/wbond/asn1crypto)\n - [oscrypto](https://github.com/wbond/oscrypto)\n - [csrbuilder](https://github.com/wbond/csrbuilder)\n - [certbuilder](https://github.com/wbond/certbuilder)\n - [crlbuilder](https://github.com/wbond/crlbuilder)\n - [ocspbuilder](https://github.com/wbond/ocspbuilder)\n - [certvalidator](https://github.com/wbond/certvalidator)\n\n## Current Release\n\n1.5.0 - [changelog](changelog.md)\n\n## Dependencies\n\nPython 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10 or pypy. *No third-party\npackages required.*\n\n## Installation\n\n```bash\npip install asn1crypto\n```\n\n## License\n\n*asn1crypto* is licensed under the terms of the MIT license. See the\n[LICENSE](LICENSE) file for the exact license text.\n\n## Security Policy\n\nThe security policies for this project are covered in\n[SECURITY.md](https://github.com/wbond/asn1crypto/blob/master/SECURITY.md).\n\n## Documentation\n\nThe documentation for *asn1crypto* is composed of tutorials on basic usage and\nlinks to the source for the various pre-defined type classes.\n\n### Tutorials\n\n - [Universal Types with BER/DER Decoder and DER Encoder](docs/universal_types.md)\n - [PEM Encoder and Decoder](docs/pem.md)\n\n### Reference\n\n - [Universal types](asn1crypto/core.py), `asn1crypto.core`\n - [Digest, HMAC, signed digest and encryption algorithms](asn1crypto/algos.py), `asn1crypto.algos`\n - [Private and public keys](asn1crypto/keys.py), `asn1crypto.keys`\n - [X509 certificates](asn1crypto/x509.py), `asn1crypto.x509`\n - [Certificate revocation lists (CRLs)](asn1crypto/crl.py), `asn1crypto.crl`\n - [Online certificate status protocol (OCSP)](asn1crypto/ocsp.py), `asn1crypto.ocsp`\n - [Certificate signing requests (CSRs)](asn1crypto/csr.py), `asn1crypto.csr`\n - [Private key/certificate containers (PKCS#12)](asn1crypto/pkcs12.py), `asn1crypto.pkcs12`\n - [Cryptographic message syntax (CMS, PKCS#7)](asn1crypto/cms.py), `asn1crypto.cms`\n - [Time stamp protocol (TSP)](asn1crypto/tsp.py), `asn1crypto.tsp`\n - [PDF signatures](asn1crypto/pdf.py), `asn1crypto.pdf`\n\n## Continuous Integration\n\nVarious combinations of platforms and versions of Python are tested via:\n\n - [macOS, Linux, Windows](https://github.com/wbond/asn1crypto/actions/workflows/ci.yml) via GitHub Actions\n - [arm64](https://circleci.com/gh/wbond/asn1crypto) via CircleCI\n\n## Testing\n\nTests are written using `unittest` and require no third-party packages.\n\nDepending on what type of source is available for the package, the following\ncommands can be used to run the test suite.\n\n### Git Repository\n\nWhen working within a Git working copy, or an archive of the Git repository,\nthe full test suite is run via:\n\n```bash\npython run.py tests\n```\n\nTo run only some tests, pass a regular expression as a parameter to `tests`.\n\n```bash\npython run.py tests ocsp\n```\n\n### PyPi Source Distribution\n\nWhen working within an extracted source distribution (aka `.tar.gz`) from\nPyPi, the full test suite is run via:\n\n```bash\npython setup.py test\n```\n\n### Package\n\nWhen the package has been installed via pip (or another method), the package\n`asn1crypto_tests` may be installed and invoked to run the full test suite:\n\n```bash\npip install asn1crypto_tests\npython -m asn1crypto_tests\n```\n\n## Development\n\nTo install the package used for linting, execute:\n\n```bash\npip install --user -r requires/lint\n```\n\nThe following command will run the linter:\n\n```bash\npython run.py lint\n```\n\nSupport for code coverage can be installed via:\n\n```bash\npip install --user -r requires/coverage\n```\n\nCoverage is measured by running:\n\n```bash\npython run.py coverage\n```\n\nTo change the version number of the package, run:\n\n```bash\npython run.py version {pep440_version}\n```\n\nTo install the necessary packages for releasing a new version on PyPI, run:\n\n```bash\npip install --user -r requires/release\n```\n\nReleases are created by:\n\n - Making a git tag in [PEP 440](https://www.python.org/dev/peps/pep-0440/#examples-of-compliant-version-schemes) format\n - Running the command:\n\n   ```bash\n   python run.py release\n   ```\n\nExisting releases can be found at https://pypi.org/project/asn1crypto/.\n\n## CI Tasks\n\nA task named `deps` exists to download and stage all necessary testing\ndependencies. On posix platforms, `curl` is used for downloads and on Windows\nPowerShell with `Net.WebClient` is used. This configuration sidesteps issues\nrelated to getting pip to work properly and messing with `site-packages` for\nthe version of Python being used.\n\nThe `ci` task runs `lint` (if flake8 is available for the version of Python) and\n`coverage` (or `tests` if coverage is not available for the version of Python).\nIf the current directory is a clean git working copy, the coverage data is\nsubmitted to codecov.io.\n\n```bash\npython run.py deps\npython run.py ci\n```\n\n\n"
  },
  {
    "path": "libs/asn1crypto-1.5.1.dist-info/RECORD",
    "content": "asn1crypto/__init__.py,sha256=a-8VLJazcxfecOBlxWH1IX4Crm6NvR-Lhko9GTpvnP0,1219\nasn1crypto/_errors.py,sha256=v1vyVWdO49tLugVLnKvtjr9ZddLpeKoB-yrBODOw0tg,1070\nasn1crypto/_inet.py,sha256=z2K8CKxSfEQ3d0UMIIgXw5NugKLZyRS__Cn10ivbiGM,4661\nasn1crypto/_int.py,sha256=oe3cxich5zj3gQkECl6ZnAOCn-PyYTHkG117bAl21TY,494\nasn1crypto/_iri.py,sha256=2kIP8gGIh8BXt1q_0S5KhnMzUUQIvuT0FDAYNyKeqbY,8733\nasn1crypto/_ordereddict.py,sha256=5VAYLbxxEtfdZGKgjzINxlmNkYg9d_7JmZAFfr0EcAk,4533\nasn1crypto/_teletex_codec.py,sha256=LhDpkTprPaoc7UJ9i9uwnP-5Am00SVbHSQizPpCLpqE,5053\nasn1crypto/_types.py,sha256=OwsX30epv-ETI9eGrLW9GLqv0KeoiSRnJcjN92roqhQ,939\nasn1crypto/algos.py,sha256=xCk-jnAaSwQ7a6ngsKkXVClxez0v8FuPrXjttb0sl_A,35867\nasn1crypto/cms.py,sha256=lpzlcTJ97g8dq1RPhYsOSbpQIgWkI8E0ZybQskl39hY,27776\nasn1crypto/core.py,sha256=18yPagBXGAtsmCFTuqRbWKnIy1apwoiAEj_i2Zwc9F0,170716\nasn1crypto/crl.py,sha256=KJLuEn1IDJO19X4eLYhRyaM-ACnxKkimoGsyAnzGdgA,16104\nasn1crypto/csr.py,sha256=arnYGru9S2PYCmBUXBZGKpOXiGRbh4vxONNdLOi97nU,3542\nasn1crypto/keys.py,sha256=WOiO9_KoglPron1x3FUgRmb0Eohpj40si7LOTCI2iLQ,37863\nasn1crypto/ocsp.py,sha256=2qxDGgCp2XKJ5xFHEx0jlLFkHYWdKvrtUBdGLrUVPbE,19024\nasn1crypto/parser.py,sha256=gB7P_tp4GqJjgQv5zKkVOmgdmim5cJfxyIid-TIID1I,9171\nasn1crypto/pdf.py,sha256=HNybnna5WG2ftmb8Nx_T5reyLJ0E7hJXoj37DuLbpX0,2250\nasn1crypto/pem.py,sha256=s46r_KCQ9h1HENXMh4AGKTXesivQrKnWzU3-gok75uI,6145\nasn1crypto/pkcs12.py,sha256=q-KGfvaO72B8AfvolwsqhAQpjuqnkEczPddXYLBFUSE,4566\nasn1crypto/tsp.py,sha256=DjKeZE413ukBGTfYVLnOYhsM5mNGBSN52p2puxlPapk,7825\nasn1crypto/util.py,sha256=shMpHDvcOYyDcSrlFoGqTLUhHpsTHam45u4KdRO3yww,21873\nasn1crypto/version.py,sha256=qWgDOm1ayD-9GJ1Qds22S3bBgyQAFPU5eVPg1pP8FCY,152\nasn1crypto/x509.py,sha256=ocNR41Y-C50-55oStOGnbVbtcbh3kJ6dvnyFO-cSr-0,93778\nasn1crypto-1.5.1.dist-info/LICENSE,sha256=KcNCXl2lOrhCJz5fLy8GjOLjXfQmD3-hVqoaxr7QJDM,1075\nasn1crypto-1.5.1.dist-info/METADATA,sha256=KREr_KuD0K8uSUpd5OleccUeERMlXX-CU2FgNmVQ8ZQ,13184\nasn1crypto-1.5.1.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110\nasn1crypto-1.5.1.dist-info/top_level.txt,sha256=z8-jF_Q-jgzGox7T2XYian3-yeptLS2I7MjoJLBaq1Y,11\nasn1crypto-1.5.1.dist-info/RECORD,,\n"
  },
  {
    "path": "libs/asn1crypto-1.5.1.dist-info/WHEEL",
    "content": "Wheel-Version: 1.0\nGenerator: bdist_wheel (0.37.1)\nRoot-Is-Purelib: true\nTag: py2-none-any\nTag: py3-none-any\n\n"
  },
  {
    "path": "libs/asn1crypto-1.5.1.dist-info/top_level.txt",
    "content": "asn1crypto\n"
  },
  {
    "path": "libs/click/__init__.py",
    "content": "\"\"\"\nClick is a simple Python module inspired by the stdlib optparse to make\nwriting command line scripts fun. Unlike other modules, it's based\naround a simple API that does not come with too much magic and is\ncomposable.\n\"\"\"\n\nfrom .core import Argument as Argument\nfrom .core import BaseCommand as BaseCommand\nfrom .core import Command as Command\nfrom .core import CommandCollection as CommandCollection\nfrom .core import Context as Context\nfrom .core import Group as Group\nfrom .core import MultiCommand as MultiCommand\nfrom .core import Option as Option\nfrom .core import Parameter as Parameter\nfrom .decorators import argument as argument\nfrom .decorators import command as command\nfrom .decorators import confirmation_option as confirmation_option\nfrom .decorators import group as group\nfrom .decorators import help_option as help_option\nfrom .decorators import HelpOption as HelpOption\nfrom .decorators import make_pass_decorator as make_pass_decorator\nfrom .decorators import option as option\nfrom .decorators import pass_context as pass_context\nfrom .decorators import pass_obj as pass_obj\nfrom .decorators import password_option as password_option\nfrom .decorators import version_option as version_option\nfrom .exceptions import Abort as Abort\nfrom .exceptions import BadArgumentUsage as BadArgumentUsage\nfrom .exceptions import BadOptionUsage as BadOptionUsage\nfrom .exceptions import BadParameter as BadParameter\nfrom .exceptions import ClickException as ClickException\nfrom .exceptions import FileError as FileError\nfrom .exceptions import MissingParameter as MissingParameter\nfrom .exceptions import NoSuchOption as NoSuchOption\nfrom .exceptions import UsageError as UsageError\nfrom .formatting import HelpFormatter as HelpFormatter\nfrom .formatting import wrap_text as wrap_text\nfrom .globals import get_current_context as get_current_context\nfrom .parser import OptionParser as OptionParser\nfrom .termui import clear as clear\nfrom .termui import confirm as confirm\nfrom .termui import echo_via_pager as echo_via_pager\nfrom .termui import edit as edit\nfrom .termui import getchar as getchar\nfrom .termui import launch as launch\nfrom .termui import pause as pause\nfrom .termui import progressbar as progressbar\nfrom .termui import prompt as prompt\nfrom .termui import secho as secho\nfrom .termui import style as style\nfrom .termui import unstyle as unstyle\nfrom .types import BOOL as BOOL\nfrom .types import Choice as Choice\nfrom .types import DateTime as DateTime\nfrom .types import File as File\nfrom .types import FLOAT as FLOAT\nfrom .types import FloatRange as FloatRange\nfrom .types import INT as INT\nfrom .types import IntRange as IntRange\nfrom .types import ParamType as ParamType\nfrom .types import Path as Path\nfrom .types import STRING as STRING\nfrom .types import Tuple as Tuple\nfrom .types import UNPROCESSED as UNPROCESSED\nfrom .types import UUID as UUID\nfrom .utils import echo as echo\nfrom .utils import format_filename as format_filename\nfrom .utils import get_app_dir as get_app_dir\nfrom .utils import get_binary_stream as get_binary_stream\nfrom .utils import get_text_stream as get_text_stream\nfrom .utils import open_file as open_file\n\n__version__ = \"8.1.8\"\n"
  },
  {
    "path": "libs/click/_compat.py",
    "content": "import codecs\nimport io\nimport os\nimport re\nimport sys\nimport typing as t\nfrom weakref import WeakKeyDictionary\n\nCYGWIN = sys.platform.startswith(\"cygwin\")\nWIN = sys.platform.startswith(\"win\")\nauto_wrap_for_ansi: t.Optional[t.Callable[[t.TextIO], t.TextIO]] = None\n_ansi_re = re.compile(r\"\\033\\[[;?0-9]*[a-zA-Z]\")\n\n\ndef _make_text_stream(\n    stream: t.BinaryIO,\n    encoding: t.Optional[str],\n    errors: t.Optional[str],\n    force_readable: bool = False,\n    force_writable: bool = False,\n) -> t.TextIO:\n    if encoding is None:\n        encoding = get_best_encoding(stream)\n    if errors is None:\n        errors = \"replace\"\n    return _NonClosingTextIOWrapper(\n        stream,\n        encoding,\n        errors,\n        line_buffering=True,\n        force_readable=force_readable,\n        force_writable=force_writable,\n    )\n\n\ndef is_ascii_encoding(encoding: str) -> bool:\n    \"\"\"Checks if a given encoding is ascii.\"\"\"\n    try:\n        return codecs.lookup(encoding).name == \"ascii\"\n    except LookupError:\n        return False\n\n\ndef get_best_encoding(stream: t.IO[t.Any]) -> str:\n    \"\"\"Returns the default stream encoding if not found.\"\"\"\n    rv = getattr(stream, \"encoding\", None) or sys.getdefaultencoding()\n    if is_ascii_encoding(rv):\n        return \"utf-8\"\n    return rv\n\n\nclass _NonClosingTextIOWrapper(io.TextIOWrapper):\n    def __init__(\n        self,\n        stream: t.BinaryIO,\n        encoding: t.Optional[str],\n        errors: t.Optional[str],\n        force_readable: bool = False,\n        force_writable: bool = False,\n        **extra: t.Any,\n    ) -> None:\n        self._stream = stream = t.cast(\n            t.BinaryIO, _FixupStream(stream, force_readable, force_writable)\n        )\n        super().__init__(stream, encoding, errors, **extra)\n\n    def __del__(self) -> None:\n        try:\n            self.detach()\n        except Exception:\n            pass\n\n    def isatty(self) -> bool:\n        # https://bitbucket.org/pypy/pypy/issue/1803\n        return self._stream.isatty()\n\n\nclass _FixupStream:\n    \"\"\"The new io interface needs more from streams than streams\n    traditionally implement.  As such, this fix-up code is necessary in\n    some circumstances.\n\n    The forcing of readable and writable flags are there because some tools\n    put badly patched objects on sys (one such offender are certain version\n    of jupyter notebook).\n    \"\"\"\n\n    def __init__(\n        self,\n        stream: t.BinaryIO,\n        force_readable: bool = False,\n        force_writable: bool = False,\n    ):\n        self._stream = stream\n        self._force_readable = force_readable\n        self._force_writable = force_writable\n\n    def __getattr__(self, name: str) -> t.Any:\n        return getattr(self._stream, name)\n\n    def read1(self, size: int) -> bytes:\n        f = getattr(self._stream, \"read1\", None)\n\n        if f is not None:\n            return t.cast(bytes, f(size))\n\n        return self._stream.read(size)\n\n    def readable(self) -> bool:\n        if self._force_readable:\n            return True\n        x = getattr(self._stream, \"readable\", None)\n        if x is not None:\n            return t.cast(bool, x())\n        try:\n            self._stream.read(0)\n        except Exception:\n            return False\n        return True\n\n    def writable(self) -> bool:\n        if self._force_writable:\n            return True\n        x = getattr(self._stream, \"writable\", None)\n        if x is not None:\n            return t.cast(bool, x())\n        try:\n            self._stream.write(\"\")  # type: ignore\n        except Exception:\n            try:\n                self._stream.write(b\"\")\n            except Exception:\n                return False\n        return True\n\n    def seekable(self) -> bool:\n        x = getattr(self._stream, \"seekable\", None)\n        if x is not None:\n            return t.cast(bool, x())\n        try:\n            self._stream.seek(self._stream.tell())\n        except Exception:\n            return False\n        return True\n\n\ndef _is_binary_reader(stream: t.IO[t.Any], default: bool = False) -> bool:\n    try:\n        return isinstance(stream.read(0), bytes)\n    except Exception:\n        return default\n        # This happens in some cases where the stream was already\n        # closed.  In this case, we assume the default.\n\n\ndef _is_binary_writer(stream: t.IO[t.Any], default: bool = False) -> bool:\n    try:\n        stream.write(b\"\")\n    except Exception:\n        try:\n            stream.write(\"\")\n            return False\n        except Exception:\n            pass\n        return default\n    return True\n\n\ndef _find_binary_reader(stream: t.IO[t.Any]) -> t.Optional[t.BinaryIO]:\n    # We need to figure out if the given stream is already binary.\n    # This can happen because the official docs recommend detaching\n    # the streams to get binary streams.  Some code might do this, so\n    # we need to deal with this case explicitly.\n    if _is_binary_reader(stream, False):\n        return t.cast(t.BinaryIO, stream)\n\n    buf = getattr(stream, \"buffer\", None)\n\n    # Same situation here; this time we assume that the buffer is\n    # actually binary in case it's closed.\n    if buf is not None and _is_binary_reader(buf, True):\n        return t.cast(t.BinaryIO, buf)\n\n    return None\n\n\ndef _find_binary_writer(stream: t.IO[t.Any]) -> t.Optional[t.BinaryIO]:\n    # We need to figure out if the given stream is already binary.\n    # This can happen because the official docs recommend detaching\n    # the streams to get binary streams.  Some code might do this, so\n    # we need to deal with this case explicitly.\n    if _is_binary_writer(stream, False):\n        return t.cast(t.BinaryIO, stream)\n\n    buf = getattr(stream, \"buffer\", None)\n\n    # Same situation here; this time we assume that the buffer is\n    # actually binary in case it's closed.\n    if buf is not None and _is_binary_writer(buf, True):\n        return t.cast(t.BinaryIO, buf)\n\n    return None\n\n\ndef _stream_is_misconfigured(stream: t.TextIO) -> bool:\n    \"\"\"A stream is misconfigured if its encoding is ASCII.\"\"\"\n    # If the stream does not have an encoding set, we assume it's set\n    # to ASCII.  This appears to happen in certain unittest\n    # environments.  It's not quite clear what the correct behavior is\n    # but this at least will force Click to recover somehow.\n    return is_ascii_encoding(getattr(stream, \"encoding\", None) or \"ascii\")\n\n\ndef _is_compat_stream_attr(stream: t.TextIO, attr: str, value: t.Optional[str]) -> bool:\n    \"\"\"A stream attribute is compatible if it is equal to the\n    desired value or the desired value is unset and the attribute\n    has a value.\n    \"\"\"\n    stream_value = getattr(stream, attr, None)\n    return stream_value == value or (value is None and stream_value is not None)\n\n\ndef _is_compatible_text_stream(\n    stream: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str]\n) -> bool:\n    \"\"\"Check if a stream's encoding and errors attributes are\n    compatible with the desired values.\n    \"\"\"\n    return _is_compat_stream_attr(\n        stream, \"encoding\", encoding\n    ) and _is_compat_stream_attr(stream, \"errors\", errors)\n\n\ndef _force_correct_text_stream(\n    text_stream: t.IO[t.Any],\n    encoding: t.Optional[str],\n    errors: t.Optional[str],\n    is_binary: t.Callable[[t.IO[t.Any], bool], bool],\n    find_binary: t.Callable[[t.IO[t.Any]], t.Optional[t.BinaryIO]],\n    force_readable: bool = False,\n    force_writable: bool = False,\n) -> t.TextIO:\n    if is_binary(text_stream, False):\n        binary_reader = t.cast(t.BinaryIO, text_stream)\n    else:\n        text_stream = t.cast(t.TextIO, text_stream)\n        # If the stream looks compatible, and won't default to a\n        # misconfigured ascii encoding, return it as-is.\n        if _is_compatible_text_stream(text_stream, encoding, errors) and not (\n            encoding is None and _stream_is_misconfigured(text_stream)\n        ):\n            return text_stream\n\n        # Otherwise, get the underlying binary reader.\n        possible_binary_reader = find_binary(text_stream)\n\n        # If that's not possible, silently use the original reader\n        # and get mojibake instead of exceptions.\n        if possible_binary_reader is None:\n            return text_stream\n\n        binary_reader = possible_binary_reader\n\n    # Default errors to replace instead of strict in order to get\n    # something that works.\n    if errors is None:\n        errors = \"replace\"\n\n    # Wrap the binary stream in a text stream with the correct\n    # encoding parameters.\n    return _make_text_stream(\n        binary_reader,\n        encoding,\n        errors,\n        force_readable=force_readable,\n        force_writable=force_writable,\n    )\n\n\ndef _force_correct_text_reader(\n    text_reader: t.IO[t.Any],\n    encoding: t.Optional[str],\n    errors: t.Optional[str],\n    force_readable: bool = False,\n) -> t.TextIO:\n    return _force_correct_text_stream(\n        text_reader,\n        encoding,\n        errors,\n        _is_binary_reader,\n        _find_binary_reader,\n        force_readable=force_readable,\n    )\n\n\ndef _force_correct_text_writer(\n    text_writer: t.IO[t.Any],\n    encoding: t.Optional[str],\n    errors: t.Optional[str],\n    force_writable: bool = False,\n) -> t.TextIO:\n    return _force_correct_text_stream(\n        text_writer,\n        encoding,\n        errors,\n        _is_binary_writer,\n        _find_binary_writer,\n        force_writable=force_writable,\n    )\n\n\ndef get_binary_stdin() -> t.BinaryIO:\n    reader = _find_binary_reader(sys.stdin)\n    if reader is None:\n        raise RuntimeError(\"Was not able to determine binary stream for sys.stdin.\")\n    return reader\n\n\ndef get_binary_stdout() -> t.BinaryIO:\n    writer = _find_binary_writer(sys.stdout)\n    if writer is None:\n        raise RuntimeError(\"Was not able to determine binary stream for sys.stdout.\")\n    return writer\n\n\ndef get_binary_stderr() -> t.BinaryIO:\n    writer = _find_binary_writer(sys.stderr)\n    if writer is None:\n        raise RuntimeError(\"Was not able to determine binary stream for sys.stderr.\")\n    return writer\n\n\ndef get_text_stdin(\n    encoding: t.Optional[str] = None, errors: t.Optional[str] = None\n) -> t.TextIO:\n    rv = _get_windows_console_stream(sys.stdin, encoding, errors)\n    if rv is not None:\n        return rv\n    return _force_correct_text_reader(sys.stdin, encoding, errors, force_readable=True)\n\n\ndef get_text_stdout(\n    encoding: t.Optional[str] = None, errors: t.Optional[str] = None\n) -> t.TextIO:\n    rv = _get_windows_console_stream(sys.stdout, encoding, errors)\n    if rv is not None:\n        return rv\n    return _force_correct_text_writer(sys.stdout, encoding, errors, force_writable=True)\n\n\ndef get_text_stderr(\n    encoding: t.Optional[str] = None, errors: t.Optional[str] = None\n) -> t.TextIO:\n    rv = _get_windows_console_stream(sys.stderr, encoding, errors)\n    if rv is not None:\n        return rv\n    return _force_correct_text_writer(sys.stderr, encoding, errors, force_writable=True)\n\n\ndef _wrap_io_open(\n    file: t.Union[str, \"os.PathLike[str]\", int],\n    mode: str,\n    encoding: t.Optional[str],\n    errors: t.Optional[str],\n) -> t.IO[t.Any]:\n    \"\"\"Handles not passing ``encoding`` and ``errors`` in binary mode.\"\"\"\n    if \"b\" in mode:\n        return open(file, mode)\n\n    return open(file, mode, encoding=encoding, errors=errors)\n\n\ndef open_stream(\n    filename: \"t.Union[str, os.PathLike[str]]\",\n    mode: str = \"r\",\n    encoding: t.Optional[str] = None,\n    errors: t.Optional[str] = \"strict\",\n    atomic: bool = False,\n) -> t.Tuple[t.IO[t.Any], bool]:\n    binary = \"b\" in mode\n    filename = os.fspath(filename)\n\n    # Standard streams first. These are simple because they ignore the\n    # atomic flag. Use fsdecode to handle Path(\"-\").\n    if os.fsdecode(filename) == \"-\":\n        if any(m in mode for m in [\"w\", \"a\", \"x\"]):\n            if binary:\n                return get_binary_stdout(), False\n            return get_text_stdout(encoding=encoding, errors=errors), False\n        if binary:\n            return get_binary_stdin(), False\n        return get_text_stdin(encoding=encoding, errors=errors), False\n\n    # Non-atomic writes directly go out through the regular open functions.\n    if not atomic:\n        return _wrap_io_open(filename, mode, encoding, errors), True\n\n    # Some usability stuff for atomic writes\n    if \"a\" in mode:\n        raise ValueError(\n            \"Appending to an existing file is not supported, because that\"\n            \" would involve an expensive `copy`-operation to a temporary\"\n            \" file. Open the file in normal `w`-mode and copy explicitly\"\n            \" if that's what you're after.\"\n        )\n    if \"x\" in mode:\n        raise ValueError(\"Use the `overwrite`-parameter instead.\")\n    if \"w\" not in mode:\n        raise ValueError(\"Atomic writes only make sense with `w`-mode.\")\n\n    # Atomic writes are more complicated.  They work by opening a file\n    # as a proxy in the same folder and then using the fdopen\n    # functionality to wrap it in a Python file.  Then we wrap it in an\n    # atomic file that moves the file over on close.\n    import errno\n    import random\n\n    try:\n        perm: t.Optional[int] = os.stat(filename).st_mode\n    except OSError:\n        perm = None\n\n    flags = os.O_RDWR | os.O_CREAT | os.O_EXCL\n\n    if binary:\n        flags |= getattr(os, \"O_BINARY\", 0)\n\n    while True:\n        tmp_filename = os.path.join(\n            os.path.dirname(filename),\n            f\".__atomic-write{random.randrange(1 << 32):08x}\",\n        )\n        try:\n            fd = os.open(tmp_filename, flags, 0o666 if perm is None else perm)\n            break\n        except OSError as e:\n            if e.errno == errno.EEXIST or (\n                os.name == \"nt\"\n                and e.errno == errno.EACCES\n                and os.path.isdir(e.filename)\n                and os.access(e.filename, os.W_OK)\n            ):\n                continue\n            raise\n\n    if perm is not None:\n        os.chmod(tmp_filename, perm)  # in case perm includes bits in umask\n\n    f = _wrap_io_open(fd, mode, encoding, errors)\n    af = _AtomicFile(f, tmp_filename, os.path.realpath(filename))\n    return t.cast(t.IO[t.Any], af), True\n\n\nclass _AtomicFile:\n    def __init__(self, f: t.IO[t.Any], tmp_filename: str, real_filename: str) -> None:\n        self._f = f\n        self._tmp_filename = tmp_filename\n        self._real_filename = real_filename\n        self.closed = False\n\n    @property\n    def name(self) -> str:\n        return self._real_filename\n\n    def close(self, delete: bool = False) -> None:\n        if self.closed:\n            return\n        self._f.close()\n        os.replace(self._tmp_filename, self._real_filename)\n        self.closed = True\n\n    def __getattr__(self, name: str) -> t.Any:\n        return getattr(self._f, name)\n\n    def __enter__(self) -> \"_AtomicFile\":\n        return self\n\n    def __exit__(self, exc_type: t.Optional[t.Type[BaseException]], *_: t.Any) -> None:\n        self.close(delete=exc_type is not None)\n\n    def __repr__(self) -> str:\n        return repr(self._f)\n\n\ndef strip_ansi(value: str) -> str:\n    return _ansi_re.sub(\"\", value)\n\n\ndef _is_jupyter_kernel_output(stream: t.IO[t.Any]) -> bool:\n    while isinstance(stream, (_FixupStream, _NonClosingTextIOWrapper)):\n        stream = stream._stream\n\n    return stream.__class__.__module__.startswith(\"ipykernel.\")\n\n\ndef should_strip_ansi(\n    stream: t.Optional[t.IO[t.Any]] = None, color: t.Optional[bool] = None\n) -> bool:\n    if color is None:\n        if stream is None:\n            stream = sys.stdin\n        return not isatty(stream) and not _is_jupyter_kernel_output(stream)\n    return not color\n\n\n# On Windows, wrap the output streams with colorama to support ANSI\n# color codes.\n# NOTE: double check is needed so mypy does not analyze this on Linux\nif sys.platform.startswith(\"win\") and WIN:\n    from ._winconsole import _get_windows_console_stream\n\n    def _get_argv_encoding() -> str:\n        import locale\n\n        return locale.getpreferredencoding()\n\n    _ansi_stream_wrappers: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary()\n\n    def auto_wrap_for_ansi(\n        stream: t.TextIO, color: t.Optional[bool] = None\n    ) -> t.TextIO:\n        \"\"\"Support ANSI color and style codes on Windows by wrapping a\n        stream with colorama.\n        \"\"\"\n        try:\n            cached = _ansi_stream_wrappers.get(stream)\n        except Exception:\n            cached = None\n\n        if cached is not None:\n            return cached\n\n        import colorama\n\n        strip = should_strip_ansi(stream, color)\n        ansi_wrapper = colorama.AnsiToWin32(stream, strip=strip)\n        rv = t.cast(t.TextIO, ansi_wrapper.stream)\n        _write = rv.write\n\n        def _safe_write(s):\n            try:\n                return _write(s)\n            except BaseException:\n                ansi_wrapper.reset_all()\n                raise\n\n        rv.write = _safe_write\n\n        try:\n            _ansi_stream_wrappers[stream] = rv\n        except Exception:\n            pass\n\n        return rv\n\nelse:\n\n    def _get_argv_encoding() -> str:\n        return getattr(sys.stdin, \"encoding\", None) or sys.getfilesystemencoding()\n\n    def _get_windows_console_stream(\n        f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str]\n    ) -> t.Optional[t.TextIO]:\n        return None\n\n\ndef term_len(x: str) -> int:\n    return len(strip_ansi(x))\n\n\ndef isatty(stream: t.IO[t.Any]) -> bool:\n    try:\n        return stream.isatty()\n    except Exception:\n        return False\n\n\ndef _make_cached_stream_func(\n    src_func: t.Callable[[], t.Optional[t.TextIO]],\n    wrapper_func: t.Callable[[], t.TextIO],\n) -> t.Callable[[], t.Optional[t.TextIO]]:\n    cache: t.MutableMapping[t.TextIO, t.TextIO] = WeakKeyDictionary()\n\n    def func() -> t.Optional[t.TextIO]:\n        stream = src_func()\n\n        if stream is None:\n            return None\n\n        try:\n            rv = cache.get(stream)\n        except Exception:\n            rv = None\n        if rv is not None:\n            return rv\n        rv = wrapper_func()\n        try:\n            cache[stream] = rv\n        except Exception:\n            pass\n        return rv\n\n    return func\n\n\n_default_text_stdin = _make_cached_stream_func(lambda: sys.stdin, get_text_stdin)\n_default_text_stdout = _make_cached_stream_func(lambda: sys.stdout, get_text_stdout)\n_default_text_stderr = _make_cached_stream_func(lambda: sys.stderr, get_text_stderr)\n\n\nbinary_streams: t.Mapping[str, t.Callable[[], t.BinaryIO]] = {\n    \"stdin\": get_binary_stdin,\n    \"stdout\": get_binary_stdout,\n    \"stderr\": get_binary_stderr,\n}\n\ntext_streams: t.Mapping[\n    str, t.Callable[[t.Optional[str], t.Optional[str]], t.TextIO]\n] = {\n    \"stdin\": get_text_stdin,\n    \"stdout\": get_text_stdout,\n    \"stderr\": get_text_stderr,\n}\n"
  },
  {
    "path": "libs/click/_termui_impl.py",
    "content": "\"\"\"\nThis module contains implementations for the termui module. To keep the\nimport time of Click down, some infrequently used functionality is\nplaced in this module and only imported as needed.\n\"\"\"\n\nimport contextlib\nimport math\nimport os\nimport sys\nimport time\nimport typing as t\nfrom gettext import gettext as _\nfrom io import StringIO\nfrom shutil import which\nfrom types import TracebackType\n\nfrom ._compat import _default_text_stdout\nfrom ._compat import CYGWIN\nfrom ._compat import get_best_encoding\nfrom ._compat import isatty\nfrom ._compat import open_stream\nfrom ._compat import strip_ansi\nfrom ._compat import term_len\nfrom ._compat import WIN\nfrom .exceptions import ClickException\nfrom .utils import echo\n\nV = t.TypeVar(\"V\")\n\nif os.name == \"nt\":\n    BEFORE_BAR = \"\\r\"\n    AFTER_BAR = \"\\n\"\nelse:\n    BEFORE_BAR = \"\\r\\033[?25l\"\n    AFTER_BAR = \"\\033[?25h\\n\"\n\n\nclass ProgressBar(t.Generic[V]):\n    def __init__(\n        self,\n        iterable: t.Optional[t.Iterable[V]],\n        length: t.Optional[int] = None,\n        fill_char: str = \"#\",\n        empty_char: str = \" \",\n        bar_template: str = \"%(bar)s\",\n        info_sep: str = \"  \",\n        show_eta: bool = True,\n        show_percent: t.Optional[bool] = None,\n        show_pos: bool = False,\n        item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None,\n        label: t.Optional[str] = None,\n        file: t.Optional[t.TextIO] = None,\n        color: t.Optional[bool] = None,\n        update_min_steps: int = 1,\n        width: int = 30,\n    ) -> None:\n        self.fill_char = fill_char\n        self.empty_char = empty_char\n        self.bar_template = bar_template\n        self.info_sep = info_sep\n        self.show_eta = show_eta\n        self.show_percent = show_percent\n        self.show_pos = show_pos\n        self.item_show_func = item_show_func\n        self.label: str = label or \"\"\n\n        if file is None:\n            file = _default_text_stdout()\n\n            # There are no standard streams attached to write to. For example,\n            # pythonw on Windows.\n            if file is None:\n                file = StringIO()\n\n        self.file = file\n        self.color = color\n        self.update_min_steps = update_min_steps\n        self._completed_intervals = 0\n        self.width: int = width\n        self.autowidth: bool = width == 0\n\n        if length is None:\n            from operator import length_hint\n\n            length = length_hint(iterable, -1)\n\n            if length == -1:\n                length = None\n        if iterable is None:\n            if length is None:\n                raise TypeError(\"iterable or length is required\")\n            iterable = t.cast(t.Iterable[V], range(length))\n        self.iter: t.Iterable[V] = iter(iterable)\n        self.length = length\n        self.pos = 0\n        self.avg: t.List[float] = []\n        self.last_eta: float\n        self.start: float\n        self.start = self.last_eta = time.time()\n        self.eta_known: bool = False\n        self.finished: bool = False\n        self.max_width: t.Optional[int] = None\n        self.entered: bool = False\n        self.current_item: t.Optional[V] = None\n        self.is_hidden: bool = not isatty(self.file)\n        self._last_line: t.Optional[str] = None\n\n    def __enter__(self) -> \"ProgressBar[V]\":\n        self.entered = True\n        self.render_progress()\n        return self\n\n    def __exit__(\n        self,\n        exc_type: t.Optional[t.Type[BaseException]],\n        exc_value: t.Optional[BaseException],\n        tb: t.Optional[TracebackType],\n    ) -> None:\n        self.render_finish()\n\n    def __iter__(self) -> t.Iterator[V]:\n        if not self.entered:\n            raise RuntimeError(\"You need to use progress bars in a with block.\")\n        self.render_progress()\n        return self.generator()\n\n    def __next__(self) -> V:\n        # Iteration is defined in terms of a generator function,\n        # returned by iter(self); use that to define next(). This works\n        # because `self.iter` is an iterable consumed by that generator,\n        # so it is re-entry safe. Calling `next(self.generator())`\n        # twice works and does \"what you want\".\n        return next(iter(self))\n\n    def render_finish(self) -> None:\n        if self.is_hidden:\n            return\n        self.file.write(AFTER_BAR)\n        self.file.flush()\n\n    @property\n    def pct(self) -> float:\n        if self.finished:\n            return 1.0\n        return min(self.pos / (float(self.length or 1) or 1), 1.0)\n\n    @property\n    def time_per_iteration(self) -> float:\n        if not self.avg:\n            return 0.0\n        return sum(self.avg) / float(len(self.avg))\n\n    @property\n    def eta(self) -> float:\n        if self.length is not None and not self.finished:\n            return self.time_per_iteration * (self.length - self.pos)\n        return 0.0\n\n    def format_eta(self) -> str:\n        if self.eta_known:\n            t = int(self.eta)\n            seconds = t % 60\n            t //= 60\n            minutes = t % 60\n            t //= 60\n            hours = t % 24\n            t //= 24\n            if t > 0:\n                return f\"{t}d {hours:02}:{minutes:02}:{seconds:02}\"\n            else:\n                return f\"{hours:02}:{minutes:02}:{seconds:02}\"\n        return \"\"\n\n    def format_pos(self) -> str:\n        pos = str(self.pos)\n        if self.length is not None:\n            pos += f\"/{self.length}\"\n        return pos\n\n    def format_pct(self) -> str:\n        return f\"{int(self.pct * 100): 4}%\"[1:]\n\n    def format_bar(self) -> str:\n        if self.length is not None:\n            bar_length = int(self.pct * self.width)\n            bar = self.fill_char * bar_length\n            bar += self.empty_char * (self.width - bar_length)\n        elif self.finished:\n            bar = self.fill_char * self.width\n        else:\n            chars = list(self.empty_char * (self.width or 1))\n            if self.time_per_iteration != 0:\n                chars[\n                    int(\n                        (math.cos(self.pos * self.time_per_iteration) / 2.0 + 0.5)\n                        * self.width\n                    )\n                ] = self.fill_char\n            bar = \"\".join(chars)\n        return bar\n\n    def format_progress_line(self) -> str:\n        show_percent = self.show_percent\n\n        info_bits = []\n        if self.length is not None and show_percent is None:\n            show_percent = not self.show_pos\n\n        if self.show_pos:\n            info_bits.append(self.format_pos())\n        if show_percent:\n            info_bits.append(self.format_pct())\n        if self.show_eta and self.eta_known and not self.finished:\n            info_bits.append(self.format_eta())\n        if self.item_show_func is not None:\n            item_info = self.item_show_func(self.current_item)\n            if item_info is not None:\n                info_bits.append(item_info)\n\n        return (\n            self.bar_template\n            % {\n                \"label\": self.label,\n                \"bar\": self.format_bar(),\n                \"info\": self.info_sep.join(info_bits),\n            }\n        ).rstrip()\n\n    def render_progress(self) -> None:\n        import shutil\n\n        if self.is_hidden:\n            # Only output the label as it changes if the output is not a\n            # TTY. Use file=stderr if you expect to be piping stdout.\n            if self._last_line != self.label:\n                self._last_line = self.label\n                echo(self.label, file=self.file, color=self.color)\n\n            return\n\n        buf = []\n        # Update width in case the terminal has been resized\n        if self.autowidth:\n            old_width = self.width\n            self.width = 0\n            clutter_length = term_len(self.format_progress_line())\n            new_width = max(0, shutil.get_terminal_size().columns - clutter_length)\n            if new_width < old_width:\n                buf.append(BEFORE_BAR)\n                buf.append(\" \" * self.max_width)  # type: ignore\n                self.max_width = new_width\n            self.width = new_width\n\n        clear_width = self.width\n        if self.max_width is not None:\n            clear_width = self.max_width\n\n        buf.append(BEFORE_BAR)\n        line = self.format_progress_line()\n        line_len = term_len(line)\n        if self.max_width is None or self.max_width < line_len:\n            self.max_width = line_len\n\n        buf.append(line)\n        buf.append(\" \" * (clear_width - line_len))\n        line = \"\".join(buf)\n        # Render the line only if it changed.\n\n        if line != self._last_line:\n            self._last_line = line\n            echo(line, file=self.file, color=self.color, nl=False)\n            self.file.flush()\n\n    def make_step(self, n_steps: int) -> None:\n        self.pos += n_steps\n        if self.length is not None and self.pos >= self.length:\n            self.finished = True\n\n        if (time.time() - self.last_eta) < 1.0:\n            return\n\n        self.last_eta = time.time()\n\n        # self.avg is a rolling list of length <= 7 of steps where steps are\n        # defined as time elapsed divided by the total progress through\n        # self.length.\n        if self.pos:\n            step = (time.time() - self.start) / self.pos\n        else:\n            step = time.time() - self.start\n\n        self.avg = self.avg[-6:] + [step]\n\n        self.eta_known = self.length is not None\n\n    def update(self, n_steps: int, current_item: t.Optional[V] = None) -> None:\n        \"\"\"Update the progress bar by advancing a specified number of\n        steps, and optionally set the ``current_item`` for this new\n        position.\n\n        :param n_steps: Number of steps to advance.\n        :param current_item: Optional item to set as ``current_item``\n            for the updated position.\n\n        .. versionchanged:: 8.0\n            Added the ``current_item`` optional parameter.\n\n        .. versionchanged:: 8.0\n            Only render when the number of steps meets the\n            ``update_min_steps`` threshold.\n        \"\"\"\n        if current_item is not None:\n            self.current_item = current_item\n\n        self._completed_intervals += n_steps\n\n        if self._completed_intervals >= self.update_min_steps:\n            self.make_step(self._completed_intervals)\n            self.render_progress()\n            self._completed_intervals = 0\n\n    def finish(self) -> None:\n        self.eta_known = False\n        self.current_item = None\n        self.finished = True\n\n    def generator(self) -> t.Iterator[V]:\n        \"\"\"Return a generator which yields the items added to the bar\n        during construction, and updates the progress bar *after* the\n        yielded block returns.\n        \"\"\"\n        # WARNING: the iterator interface for `ProgressBar` relies on\n        # this and only works because this is a simple generator which\n        # doesn't create or manage additional state. If this function\n        # changes, the impact should be evaluated both against\n        # `iter(bar)` and `next(bar)`. `next()` in particular may call\n        # `self.generator()` repeatedly, and this must remain safe in\n        # order for that interface to work.\n        if not self.entered:\n            raise RuntimeError(\"You need to use progress bars in a with block.\")\n\n        if self.is_hidden:\n            yield from self.iter\n        else:\n            for rv in self.iter:\n                self.current_item = rv\n\n                # This allows show_item_func to be updated before the\n                # item is processed. Only trigger at the beginning of\n                # the update interval.\n                if self._completed_intervals == 0:\n                    self.render_progress()\n\n                yield rv\n                self.update(1)\n\n            self.finish()\n            self.render_progress()\n\n\ndef pager(generator: t.Iterable[str], color: t.Optional[bool] = None) -> None:\n    \"\"\"Decide what method to use for paging through text.\"\"\"\n    stdout = _default_text_stdout()\n\n    # There are no standard streams attached to write to. For example,\n    # pythonw on Windows.\n    if stdout is None:\n        stdout = StringIO()\n\n    if not isatty(sys.stdin) or not isatty(stdout):\n        return _nullpager(stdout, generator, color)\n    pager_cmd = (os.environ.get(\"PAGER\", None) or \"\").strip()\n    if pager_cmd:\n        if WIN:\n            if _tempfilepager(generator, pager_cmd, color):\n                return\n        elif _pipepager(generator, pager_cmd, color):\n            return\n    if os.environ.get(\"TERM\") in (\"dumb\", \"emacs\"):\n        return _nullpager(stdout, generator, color)\n    if (WIN or sys.platform.startswith(\"os2\")) and _tempfilepager(\n        generator, \"more\", color\n    ):\n        return\n    if _pipepager(generator, \"less\", color):\n        return\n\n    import tempfile\n\n    fd, filename = tempfile.mkstemp()\n    os.close(fd)\n    try:\n        if _pipepager(generator, \"more\", color):\n            return\n        return _nullpager(stdout, generator, color)\n    finally:\n        os.unlink(filename)\n\n\ndef _pipepager(generator: t.Iterable[str], cmd: str, color: t.Optional[bool]) -> bool:\n    \"\"\"Page through text by feeding it to another program.  Invoking a\n    pager through this might support colors.\n\n    Returns True if the command was found, False otherwise and thus another\n    pager should be attempted.\n    \"\"\"\n    cmd_absolute = which(cmd)\n    if cmd_absolute is None:\n        return False\n\n    import subprocess\n\n    env = dict(os.environ)\n\n    # If we're piping to less we might support colors under the\n    # condition that\n    cmd_detail = cmd.rsplit(\"/\", 1)[-1].split()\n    if color is None and cmd_detail[0] == \"less\":\n        less_flags = f\"{os.environ.get('LESS', '')}{' '.join(cmd_detail[1:])}\"\n        if not less_flags:\n            env[\"LESS\"] = \"-R\"\n            color = True\n        elif \"r\" in less_flags or \"R\" in less_flags:\n            color = True\n\n    c = subprocess.Popen(\n        [cmd_absolute],\n        shell=True,\n        stdin=subprocess.PIPE,\n        env=env,\n        errors=\"replace\",\n        text=True,\n    )\n    assert c.stdin is not None\n    try:\n        for text in generator:\n            if not color:\n                text = strip_ansi(text)\n\n            c.stdin.write(text)\n    except (OSError, KeyboardInterrupt):\n        pass\n    else:\n        c.stdin.close()\n\n    # Less doesn't respect ^C, but catches it for its own UI purposes (aborting\n    # search or other commands inside less).\n    #\n    # That means when the user hits ^C, the parent process (click) terminates,\n    # but less is still alive, paging the output and messing up the terminal.\n    #\n    # If the user wants to make the pager exit on ^C, they should set\n    # `LESS='-K'`. It's not our decision to make.\n    while True:\n        try:\n            c.wait()\n        except KeyboardInterrupt:\n            pass\n        else:\n            break\n\n    return True\n\n\ndef _tempfilepager(\n    generator: t.Iterable[str],\n    cmd: str,\n    color: t.Optional[bool],\n) -> bool:\n    \"\"\"Page through text by invoking a program on a temporary file.\n\n    Returns True if the command was found, False otherwise and thus another\n    pager should be attempted.\n    \"\"\"\n    # Which is necessary for Windows, it is also recommended in the Popen docs.\n    cmd_absolute = which(cmd)\n    if cmd_absolute is None:\n        return False\n\n    import subprocess\n    import tempfile\n\n    fd, filename = tempfile.mkstemp()\n    # TODO: This never terminates if the passed generator never terminates.\n    text = \"\".join(generator)\n    if not color:\n        text = strip_ansi(text)\n    encoding = get_best_encoding(sys.stdout)\n    with open_stream(filename, \"wb\")[0] as f:\n        f.write(text.encode(encoding))\n    try:\n        subprocess.call([cmd_absolute, filename])\n    except OSError:\n        # Command not found\n        pass\n    finally:\n        os.close(fd)\n        os.unlink(filename)\n\n    return True\n\n\ndef _nullpager(\n    stream: t.TextIO, generator: t.Iterable[str], color: t.Optional[bool]\n) -> None:\n    \"\"\"Simply print unformatted text.  This is the ultimate fallback.\"\"\"\n    for text in generator:\n        if not color:\n            text = strip_ansi(text)\n        stream.write(text)\n\n\nclass Editor:\n    def __init__(\n        self,\n        editor: t.Optional[str] = None,\n        env: t.Optional[t.Mapping[str, str]] = None,\n        require_save: bool = True,\n        extension: str = \".txt\",\n    ) -> None:\n        self.editor = editor\n        self.env = env\n        self.require_save = require_save\n        self.extension = extension\n\n    def get_editor(self) -> str:\n        if self.editor is not None:\n            return self.editor\n        for key in \"VISUAL\", \"EDITOR\":\n            rv = os.environ.get(key)\n            if rv:\n                return rv\n        if WIN:\n            return \"notepad\"\n        for editor in \"sensible-editor\", \"vim\", \"nano\":\n            if which(editor) is not None:\n                return editor\n        return \"vi\"\n\n    def edit_file(self, filename: str) -> None:\n        import subprocess\n\n        editor = self.get_editor()\n        environ: t.Optional[t.Dict[str, str]] = None\n\n        if self.env:\n            environ = os.environ.copy()\n            environ.update(self.env)\n\n        try:\n            c = subprocess.Popen(f'{editor} \"{filename}\"', env=environ, shell=True)\n            exit_code = c.wait()\n            if exit_code != 0:\n                raise ClickException(\n                    _(\"{editor}: Editing failed\").format(editor=editor)\n                )\n        except OSError as e:\n            raise ClickException(\n                _(\"{editor}: Editing failed: {e}\").format(editor=editor, e=e)\n            ) from e\n\n    def edit(self, text: t.Optional[t.AnyStr]) -> t.Optional[t.AnyStr]:\n        import tempfile\n\n        if not text:\n            data = b\"\"\n        elif isinstance(text, (bytes, bytearray)):\n            data = text\n        else:\n            if text and not text.endswith(\"\\n\"):\n                text += \"\\n\"\n\n            if WIN:\n                data = text.replace(\"\\n\", \"\\r\\n\").encode(\"utf-8-sig\")\n            else:\n                data = text.encode(\"utf-8\")\n\n        fd, name = tempfile.mkstemp(prefix=\"editor-\", suffix=self.extension)\n        f: t.BinaryIO\n\n        try:\n            with os.fdopen(fd, \"wb\") as f:\n                f.write(data)\n\n            # If the filesystem resolution is 1 second, like Mac OS\n            # 10.12 Extended, or 2 seconds, like FAT32, and the editor\n            # closes very fast, require_save can fail. Set the modified\n            # time to be 2 seconds in the past to work around this.\n            os.utime(name, (os.path.getatime(name), os.path.getmtime(name) - 2))\n            # Depending on the resolution, the exact value might not be\n            # recorded, so get the new recorded value.\n            timestamp = os.path.getmtime(name)\n\n            self.edit_file(name)\n\n            if self.require_save and os.path.getmtime(name) == timestamp:\n                return None\n\n            with open(name, \"rb\") as f:\n                rv = f.read()\n\n            if isinstance(text, (bytes, bytearray)):\n                return rv\n\n            return rv.decode(\"utf-8-sig\").replace(\"\\r\\n\", \"\\n\")  # type: ignore\n        finally:\n            os.unlink(name)\n\n\ndef open_url(url: str, wait: bool = False, locate: bool = False) -> int:\n    import subprocess\n\n    def _unquote_file(url: str) -> str:\n        from urllib.parse import unquote\n\n        if url.startswith(\"file://\"):\n            url = unquote(url[7:])\n\n        return url\n\n    if sys.platform == \"darwin\":\n        args = [\"open\"]\n        if wait:\n            args.append(\"-W\")\n        if locate:\n            args.append(\"-R\")\n        args.append(_unquote_file(url))\n        null = open(\"/dev/null\", \"w\")\n        try:\n            return subprocess.Popen(args, stderr=null).wait()\n        finally:\n            null.close()\n    elif WIN:\n        if locate:\n            url = _unquote_file(url)\n            args = [\"explorer\", f\"/select,{url}\"]\n        else:\n            args = [\"start\"]\n            if wait:\n                args.append(\"/WAIT\")\n            args.append(\"\")\n            args.append(url)\n        try:\n            return subprocess.call(args)\n        except OSError:\n            # Command not found\n            return 127\n    elif CYGWIN:\n        if locate:\n            url = _unquote_file(url)\n            args = [\"cygstart\", os.path.dirname(url)]\n        else:\n            args = [\"cygstart\"]\n            if wait:\n                args.append(\"-w\")\n            args.append(url)\n        try:\n            return subprocess.call(args)\n        except OSError:\n            # Command not found\n            return 127\n\n    try:\n        if locate:\n            url = os.path.dirname(_unquote_file(url)) or \".\"\n        else:\n            url = _unquote_file(url)\n        c = subprocess.Popen([\"xdg-open\", url])\n        if wait:\n            return c.wait()\n        return 0\n    except OSError:\n        if url.startswith((\"http://\", \"https://\")) and not locate and not wait:\n            import webbrowser\n\n            webbrowser.open(url)\n            return 0\n        return 1\n\n\ndef _translate_ch_to_exc(ch: str) -> t.Optional[BaseException]:\n    if ch == \"\\x03\":\n        raise KeyboardInterrupt()\n\n    if ch == \"\\x04\" and not WIN:  # Unix-like, Ctrl+D\n        raise EOFError()\n\n    if ch == \"\\x1a\" and WIN:  # Windows, Ctrl+Z\n        raise EOFError()\n\n    return None\n\n\nif WIN:\n    import msvcrt\n\n    @contextlib.contextmanager\n    def raw_terminal() -> t.Iterator[int]:\n        yield -1\n\n    def getchar(echo: bool) -> str:\n        # The function `getch` will return a bytes object corresponding to\n        # the pressed character. Since Windows 10 build 1803, it will also\n        # return \\x00 when called a second time after pressing a regular key.\n        #\n        # `getwch` does not share this probably-bugged behavior. Moreover, it\n        # returns a Unicode object by default, which is what we want.\n        #\n        # Either of these functions will return \\x00 or \\xe0 to indicate\n        # a special key, and you need to call the same function again to get\n        # the \"rest\" of the code. The fun part is that \\u00e0 is\n        # \"latin small letter a with grave\", so if you type that on a French\n        # keyboard, you _also_ get a \\xe0.\n        # E.g., consider the Up arrow. This returns \\xe0 and then \\x48. The\n        # resulting Unicode string reads as \"a with grave\" + \"capital H\".\n        # This is indistinguishable from when the user actually types\n        # \"a with grave\" and then \"capital H\".\n        #\n        # When \\xe0 is returned, we assume it's part of a special-key sequence\n        # and call `getwch` again, but that means that when the user types\n        # the \\u00e0 character, `getchar` doesn't return until a second\n        # character is typed.\n        # The alternative is returning immediately, but that would mess up\n        # cross-platform handling of arrow keys and others that start with\n        # \\xe0. Another option is using `getch`, but then we can't reliably\n        # read non-ASCII characters, because return values of `getch` are\n        # limited to the current 8-bit codepage.\n        #\n        # Anyway, Click doesn't claim to do this Right(tm), and using `getwch`\n        # is doing the right thing in more situations than with `getch`.\n        func: t.Callable[[], str]\n\n        if echo:\n            func = msvcrt.getwche  # type: ignore\n        else:\n            func = msvcrt.getwch  # type: ignore\n\n        rv = func()\n\n        if rv in (\"\\x00\", \"\\xe0\"):\n            # \\x00 and \\xe0 are control characters that indicate special key,\n            # see above.\n            rv += func()\n\n        _translate_ch_to_exc(rv)\n        return rv\n\nelse:\n    import termios\n    import tty\n\n    @contextlib.contextmanager\n    def raw_terminal() -> t.Iterator[int]:\n        f: t.Optional[t.TextIO]\n        fd: int\n\n        if not isatty(sys.stdin):\n            f = open(\"/dev/tty\")\n            fd = f.fileno()\n        else:\n            fd = sys.stdin.fileno()\n            f = None\n\n        try:\n            old_settings = termios.tcgetattr(fd)\n\n            try:\n                tty.setraw(fd)\n                yield fd\n            finally:\n                termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)\n                sys.stdout.flush()\n\n                if f is not None:\n                    f.close()\n        except termios.error:\n            pass\n\n    def getchar(echo: bool) -> str:\n        with raw_terminal() as fd:\n            ch = os.read(fd, 32).decode(get_best_encoding(sys.stdin), \"replace\")\n\n            if echo and isatty(sys.stdout):\n                sys.stdout.write(ch)\n\n            _translate_ch_to_exc(ch)\n            return ch\n"
  },
  {
    "path": "libs/click/_textwrap.py",
    "content": "import textwrap\nimport typing as t\nfrom contextlib import contextmanager\n\n\nclass TextWrapper(textwrap.TextWrapper):\n    def _handle_long_word(\n        self,\n        reversed_chunks: t.List[str],\n        cur_line: t.List[str],\n        cur_len: int,\n        width: int,\n    ) -> None:\n        space_left = max(width - cur_len, 1)\n\n        if self.break_long_words:\n            last = reversed_chunks[-1]\n            cut = last[:space_left]\n            res = last[space_left:]\n            cur_line.append(cut)\n            reversed_chunks[-1] = res\n        elif not cur_line:\n            cur_line.append(reversed_chunks.pop())\n\n    @contextmanager\n    def extra_indent(self, indent: str) -> t.Iterator[None]:\n        old_initial_indent = self.initial_indent\n        old_subsequent_indent = self.subsequent_indent\n        self.initial_indent += indent\n        self.subsequent_indent += indent\n\n        try:\n            yield\n        finally:\n            self.initial_indent = old_initial_indent\n            self.subsequent_indent = old_subsequent_indent\n\n    def indent_only(self, text: str) -> str:\n        rv = []\n\n        for idx, line in enumerate(text.splitlines()):\n            indent = self.initial_indent\n\n            if idx > 0:\n                indent = self.subsequent_indent\n\n            rv.append(f\"{indent}{line}\")\n\n        return \"\\n\".join(rv)\n"
  },
  {
    "path": "libs/click/_winconsole.py",
    "content": "# This module is based on the excellent work by Adam Bartoš who\n# provided a lot of what went into the implementation here in\n# the discussion to issue1602 in the Python bug tracker.\n#\n# There are some general differences in regards to how this works\n# compared to the original patches as we do not need to patch\n# the entire interpreter but just work in our little world of\n# echo and prompt.\nimport io\nimport sys\nimport time\nimport typing as t\nfrom ctypes import byref\nfrom ctypes import c_char\nfrom ctypes import c_char_p\nfrom ctypes import c_int\nfrom ctypes import c_ssize_t\nfrom ctypes import c_ulong\nfrom ctypes import c_void_p\nfrom ctypes import POINTER\nfrom ctypes import py_object\nfrom ctypes import Structure\nfrom ctypes.wintypes import DWORD\nfrom ctypes.wintypes import HANDLE\nfrom ctypes.wintypes import LPCWSTR\nfrom ctypes.wintypes import LPWSTR\n\nfrom ._compat import _NonClosingTextIOWrapper\n\nassert sys.platform == \"win32\"\nimport msvcrt  # noqa: E402\nfrom ctypes import windll  # noqa: E402\nfrom ctypes import WINFUNCTYPE  # noqa: E402\n\nc_ssize_p = POINTER(c_ssize_t)\n\nkernel32 = windll.kernel32\nGetStdHandle = kernel32.GetStdHandle\nReadConsoleW = kernel32.ReadConsoleW\nWriteConsoleW = kernel32.WriteConsoleW\nGetConsoleMode = kernel32.GetConsoleMode\nGetLastError = kernel32.GetLastError\nGetCommandLineW = WINFUNCTYPE(LPWSTR)((\"GetCommandLineW\", windll.kernel32))\nCommandLineToArgvW = WINFUNCTYPE(POINTER(LPWSTR), LPCWSTR, POINTER(c_int))(\n    (\"CommandLineToArgvW\", windll.shell32)\n)\nLocalFree = WINFUNCTYPE(c_void_p, c_void_p)((\"LocalFree\", windll.kernel32))\n\nSTDIN_HANDLE = GetStdHandle(-10)\nSTDOUT_HANDLE = GetStdHandle(-11)\nSTDERR_HANDLE = GetStdHandle(-12)\n\nPyBUF_SIMPLE = 0\nPyBUF_WRITABLE = 1\n\nERROR_SUCCESS = 0\nERROR_NOT_ENOUGH_MEMORY = 8\nERROR_OPERATION_ABORTED = 995\n\nSTDIN_FILENO = 0\nSTDOUT_FILENO = 1\nSTDERR_FILENO = 2\n\nEOF = b\"\\x1a\"\nMAX_BYTES_WRITTEN = 32767\n\ntry:\n    from ctypes import pythonapi\nexcept ImportError:\n    # On PyPy we cannot get buffers so our ability to operate here is\n    # severely limited.\n    get_buffer = None\nelse:\n\n    class Py_buffer(Structure):\n        _fields_ = [\n            (\"buf\", c_void_p),\n            (\"obj\", py_object),\n            (\"len\", c_ssize_t),\n            (\"itemsize\", c_ssize_t),\n            (\"readonly\", c_int),\n            (\"ndim\", c_int),\n            (\"format\", c_char_p),\n            (\"shape\", c_ssize_p),\n            (\"strides\", c_ssize_p),\n            (\"suboffsets\", c_ssize_p),\n            (\"internal\", c_void_p),\n        ]\n\n    PyObject_GetBuffer = pythonapi.PyObject_GetBuffer\n    PyBuffer_Release = pythonapi.PyBuffer_Release\n\n    def get_buffer(obj, writable=False):\n        buf = Py_buffer()\n        flags = PyBUF_WRITABLE if writable else PyBUF_SIMPLE\n        PyObject_GetBuffer(py_object(obj), byref(buf), flags)\n\n        try:\n            buffer_type = c_char * buf.len\n            return buffer_type.from_address(buf.buf)\n        finally:\n            PyBuffer_Release(byref(buf))\n\n\nclass _WindowsConsoleRawIOBase(io.RawIOBase):\n    def __init__(self, handle):\n        self.handle = handle\n\n    def isatty(self):\n        super().isatty()\n        return True\n\n\nclass _WindowsConsoleReader(_WindowsConsoleRawIOBase):\n    def readable(self):\n        return True\n\n    def readinto(self, b):\n        bytes_to_be_read = len(b)\n        if not bytes_to_be_read:\n            return 0\n        elif bytes_to_be_read % 2:\n            raise ValueError(\n                \"cannot read odd number of bytes from UTF-16-LE encoded console\"\n            )\n\n        buffer = get_buffer(b, writable=True)\n        code_units_to_be_read = bytes_to_be_read // 2\n        code_units_read = c_ulong()\n\n        rv = ReadConsoleW(\n            HANDLE(self.handle),\n            buffer,\n            code_units_to_be_read,\n            byref(code_units_read),\n            None,\n        )\n        if GetLastError() == ERROR_OPERATION_ABORTED:\n            # wait for KeyboardInterrupt\n            time.sleep(0.1)\n        if not rv:\n            raise OSError(f\"Windows error: {GetLastError()}\")\n\n        if buffer[0] == EOF:\n            return 0\n        return 2 * code_units_read.value\n\n\nclass _WindowsConsoleWriter(_WindowsConsoleRawIOBase):\n    def writable(self):\n        return True\n\n    @staticmethod\n    def _get_error_message(errno):\n        if errno == ERROR_SUCCESS:\n            return \"ERROR_SUCCESS\"\n        elif errno == ERROR_NOT_ENOUGH_MEMORY:\n            return \"ERROR_NOT_ENOUGH_MEMORY\"\n        return f\"Windows error {errno}\"\n\n    def write(self, b):\n        bytes_to_be_written = len(b)\n        buf = get_buffer(b)\n        code_units_to_be_written = min(bytes_to_be_written, MAX_BYTES_WRITTEN) // 2\n        code_units_written = c_ulong()\n\n        WriteConsoleW(\n            HANDLE(self.handle),\n            buf,\n            code_units_to_be_written,\n            byref(code_units_written),\n            None,\n        )\n        bytes_written = 2 * code_units_written.value\n\n        if bytes_written == 0 and bytes_to_be_written > 0:\n            raise OSError(self._get_error_message(GetLastError()))\n        return bytes_written\n\n\nclass ConsoleStream:\n    def __init__(self, text_stream: t.TextIO, byte_stream: t.BinaryIO) -> None:\n        self._text_stream = text_stream\n        self.buffer = byte_stream\n\n    @property\n    def name(self) -> str:\n        return self.buffer.name\n\n    def write(self, x: t.AnyStr) -> int:\n        if isinstance(x, str):\n            return self._text_stream.write(x)\n        try:\n            self.flush()\n        except Exception:\n            pass\n        return self.buffer.write(x)\n\n    def writelines(self, lines: t.Iterable[t.AnyStr]) -> None:\n        for line in lines:\n            self.write(line)\n\n    def __getattr__(self, name: str) -> t.Any:\n        return getattr(self._text_stream, name)\n\n    def isatty(self) -> bool:\n        return self.buffer.isatty()\n\n    def __repr__(self):\n        return f\"<ConsoleStream name={self.name!r} encoding={self.encoding!r}>\"\n\n\ndef _get_text_stdin(buffer_stream: t.BinaryIO) -> t.TextIO:\n    text_stream = _NonClosingTextIOWrapper(\n        io.BufferedReader(_WindowsConsoleReader(STDIN_HANDLE)),\n        \"utf-16-le\",\n        \"strict\",\n        line_buffering=True,\n    )\n    return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream))\n\n\ndef _get_text_stdout(buffer_stream: t.BinaryIO) -> t.TextIO:\n    text_stream = _NonClosingTextIOWrapper(\n        io.BufferedWriter(_WindowsConsoleWriter(STDOUT_HANDLE)),\n        \"utf-16-le\",\n        \"strict\",\n        line_buffering=True,\n    )\n    return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream))\n\n\ndef _get_text_stderr(buffer_stream: t.BinaryIO) -> t.TextIO:\n    text_stream = _NonClosingTextIOWrapper(\n        io.BufferedWriter(_WindowsConsoleWriter(STDERR_HANDLE)),\n        \"utf-16-le\",\n        \"strict\",\n        line_buffering=True,\n    )\n    return t.cast(t.TextIO, ConsoleStream(text_stream, buffer_stream))\n\n\n_stream_factories: t.Mapping[int, t.Callable[[t.BinaryIO], t.TextIO]] = {\n    0: _get_text_stdin,\n    1: _get_text_stdout,\n    2: _get_text_stderr,\n}\n\n\ndef _is_console(f: t.TextIO) -> bool:\n    if not hasattr(f, \"fileno\"):\n        return False\n\n    try:\n        fileno = f.fileno()\n    except (OSError, io.UnsupportedOperation):\n        return False\n\n    handle = msvcrt.get_osfhandle(fileno)\n    return bool(GetConsoleMode(handle, byref(DWORD())))\n\n\ndef _get_windows_console_stream(\n    f: t.TextIO, encoding: t.Optional[str], errors: t.Optional[str]\n) -> t.Optional[t.TextIO]:\n    if (\n        get_buffer is not None\n        and encoding in {\"utf-16-le\", None}\n        and errors in {\"strict\", None}\n        and _is_console(f)\n    ):\n        func = _stream_factories.get(f.fileno())\n        if func is not None:\n            b = getattr(f, \"buffer\", None)\n\n            if b is None:\n                return None\n\n            return func(b)\n"
  },
  {
    "path": "libs/click/core.py",
    "content": "import enum\nimport errno\nimport inspect\nimport os\nimport sys\nimport typing as t\nfrom collections import abc\nfrom contextlib import contextmanager\nfrom contextlib import ExitStack\nfrom functools import update_wrapper\nfrom gettext import gettext as _\nfrom gettext import ngettext\nfrom itertools import repeat\nfrom types import TracebackType\n\nfrom . import types\nfrom .exceptions import Abort\nfrom .exceptions import BadParameter\nfrom .exceptions import ClickException\nfrom .exceptions import Exit\nfrom .exceptions import MissingParameter\nfrom .exceptions import UsageError\nfrom .formatting import HelpFormatter\nfrom .formatting import join_options\nfrom .globals import pop_context\nfrom .globals import push_context\nfrom .parser import _flag_needs_value\nfrom .parser import OptionParser\nfrom .parser import split_opt\nfrom .termui import confirm\nfrom .termui import prompt\nfrom .termui import style\nfrom .utils import _detect_program_name\nfrom .utils import _expand_args\nfrom .utils import echo\nfrom .utils import make_default_short_help\nfrom .utils import make_str\nfrom .utils import PacifyFlushWrapper\n\nif t.TYPE_CHECKING:\n    import typing_extensions as te\n\n    from .decorators import HelpOption\n    from .shell_completion import CompletionItem\n\nF = t.TypeVar(\"F\", bound=t.Callable[..., t.Any])\nV = t.TypeVar(\"V\")\n\n\ndef _complete_visible_commands(\n    ctx: \"Context\", incomplete: str\n) -> t.Iterator[t.Tuple[str, \"Command\"]]:\n    \"\"\"List all the subcommands of a group that start with the\n    incomplete value and aren't hidden.\n\n    :param ctx: Invocation context for the group.\n    :param incomplete: Value being completed. May be empty.\n    \"\"\"\n    multi = t.cast(MultiCommand, ctx.command)\n\n    for name in multi.list_commands(ctx):\n        if name.startswith(incomplete):\n            command = multi.get_command(ctx, name)\n\n            if command is not None and not command.hidden:\n                yield name, command\n\n\ndef _check_multicommand(\n    base_command: \"MultiCommand\", cmd_name: str, cmd: \"Command\", register: bool = False\n) -> None:\n    if not base_command.chain or not isinstance(cmd, MultiCommand):\n        return\n    if register:\n        hint = (\n            \"It is not possible to add multi commands as children to\"\n            \" another multi command that is in chain mode.\"\n        )\n    else:\n        hint = (\n            \"Found a multi command as subcommand to a multi command\"\n            \" that is in chain mode. This is not supported.\"\n        )\n    raise RuntimeError(\n        f\"{hint}. Command {base_command.name!r} is set to chain and\"\n        f\" {cmd_name!r} was added as a subcommand but it in itself is a\"\n        f\" multi command. ({cmd_name!r} is a {type(cmd).__name__}\"\n        f\" within a chained {type(base_command).__name__} named\"\n        f\" {base_command.name!r}).\"\n    )\n\n\ndef batch(iterable: t.Iterable[V], batch_size: int) -> t.List[t.Tuple[V, ...]]:\n    return list(zip(*repeat(iter(iterable), batch_size)))\n\n\n@contextmanager\ndef augment_usage_errors(\n    ctx: \"Context\", param: t.Optional[\"Parameter\"] = None\n) -> t.Iterator[None]:\n    \"\"\"Context manager that attaches extra information to exceptions.\"\"\"\n    try:\n        yield\n    except BadParameter as e:\n        if e.ctx is None:\n            e.ctx = ctx\n        if param is not None and e.param is None:\n            e.param = param\n        raise\n    except UsageError as e:\n        if e.ctx is None:\n            e.ctx = ctx\n        raise\n\n\ndef iter_params_for_processing(\n    invocation_order: t.Sequence[\"Parameter\"],\n    declaration_order: t.Sequence[\"Parameter\"],\n) -> t.List[\"Parameter\"]:\n    \"\"\"Returns all declared parameters in the order they should be processed.\n\n    The declared parameters are re-shuffled depending on the order in which\n    they were invoked, as well as the eagerness of each parameters.\n\n    The invocation order takes precedence over the declaration order. I.e. the\n    order in which the user provided them to the CLI is respected.\n\n    This behavior and its effect on callback evaluation is detailed at:\n    https://click.palletsprojects.com/en/stable/advanced/#callback-evaluation-order\n    \"\"\"\n\n    def sort_key(item: \"Parameter\") -> t.Tuple[bool, float]:\n        try:\n            idx: float = invocation_order.index(item)\n        except ValueError:\n            idx = float(\"inf\")\n\n        return not item.is_eager, idx\n\n    return sorted(declaration_order, key=sort_key)\n\n\nclass ParameterSource(enum.Enum):\n    \"\"\"This is an :class:`~enum.Enum` that indicates the source of a\n    parameter's value.\n\n    Use :meth:`click.Context.get_parameter_source` to get the\n    source for a parameter by name.\n\n    .. versionchanged:: 8.0\n        Use :class:`~enum.Enum` and drop the ``validate`` method.\n\n    .. versionchanged:: 8.0\n        Added the ``PROMPT`` value.\n    \"\"\"\n\n    COMMANDLINE = enum.auto()\n    \"\"\"The value was provided by the command line args.\"\"\"\n    ENVIRONMENT = enum.auto()\n    \"\"\"The value was provided with an environment variable.\"\"\"\n    DEFAULT = enum.auto()\n    \"\"\"Used the default specified by the parameter.\"\"\"\n    DEFAULT_MAP = enum.auto()\n    \"\"\"Used a default provided by :attr:`Context.default_map`.\"\"\"\n    PROMPT = enum.auto()\n    \"\"\"Used a prompt to confirm a default or provide a value.\"\"\"\n\n\nclass Context:\n    \"\"\"The context is a special internal object that holds state relevant\n    for the script execution at every single level.  It's normally invisible\n    to commands unless they opt-in to getting access to it.\n\n    The context is useful as it can pass internal objects around and can\n    control special execution features such as reading data from\n    environment variables.\n\n    A context can be used as context manager in which case it will call\n    :meth:`close` on teardown.\n\n    :param command: the command class for this context.\n    :param parent: the parent context.\n    :param info_name: the info name for this invocation.  Generally this\n                      is the most descriptive name for the script or\n                      command.  For the toplevel script it is usually\n                      the name of the script, for commands below it it's\n                      the name of the script.\n    :param obj: an arbitrary object of user data.\n    :param auto_envvar_prefix: the prefix to use for automatic environment\n                               variables.  If this is `None` then reading\n                               from environment variables is disabled.  This\n                               does not affect manually set environment\n                               variables which are always read.\n    :param default_map: a dictionary (like object) with default values\n                        for parameters.\n    :param terminal_width: the width of the terminal.  The default is\n                           inherit from parent context.  If no context\n                           defines the terminal width then auto\n                           detection will be applied.\n    :param max_content_width: the maximum width for content rendered by\n                              Click (this currently only affects help\n                              pages).  This defaults to 80 characters if\n                              not overridden.  In other words: even if the\n                              terminal is larger than that, Click will not\n                              format things wider than 80 characters by\n                              default.  In addition to that, formatters might\n                              add some safety mapping on the right.\n    :param resilient_parsing: if this flag is enabled then Click will\n                              parse without any interactivity or callback\n                              invocation.  Default values will also be\n                              ignored.  This is useful for implementing\n                              things such as completion support.\n    :param allow_extra_args: if this is set to `True` then extra arguments\n                             at the end will not raise an error and will be\n                             kept on the context.  The default is to inherit\n                             from the command.\n    :param allow_interspersed_args: if this is set to `False` then options\n                                    and arguments cannot be mixed.  The\n                                    default is to inherit from the command.\n    :param ignore_unknown_options: instructs click to ignore options it does\n                                   not know and keeps them for later\n                                   processing.\n    :param help_option_names: optionally a list of strings that define how\n                              the default help parameter is named.  The\n                              default is ``['--help']``.\n    :param token_normalize_func: an optional function that is used to\n                                 normalize tokens (options, choices,\n                                 etc.).  This for instance can be used to\n                                 implement case insensitive behavior.\n    :param color: controls if the terminal supports ANSI colors or not.  The\n                  default is autodetection.  This is only needed if ANSI\n                  codes are used in texts that Click prints which is by\n                  default not the case.  This for instance would affect\n                  help output.\n    :param show_default: Show the default value for commands. If this\n        value is not set, it defaults to the value from the parent\n        context. ``Command.show_default`` overrides this default for the\n        specific command.\n\n    .. versionchanged:: 8.1\n        The ``show_default`` parameter is overridden by\n        ``Command.show_default``, instead of the other way around.\n\n    .. versionchanged:: 8.0\n        The ``show_default`` parameter defaults to the value from the\n        parent context.\n\n    .. versionchanged:: 7.1\n       Added the ``show_default`` parameter.\n\n    .. versionchanged:: 4.0\n        Added the ``color``, ``ignore_unknown_options``, and\n        ``max_content_width`` parameters.\n\n    .. versionchanged:: 3.0\n        Added the ``allow_extra_args`` and ``allow_interspersed_args``\n        parameters.\n\n    .. versionchanged:: 2.0\n        Added the ``resilient_parsing``, ``help_option_names``, and\n        ``token_normalize_func`` parameters.\n    \"\"\"\n\n    #: The formatter class to create with :meth:`make_formatter`.\n    #:\n    #: .. versionadded:: 8.0\n    formatter_class: t.Type[\"HelpFormatter\"] = HelpFormatter\n\n    def __init__(\n        self,\n        command: \"Command\",\n        parent: t.Optional[\"Context\"] = None,\n        info_name: t.Optional[str] = None,\n        obj: t.Optional[t.Any] = None,\n        auto_envvar_prefix: t.Optional[str] = None,\n        default_map: t.Optional[t.MutableMapping[str, t.Any]] = None,\n        terminal_width: t.Optional[int] = None,\n        max_content_width: t.Optional[int] = None,\n        resilient_parsing: bool = False,\n        allow_extra_args: t.Optional[bool] = None,\n        allow_interspersed_args: t.Optional[bool] = None,\n        ignore_unknown_options: t.Optional[bool] = None,\n        help_option_names: t.Optional[t.List[str]] = None,\n        token_normalize_func: t.Optional[t.Callable[[str], str]] = None,\n        color: t.Optional[bool] = None,\n        show_default: t.Optional[bool] = None,\n    ) -> None:\n        #: the parent context or `None` if none exists.\n        self.parent = parent\n        #: the :class:`Command` for this context.\n        self.command = command\n        #: the descriptive information name\n        self.info_name = info_name\n        #: Map of parameter names to their parsed values. Parameters\n        #: with ``expose_value=False`` are not stored.\n        self.params: t.Dict[str, t.Any] = {}\n        #: the leftover arguments.\n        self.args: t.List[str] = []\n        #: protected arguments.  These are arguments that are prepended\n        #: to `args` when certain parsing scenarios are encountered but\n        #: must be never propagated to another arguments.  This is used\n        #: to implement nested parsing.\n        self.protected_args: t.List[str] = []\n        #: the collected prefixes of the command's options.\n        self._opt_prefixes: t.Set[str] = set(parent._opt_prefixes) if parent else set()\n\n        if obj is None and parent is not None:\n            obj = parent.obj\n\n        #: the user object stored.\n        self.obj: t.Any = obj\n        self._meta: t.Dict[str, t.Any] = getattr(parent, \"meta\", {})\n\n        #: A dictionary (-like object) with defaults for parameters.\n        if (\n            default_map is None\n            and info_name is not None\n            and parent is not None\n            and parent.default_map is not None\n        ):\n            default_map = parent.default_map.get(info_name)\n\n        self.default_map: t.Optional[t.MutableMapping[str, t.Any]] = default_map\n\n        #: This flag indicates if a subcommand is going to be executed. A\n        #: group callback can use this information to figure out if it's\n        #: being executed directly or because the execution flow passes\n        #: onwards to a subcommand. By default it's None, but it can be\n        #: the name of the subcommand to execute.\n        #:\n        #: If chaining is enabled this will be set to ``'*'`` in case\n        #: any commands are executed.  It is however not possible to\n        #: figure out which ones.  If you require this knowledge you\n        #: should use a :func:`result_callback`.\n        self.invoked_subcommand: t.Optional[str] = None\n\n        if terminal_width is None and parent is not None:\n            terminal_width = parent.terminal_width\n\n        #: The width of the terminal (None is autodetection).\n        self.terminal_width: t.Optional[int] = terminal_width\n\n        if max_content_width is None and parent is not None:\n            max_content_width = parent.max_content_width\n\n        #: The maximum width of formatted content (None implies a sensible\n        #: default which is 80 for most things).\n        self.max_content_width: t.Optional[int] = max_content_width\n\n        if allow_extra_args is None:\n            allow_extra_args = command.allow_extra_args\n\n        #: Indicates if the context allows extra args or if it should\n        #: fail on parsing.\n        #:\n        #: .. versionadded:: 3.0\n        self.allow_extra_args = allow_extra_args\n\n        if allow_interspersed_args is None:\n            allow_interspersed_args = command.allow_interspersed_args\n\n        #: Indicates if the context allows mixing of arguments and\n        #: options or not.\n        #:\n        #: .. versionadded:: 3.0\n        self.allow_interspersed_args: bool = allow_interspersed_args\n\n        if ignore_unknown_options is None:\n            ignore_unknown_options = command.ignore_unknown_options\n\n        #: Instructs click to ignore options that a command does not\n        #: understand and will store it on the context for later\n        #: processing.  This is primarily useful for situations where you\n        #: want to call into external programs.  Generally this pattern is\n        #: strongly discouraged because it's not possibly to losslessly\n        #: forward all arguments.\n        #:\n        #: .. versionadded:: 4.0\n        self.ignore_unknown_options: bool = ignore_unknown_options\n\n        if help_option_names is None:\n            if parent is not None:\n                help_option_names = parent.help_option_names\n            else:\n                help_option_names = [\"--help\"]\n\n        #: The names for the help options.\n        self.help_option_names: t.List[str] = help_option_names\n\n        if token_normalize_func is None and parent is not None:\n            token_normalize_func = parent.token_normalize_func\n\n        #: An optional normalization function for tokens.  This is\n        #: options, choices, commands etc.\n        self.token_normalize_func: t.Optional[t.Callable[[str], str]] = (\n            token_normalize_func\n        )\n\n        #: Indicates if resilient parsing is enabled.  In that case Click\n        #: will do its best to not cause any failures and default values\n        #: will be ignored. Useful for completion.\n        self.resilient_parsing: bool = resilient_parsing\n\n        # If there is no envvar prefix yet, but the parent has one and\n        # the command on this level has a name, we can expand the envvar\n        # prefix automatically.\n        if auto_envvar_prefix is None:\n            if (\n                parent is not None\n                and parent.auto_envvar_prefix is not None\n                and self.info_name is not None\n            ):\n                auto_envvar_prefix = (\n                    f\"{parent.auto_envvar_prefix}_{self.info_name.upper()}\"\n                )\n        else:\n            auto_envvar_prefix = auto_envvar_prefix.upper()\n\n        if auto_envvar_prefix is not None:\n            auto_envvar_prefix = auto_envvar_prefix.replace(\"-\", \"_\")\n\n        self.auto_envvar_prefix: t.Optional[str] = auto_envvar_prefix\n\n        if color is None and parent is not None:\n            color = parent.color\n\n        #: Controls if styling output is wanted or not.\n        self.color: t.Optional[bool] = color\n\n        if show_default is None and parent is not None:\n            show_default = parent.show_default\n\n        #: Show option default values when formatting help text.\n        self.show_default: t.Optional[bool] = show_default\n\n        self._close_callbacks: t.List[t.Callable[[], t.Any]] = []\n        self._depth = 0\n        self._parameter_source: t.Dict[str, ParameterSource] = {}\n        self._exit_stack = ExitStack()\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        \"\"\"Gather information that could be useful for a tool generating\n        user-facing documentation. This traverses the entire CLI\n        structure.\n\n        .. code-block:: python\n\n            with Context(cli) as ctx:\n                info = ctx.to_info_dict()\n\n        .. versionadded:: 8.0\n        \"\"\"\n        return {\n            \"command\": self.command.to_info_dict(self),\n            \"info_name\": self.info_name,\n            \"allow_extra_args\": self.allow_extra_args,\n            \"allow_interspersed_args\": self.allow_interspersed_args,\n            \"ignore_unknown_options\": self.ignore_unknown_options,\n            \"auto_envvar_prefix\": self.auto_envvar_prefix,\n        }\n\n    def __enter__(self) -> \"Context\":\n        self._depth += 1\n        push_context(self)\n        return self\n\n    def __exit__(\n        self,\n        exc_type: t.Optional[t.Type[BaseException]],\n        exc_value: t.Optional[BaseException],\n        tb: t.Optional[TracebackType],\n    ) -> None:\n        self._depth -= 1\n        if self._depth == 0:\n            self.close()\n        pop_context()\n\n    @contextmanager\n    def scope(self, cleanup: bool = True) -> t.Iterator[\"Context\"]:\n        \"\"\"This helper method can be used with the context object to promote\n        it to the current thread local (see :func:`get_current_context`).\n        The default behavior of this is to invoke the cleanup functions which\n        can be disabled by setting `cleanup` to `False`.  The cleanup\n        functions are typically used for things such as closing file handles.\n\n        If the cleanup is intended the context object can also be directly\n        used as a context manager.\n\n        Example usage::\n\n            with ctx.scope():\n                assert get_current_context() is ctx\n\n        This is equivalent::\n\n            with ctx:\n                assert get_current_context() is ctx\n\n        .. versionadded:: 5.0\n\n        :param cleanup: controls if the cleanup functions should be run or\n                        not.  The default is to run these functions.  In\n                        some situations the context only wants to be\n                        temporarily pushed in which case this can be disabled.\n                        Nested pushes automatically defer the cleanup.\n        \"\"\"\n        if not cleanup:\n            self._depth += 1\n        try:\n            with self as rv:\n                yield rv\n        finally:\n            if not cleanup:\n                self._depth -= 1\n\n    @property\n    def meta(self) -> t.Dict[str, t.Any]:\n        \"\"\"This is a dictionary which is shared with all the contexts\n        that are nested.  It exists so that click utilities can store some\n        state here if they need to.  It is however the responsibility of\n        that code to manage this dictionary well.\n\n        The keys are supposed to be unique dotted strings.  For instance\n        module paths are a good choice for it.  What is stored in there is\n        irrelevant for the operation of click.  However what is important is\n        that code that places data here adheres to the general semantics of\n        the system.\n\n        Example usage::\n\n            LANG_KEY = f'{__name__}.lang'\n\n            def set_language(value):\n                ctx = get_current_context()\n                ctx.meta[LANG_KEY] = value\n\n            def get_language():\n                return get_current_context().meta.get(LANG_KEY, 'en_US')\n\n        .. versionadded:: 5.0\n        \"\"\"\n        return self._meta\n\n    def make_formatter(self) -> HelpFormatter:\n        \"\"\"Creates the :class:`~click.HelpFormatter` for the help and\n        usage output.\n\n        To quickly customize the formatter class used without overriding\n        this method, set the :attr:`formatter_class` attribute.\n\n        .. versionchanged:: 8.0\n            Added the :attr:`formatter_class` attribute.\n        \"\"\"\n        return self.formatter_class(\n            width=self.terminal_width, max_width=self.max_content_width\n        )\n\n    def with_resource(self, context_manager: t.ContextManager[V]) -> V:\n        \"\"\"Register a resource as if it were used in a ``with``\n        statement. The resource will be cleaned up when the context is\n        popped.\n\n        Uses :meth:`contextlib.ExitStack.enter_context`. It calls the\n        resource's ``__enter__()`` method and returns the result. When\n        the context is popped, it closes the stack, which calls the\n        resource's ``__exit__()`` method.\n\n        To register a cleanup function for something that isn't a\n        context manager, use :meth:`call_on_close`. Or use something\n        from :mod:`contextlib` to turn it into a context manager first.\n\n        .. code-block:: python\n\n            @click.group()\n            @click.option(\"--name\")\n            @click.pass_context\n            def cli(ctx):\n                ctx.obj = ctx.with_resource(connect_db(name))\n\n        :param context_manager: The context manager to enter.\n        :return: Whatever ``context_manager.__enter__()`` returns.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        return self._exit_stack.enter_context(context_manager)\n\n    def call_on_close(self, f: t.Callable[..., t.Any]) -> t.Callable[..., t.Any]:\n        \"\"\"Register a function to be called when the context tears down.\n\n        This can be used to close resources opened during the script\n        execution. Resources that support Python's context manager\n        protocol which would be used in a ``with`` statement should be\n        registered with :meth:`with_resource` instead.\n\n        :param f: The function to execute on teardown.\n        \"\"\"\n        return self._exit_stack.callback(f)\n\n    def close(self) -> None:\n        \"\"\"Invoke all close callbacks registered with\n        :meth:`call_on_close`, and exit all context managers entered\n        with :meth:`with_resource`.\n        \"\"\"\n        self._exit_stack.close()\n        # In case the context is reused, create a new exit stack.\n        self._exit_stack = ExitStack()\n\n    @property\n    def command_path(self) -> str:\n        \"\"\"The computed command path.  This is used for the ``usage``\n        information on the help page.  It's automatically created by\n        combining the info names of the chain of contexts to the root.\n        \"\"\"\n        rv = \"\"\n        if self.info_name is not None:\n            rv = self.info_name\n        if self.parent is not None:\n            parent_command_path = [self.parent.command_path]\n\n            if isinstance(self.parent.command, Command):\n                for param in self.parent.command.get_params(self):\n                    parent_command_path.extend(param.get_usage_pieces(self))\n\n            rv = f\"{' '.join(parent_command_path)} {rv}\"\n        return rv.lstrip()\n\n    def find_root(self) -> \"Context\":\n        \"\"\"Finds the outermost context.\"\"\"\n        node = self\n        while node.parent is not None:\n            node = node.parent\n        return node\n\n    def find_object(self, object_type: t.Type[V]) -> t.Optional[V]:\n        \"\"\"Finds the closest object of a given type.\"\"\"\n        node: t.Optional[Context] = self\n\n        while node is not None:\n            if isinstance(node.obj, object_type):\n                return node.obj\n\n            node = node.parent\n\n        return None\n\n    def ensure_object(self, object_type: t.Type[V]) -> V:\n        \"\"\"Like :meth:`find_object` but sets the innermost object to a\n        new instance of `object_type` if it does not exist.\n        \"\"\"\n        rv = self.find_object(object_type)\n        if rv is None:\n            self.obj = rv = object_type()\n        return rv\n\n    @t.overload\n    def lookup_default(\n        self, name: str, call: \"te.Literal[True]\" = True\n    ) -> t.Optional[t.Any]: ...\n\n    @t.overload\n    def lookup_default(\n        self, name: str, call: \"te.Literal[False]\" = ...\n    ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: ...\n\n    def lookup_default(self, name: str, call: bool = True) -> t.Optional[t.Any]:\n        \"\"\"Get the default for a parameter from :attr:`default_map`.\n\n        :param name: Name of the parameter.\n        :param call: If the default is a callable, call it. Disable to\n            return the callable instead.\n\n        .. versionchanged:: 8.0\n            Added the ``call`` parameter.\n        \"\"\"\n        if self.default_map is not None:\n            value = self.default_map.get(name)\n\n            if call and callable(value):\n                return value()\n\n            return value\n\n        return None\n\n    def fail(self, message: str) -> \"te.NoReturn\":\n        \"\"\"Aborts the execution of the program with a specific error\n        message.\n\n        :param message: the error message to fail with.\n        \"\"\"\n        raise UsageError(message, self)\n\n    def abort(self) -> \"te.NoReturn\":\n        \"\"\"Aborts the script.\"\"\"\n        raise Abort()\n\n    def exit(self, code: int = 0) -> \"te.NoReturn\":\n        \"\"\"Exits the application with a given exit code.\"\"\"\n        raise Exit(code)\n\n    def get_usage(self) -> str:\n        \"\"\"Helper method to get formatted usage string for the current\n        context and command.\n        \"\"\"\n        return self.command.get_usage(self)\n\n    def get_help(self) -> str:\n        \"\"\"Helper method to get formatted help page for the current\n        context and command.\n        \"\"\"\n        return self.command.get_help(self)\n\n    def _make_sub_context(self, command: \"Command\") -> \"Context\":\n        \"\"\"Create a new context of the same type as this context, but\n        for a new command.\n\n        :meta private:\n        \"\"\"\n        return type(self)(command, info_name=command.name, parent=self)\n\n    @t.overload\n    def invoke(\n        __self,\n        __callback: \"t.Callable[..., V]\",\n        *args: t.Any,\n        **kwargs: t.Any,\n    ) -> V: ...\n\n    @t.overload\n    def invoke(\n        __self,\n        __callback: \"Command\",\n        *args: t.Any,\n        **kwargs: t.Any,\n    ) -> t.Any: ...\n\n    def invoke(\n        __self,\n        __callback: t.Union[\"Command\", \"t.Callable[..., V]\"],\n        *args: t.Any,\n        **kwargs: t.Any,\n    ) -> t.Union[t.Any, V]:\n        \"\"\"Invokes a command callback in exactly the way it expects.  There\n        are two ways to invoke this method:\n\n        1.  the first argument can be a callback and all other arguments and\n            keyword arguments are forwarded directly to the function.\n        2.  the first argument is a click command object.  In that case all\n            arguments are forwarded as well but proper click parameters\n            (options and click arguments) must be keyword arguments and Click\n            will fill in defaults.\n\n        Note that before Click 3.2 keyword arguments were not properly filled\n        in against the intention of this code and no context was created.  For\n        more information about this change and why it was done in a bugfix\n        release see :ref:`upgrade-to-3.2`.\n\n        .. versionchanged:: 8.0\n            All ``kwargs`` are tracked in :attr:`params` so they will be\n            passed if :meth:`forward` is called at multiple levels.\n        \"\"\"\n        if isinstance(__callback, Command):\n            other_cmd = __callback\n\n            if other_cmd.callback is None:\n                raise TypeError(\n                    \"The given command does not have a callback that can be invoked.\"\n                )\n            else:\n                __callback = t.cast(\"t.Callable[..., V]\", other_cmd.callback)\n\n            ctx = __self._make_sub_context(other_cmd)\n\n            for param in other_cmd.params:\n                if param.name not in kwargs and param.expose_value:\n                    kwargs[param.name] = param.type_cast_value(  # type: ignore\n                        ctx, param.get_default(ctx)\n                    )\n\n            # Track all kwargs as params, so that forward() will pass\n            # them on in subsequent calls.\n            ctx.params.update(kwargs)\n        else:\n            ctx = __self\n\n        with augment_usage_errors(__self):\n            with ctx:\n                return __callback(*args, **kwargs)\n\n    def forward(__self, __cmd: \"Command\", *args: t.Any, **kwargs: t.Any) -> t.Any:\n        \"\"\"Similar to :meth:`invoke` but fills in default keyword\n        arguments from the current context if the other command expects\n        it.  This cannot invoke callbacks directly, only other commands.\n\n        .. versionchanged:: 8.0\n            All ``kwargs`` are tracked in :attr:`params` so they will be\n            passed if ``forward`` is called at multiple levels.\n        \"\"\"\n        # Can only forward to other commands, not direct callbacks.\n        if not isinstance(__cmd, Command):\n            raise TypeError(\"Callback is not a command.\")\n\n        for param in __self.params:\n            if param not in kwargs:\n                kwargs[param] = __self.params[param]\n\n        return __self.invoke(__cmd, *args, **kwargs)\n\n    def set_parameter_source(self, name: str, source: ParameterSource) -> None:\n        \"\"\"Set the source of a parameter. This indicates the location\n        from which the value of the parameter was obtained.\n\n        :param name: The name of the parameter.\n        :param source: A member of :class:`~click.core.ParameterSource`.\n        \"\"\"\n        self._parameter_source[name] = source\n\n    def get_parameter_source(self, name: str) -> t.Optional[ParameterSource]:\n        \"\"\"Get the source of a parameter. This indicates the location\n        from which the value of the parameter was obtained.\n\n        This can be useful for determining when a user specified a value\n        on the command line that is the same as the default value. It\n        will be :attr:`~click.core.ParameterSource.DEFAULT` only if the\n        value was actually taken from the default.\n\n        :param name: The name of the parameter.\n        :rtype: ParameterSource\n\n        .. versionchanged:: 8.0\n            Returns ``None`` if the parameter was not provided from any\n            source.\n        \"\"\"\n        return self._parameter_source.get(name)\n\n\nclass BaseCommand:\n    \"\"\"The base command implements the minimal API contract of commands.\n    Most code will never use this as it does not implement a lot of useful\n    functionality but it can act as the direct subclass of alternative\n    parsing methods that do not depend on the Click parser.\n\n    For instance, this can be used to bridge Click and other systems like\n    argparse or docopt.\n\n    Because base commands do not implement a lot of the API that other\n    parts of Click take for granted, they are not supported for all\n    operations.  For instance, they cannot be used with the decorators\n    usually and they have no built-in callback system.\n\n    .. versionchanged:: 2.0\n       Added the `context_settings` parameter.\n\n    :param name: the name of the command to use unless a group overrides it.\n    :param context_settings: an optional dictionary with defaults that are\n                             passed to the context object.\n    \"\"\"\n\n    #: The context class to create with :meth:`make_context`.\n    #:\n    #: .. versionadded:: 8.0\n    context_class: t.Type[Context] = Context\n    #: the default for the :attr:`Context.allow_extra_args` flag.\n    allow_extra_args = False\n    #: the default for the :attr:`Context.allow_interspersed_args` flag.\n    allow_interspersed_args = True\n    #: the default for the :attr:`Context.ignore_unknown_options` flag.\n    ignore_unknown_options = False\n\n    def __init__(\n        self,\n        name: t.Optional[str],\n        context_settings: t.Optional[t.MutableMapping[str, t.Any]] = None,\n    ) -> None:\n        #: the name the command thinks it has.  Upon registering a command\n        #: on a :class:`Group` the group will default the command name\n        #: with this information.  You should instead use the\n        #: :class:`Context`\\'s :attr:`~Context.info_name` attribute.\n        self.name = name\n\n        if context_settings is None:\n            context_settings = {}\n\n        #: an optional dictionary with defaults passed to the context.\n        self.context_settings: t.MutableMapping[str, t.Any] = context_settings\n\n    def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]:\n        \"\"\"Gather information that could be useful for a tool generating\n        user-facing documentation. This traverses the entire structure\n        below this command.\n\n        Use :meth:`click.Context.to_info_dict` to traverse the entire\n        CLI structure.\n\n        :param ctx: A :class:`Context` representing this command.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        return {\"name\": self.name}\n\n    def __repr__(self) -> str:\n        return f\"<{self.__class__.__name__} {self.name}>\"\n\n    def get_usage(self, ctx: Context) -> str:\n        raise NotImplementedError(\"Base commands cannot get usage\")\n\n    def get_help(self, ctx: Context) -> str:\n        raise NotImplementedError(\"Base commands cannot get help\")\n\n    def make_context(\n        self,\n        info_name: t.Optional[str],\n        args: t.List[str],\n        parent: t.Optional[Context] = None,\n        **extra: t.Any,\n    ) -> Context:\n        \"\"\"This function when given an info name and arguments will kick\n        off the parsing and create a new :class:`Context`.  It does not\n        invoke the actual command callback though.\n\n        To quickly customize the context class used without overriding\n        this method, set the :attr:`context_class` attribute.\n\n        :param info_name: the info name for this invocation.  Generally this\n                          is the most descriptive name for the script or\n                          command.  For the toplevel script it's usually\n                          the name of the script, for commands below it's\n                          the name of the command.\n        :param args: the arguments to parse as list of strings.\n        :param parent: the parent context if available.\n        :param extra: extra keyword arguments forwarded to the context\n                      constructor.\n\n        .. versionchanged:: 8.0\n            Added the :attr:`context_class` attribute.\n        \"\"\"\n        for key, value in self.context_settings.items():\n            if key not in extra:\n                extra[key] = value\n\n        ctx = self.context_class(\n            self,  # type: ignore[arg-type]\n            info_name=info_name,\n            parent=parent,\n            **extra,\n        )\n\n        with ctx.scope(cleanup=False):\n            self.parse_args(ctx, args)\n        return ctx\n\n    def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]:\n        \"\"\"Given a context and a list of arguments this creates the parser\n        and parses the arguments, then modifies the context as necessary.\n        This is automatically invoked by :meth:`make_context`.\n        \"\"\"\n        raise NotImplementedError(\"Base commands do not know how to parse arguments.\")\n\n    def invoke(self, ctx: Context) -> t.Any:\n        \"\"\"Given a context, this invokes the command.  The default\n        implementation is raising a not implemented error.\n        \"\"\"\n        raise NotImplementedError(\"Base commands are not invocable by default\")\n\n    def shell_complete(self, ctx: Context, incomplete: str) -> t.List[\"CompletionItem\"]:\n        \"\"\"Return a list of completions for the incomplete value. Looks\n        at the names of chained multi-commands.\n\n        Any command could be part of a chained multi-command, so sibling\n        commands are valid at any point during command completion. Other\n        command classes will return more completions.\n\n        :param ctx: Invocation context for this command.\n        :param incomplete: Value being completed. May be empty.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        from click.shell_completion import CompletionItem\n\n        results: t.List[CompletionItem] = []\n\n        while ctx.parent is not None:\n            ctx = ctx.parent\n\n            if isinstance(ctx.command, MultiCommand) and ctx.command.chain:\n                results.extend(\n                    CompletionItem(name, help=command.get_short_help_str())\n                    for name, command in _complete_visible_commands(ctx, incomplete)\n                    if name not in ctx.protected_args\n                )\n\n        return results\n\n    @t.overload\n    def main(\n        self,\n        args: t.Optional[t.Sequence[str]] = None,\n        prog_name: t.Optional[str] = None,\n        complete_var: t.Optional[str] = None,\n        standalone_mode: \"te.Literal[True]\" = True,\n        **extra: t.Any,\n    ) -> \"te.NoReturn\": ...\n\n    @t.overload\n    def main(\n        self,\n        args: t.Optional[t.Sequence[str]] = None,\n        prog_name: t.Optional[str] = None,\n        complete_var: t.Optional[str] = None,\n        standalone_mode: bool = ...,\n        **extra: t.Any,\n    ) -> t.Any: ...\n\n    def main(\n        self,\n        args: t.Optional[t.Sequence[str]] = None,\n        prog_name: t.Optional[str] = None,\n        complete_var: t.Optional[str] = None,\n        standalone_mode: bool = True,\n        windows_expand_args: bool = True,\n        **extra: t.Any,\n    ) -> t.Any:\n        \"\"\"This is the way to invoke a script with all the bells and\n        whistles as a command line application.  This will always terminate\n        the application after a call.  If this is not wanted, ``SystemExit``\n        needs to be caught.\n\n        This method is also available by directly calling the instance of\n        a :class:`Command`.\n\n        :param args: the arguments that should be used for parsing.  If not\n                     provided, ``sys.argv[1:]`` is used.\n        :param prog_name: the program name that should be used.  By default\n                          the program name is constructed by taking the file\n                          name from ``sys.argv[0]``.\n        :param complete_var: the environment variable that controls the\n                             bash completion support.  The default is\n                             ``\"_<prog_name>_COMPLETE\"`` with prog_name in\n                             uppercase.\n        :param standalone_mode: the default behavior is to invoke the script\n                                in standalone mode.  Click will then\n                                handle exceptions and convert them into\n                                error messages and the function will never\n                                return but shut down the interpreter.  If\n                                this is set to `False` they will be\n                                propagated to the caller and the return\n                                value of this function is the return value\n                                of :meth:`invoke`.\n        :param windows_expand_args: Expand glob patterns, user dir, and\n            env vars in command line args on Windows.\n        :param extra: extra keyword arguments are forwarded to the context\n                      constructor.  See :class:`Context` for more information.\n\n        .. versionchanged:: 8.0.1\n            Added the ``windows_expand_args`` parameter to allow\n            disabling command line arg expansion on Windows.\n\n        .. versionchanged:: 8.0\n            When taking arguments from ``sys.argv`` on Windows, glob\n            patterns, user dir, and env vars are expanded.\n\n        .. versionchanged:: 3.0\n           Added the ``standalone_mode`` parameter.\n        \"\"\"\n        if args is None:\n            args = sys.argv[1:]\n\n            if os.name == \"nt\" and windows_expand_args:\n                args = _expand_args(args)\n        else:\n            args = list(args)\n\n        if prog_name is None:\n            prog_name = _detect_program_name()\n\n        # Process shell completion requests and exit early.\n        self._main_shell_completion(extra, prog_name, complete_var)\n\n        try:\n            try:\n                with self.make_context(prog_name, args, **extra) as ctx:\n                    rv = self.invoke(ctx)\n                    if not standalone_mode:\n                        return rv\n                    # it's not safe to `ctx.exit(rv)` here!\n                    # note that `rv` may actually contain data like \"1\" which\n                    # has obvious effects\n                    # more subtle case: `rv=[None, None]` can come out of\n                    # chained commands which all returned `None` -- so it's not\n                    # even always obvious that `rv` indicates success/failure\n                    # by its truthiness/falsiness\n                    ctx.exit()\n            except (EOFError, KeyboardInterrupt) as e:\n                echo(file=sys.stderr)\n                raise Abort() from e\n            except ClickException as e:\n                if not standalone_mode:\n                    raise\n                e.show()\n                sys.exit(e.exit_code)\n            except OSError as e:\n                if e.errno == errno.EPIPE:\n                    sys.stdout = t.cast(t.TextIO, PacifyFlushWrapper(sys.stdout))\n                    sys.stderr = t.cast(t.TextIO, PacifyFlushWrapper(sys.stderr))\n                    sys.exit(1)\n                else:\n                    raise\n        except Exit as e:\n            if standalone_mode:\n                sys.exit(e.exit_code)\n            else:\n                # in non-standalone mode, return the exit code\n                # note that this is only reached if `self.invoke` above raises\n                # an Exit explicitly -- thus bypassing the check there which\n                # would return its result\n                # the results of non-standalone execution may therefore be\n                # somewhat ambiguous: if there are codepaths which lead to\n                # `ctx.exit(1)` and to `return 1`, the caller won't be able to\n                # tell the difference between the two\n                return e.exit_code\n        except Abort:\n            if not standalone_mode:\n                raise\n            echo(_(\"Aborted!\"), file=sys.stderr)\n            sys.exit(1)\n\n    def _main_shell_completion(\n        self,\n        ctx_args: t.MutableMapping[str, t.Any],\n        prog_name: str,\n        complete_var: t.Optional[str] = None,\n    ) -> None:\n        \"\"\"Check if the shell is asking for tab completion, process\n        that, then exit early. Called from :meth:`main` before the\n        program is invoked.\n\n        :param prog_name: Name of the executable in the shell.\n        :param complete_var: Name of the environment variable that holds\n            the completion instruction. Defaults to\n            ``_{PROG_NAME}_COMPLETE``.\n\n        .. versionchanged:: 8.2.0\n            Dots (``.``) in ``prog_name`` are replaced with underscores (``_``).\n        \"\"\"\n        if complete_var is None:\n            complete_name = prog_name.replace(\"-\", \"_\").replace(\".\", \"_\")\n            complete_var = f\"_{complete_name}_COMPLETE\".upper()\n\n        instruction = os.environ.get(complete_var)\n\n        if not instruction:\n            return\n\n        from .shell_completion import shell_complete\n\n        rv = shell_complete(self, ctx_args, prog_name, complete_var, instruction)\n        sys.exit(rv)\n\n    def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any:\n        \"\"\"Alias for :meth:`main`.\"\"\"\n        return self.main(*args, **kwargs)\n\n\nclass Command(BaseCommand):\n    \"\"\"Commands are the basic building block of command line interfaces in\n    Click.  A basic command handles command line parsing and might dispatch\n    more parsing to commands nested below it.\n\n    :param name: the name of the command to use unless a group overrides it.\n    :param context_settings: an optional dictionary with defaults that are\n                             passed to the context object.\n    :param callback: the callback to invoke.  This is optional.\n    :param params: the parameters to register with this command.  This can\n                   be either :class:`Option` or :class:`Argument` objects.\n    :param help: the help string to use for this command.\n    :param epilog: like the help string but it's printed at the end of the\n                   help page after everything else.\n    :param short_help: the short help to use for this command.  This is\n                       shown on the command listing of the parent command.\n    :param add_help_option: by default each command registers a ``--help``\n                            option.  This can be disabled by this parameter.\n    :param no_args_is_help: this controls what happens if no arguments are\n                            provided.  This option is disabled by default.\n                            If enabled this will add ``--help`` as argument\n                            if no arguments are passed\n    :param hidden: hide this command from help outputs.\n\n    :param deprecated: issues a message indicating that\n                             the command is deprecated.\n\n    .. versionchanged:: 8.1\n        ``help``, ``epilog``, and ``short_help`` are stored unprocessed,\n        all formatting is done when outputting help text, not at init,\n        and is done even if not using the ``@command`` decorator.\n\n    .. versionchanged:: 8.0\n        Added a ``repr`` showing the command name.\n\n    .. versionchanged:: 7.1\n        Added the ``no_args_is_help`` parameter.\n\n    .. versionchanged:: 2.0\n        Added the ``context_settings`` parameter.\n    \"\"\"\n\n    def __init__(\n        self,\n        name: t.Optional[str],\n        context_settings: t.Optional[t.MutableMapping[str, t.Any]] = None,\n        callback: t.Optional[t.Callable[..., t.Any]] = None,\n        params: t.Optional[t.List[\"Parameter\"]] = None,\n        help: t.Optional[str] = None,\n        epilog: t.Optional[str] = None,\n        short_help: t.Optional[str] = None,\n        options_metavar: t.Optional[str] = \"[OPTIONS]\",\n        add_help_option: bool = True,\n        no_args_is_help: bool = False,\n        hidden: bool = False,\n        deprecated: bool = False,\n    ) -> None:\n        super().__init__(name, context_settings)\n        #: the callback to execute when the command fires.  This might be\n        #: `None` in which case nothing happens.\n        self.callback = callback\n        #: the list of parameters for this command in the order they\n        #: should show up in the help page and execute.  Eager parameters\n        #: will automatically be handled before non eager ones.\n        self.params: t.List[Parameter] = params or []\n        self.help = help\n        self.epilog = epilog\n        self.options_metavar = options_metavar\n        self.short_help = short_help\n        self.add_help_option = add_help_option\n        self._help_option: t.Optional[HelpOption] = None\n        self.no_args_is_help = no_args_is_help\n        self.hidden = hidden\n        self.deprecated = deprecated\n\n    def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict(ctx)\n        info_dict.update(\n            params=[param.to_info_dict() for param in self.get_params(ctx)],\n            help=self.help,\n            epilog=self.epilog,\n            short_help=self.short_help,\n            hidden=self.hidden,\n            deprecated=self.deprecated,\n        )\n        return info_dict\n\n    def get_usage(self, ctx: Context) -> str:\n        \"\"\"Formats the usage line into a string and returns it.\n\n        Calls :meth:`format_usage` internally.\n        \"\"\"\n        formatter = ctx.make_formatter()\n        self.format_usage(ctx, formatter)\n        return formatter.getvalue().rstrip(\"\\n\")\n\n    def get_params(self, ctx: Context) -> t.List[\"Parameter\"]:\n        rv = self.params\n        help_option = self.get_help_option(ctx)\n\n        if help_option is not None:\n            rv = [*rv, help_option]\n\n        return rv\n\n    def format_usage(self, ctx: Context, formatter: HelpFormatter) -> None:\n        \"\"\"Writes the usage line into the formatter.\n\n        This is a low-level method called by :meth:`get_usage`.\n        \"\"\"\n        pieces = self.collect_usage_pieces(ctx)\n        formatter.write_usage(ctx.command_path, \" \".join(pieces))\n\n    def collect_usage_pieces(self, ctx: Context) -> t.List[str]:\n        \"\"\"Returns all the pieces that go into the usage line and returns\n        it as a list of strings.\n        \"\"\"\n        rv = [self.options_metavar] if self.options_metavar else []\n\n        for param in self.get_params(ctx):\n            rv.extend(param.get_usage_pieces(ctx))\n\n        return rv\n\n    def get_help_option_names(self, ctx: Context) -> t.List[str]:\n        \"\"\"Returns the names for the help option.\"\"\"\n        all_names = set(ctx.help_option_names)\n        for param in self.params:\n            all_names.difference_update(param.opts)\n            all_names.difference_update(param.secondary_opts)\n        return list(all_names)\n\n    def get_help_option(self, ctx: Context) -> t.Optional[\"Option\"]:\n        \"\"\"Returns the help option object.\n\n        Unless ``add_help_option`` is ``False``.\n\n        .. versionchanged:: 8.1.8\n            The help option is now cached to avoid creating it multiple times.\n        \"\"\"\n        help_options = self.get_help_option_names(ctx)\n\n        if not help_options or not self.add_help_option:\n            return None\n\n        # Cache the help option object in private _help_option attribute to\n        # avoid creating it multiple times. Not doing this will break the\n        # callback odering by iter_params_for_processing(), which relies on\n        # object comparison.\n        if self._help_option is None:\n            # Avoid circular import.\n            from .decorators import HelpOption\n\n            self._help_option = HelpOption(help_options)\n\n        return self._help_option\n\n    def make_parser(self, ctx: Context) -> OptionParser:\n        \"\"\"Creates the underlying option parser for this command.\"\"\"\n        parser = OptionParser(ctx)\n        for param in self.get_params(ctx):\n            param.add_to_parser(parser, ctx)\n        return parser\n\n    def get_help(self, ctx: Context) -> str:\n        \"\"\"Formats the help into a string and returns it.\n\n        Calls :meth:`format_help` internally.\n        \"\"\"\n        formatter = ctx.make_formatter()\n        self.format_help(ctx, formatter)\n        return formatter.getvalue().rstrip(\"\\n\")\n\n    def get_short_help_str(self, limit: int = 45) -> str:\n        \"\"\"Gets short help for the command or makes it by shortening the\n        long help string.\n        \"\"\"\n        if self.short_help:\n            text = inspect.cleandoc(self.short_help)\n        elif self.help:\n            text = make_default_short_help(self.help, limit)\n        else:\n            text = \"\"\n\n        if self.deprecated:\n            text = _(\"(Deprecated) {text}\").format(text=text)\n\n        return text.strip()\n\n    def format_help(self, ctx: Context, formatter: HelpFormatter) -> None:\n        \"\"\"Writes the help into the formatter if it exists.\n\n        This is a low-level method called by :meth:`get_help`.\n\n        This calls the following methods:\n\n        -   :meth:`format_usage`\n        -   :meth:`format_help_text`\n        -   :meth:`format_options`\n        -   :meth:`format_epilog`\n        \"\"\"\n        self.format_usage(ctx, formatter)\n        self.format_help_text(ctx, formatter)\n        self.format_options(ctx, formatter)\n        self.format_epilog(ctx, formatter)\n\n    def format_help_text(self, ctx: Context, formatter: HelpFormatter) -> None:\n        \"\"\"Writes the help text to the formatter if it exists.\"\"\"\n        if self.help is not None:\n            # truncate the help text to the first form feed\n            text = inspect.cleandoc(self.help).partition(\"\\f\")[0]\n        else:\n            text = \"\"\n\n        if self.deprecated:\n            text = _(\"(Deprecated) {text}\").format(text=text)\n\n        if text:\n            formatter.write_paragraph()\n\n            with formatter.indentation():\n                formatter.write_text(text)\n\n    def format_options(self, ctx: Context, formatter: HelpFormatter) -> None:\n        \"\"\"Writes all the options into the formatter if they exist.\"\"\"\n        opts = []\n        for param in self.get_params(ctx):\n            rv = param.get_help_record(ctx)\n            if rv is not None:\n                opts.append(rv)\n\n        if opts:\n            with formatter.section(_(\"Options\")):\n                formatter.write_dl(opts)\n\n    def format_epilog(self, ctx: Context, formatter: HelpFormatter) -> None:\n        \"\"\"Writes the epilog into the formatter if it exists.\"\"\"\n        if self.epilog:\n            epilog = inspect.cleandoc(self.epilog)\n            formatter.write_paragraph()\n\n            with formatter.indentation():\n                formatter.write_text(epilog)\n\n    def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]:\n        if not args and self.no_args_is_help and not ctx.resilient_parsing:\n            echo(ctx.get_help(), color=ctx.color)\n            ctx.exit()\n\n        parser = self.make_parser(ctx)\n        opts, args, param_order = parser.parse_args(args=args)\n\n        for param in iter_params_for_processing(param_order, self.get_params(ctx)):\n            value, args = param.handle_parse_result(ctx, opts, args)\n\n        if args and not ctx.allow_extra_args and not ctx.resilient_parsing:\n            ctx.fail(\n                ngettext(\n                    \"Got unexpected extra argument ({args})\",\n                    \"Got unexpected extra arguments ({args})\",\n                    len(args),\n                ).format(args=\" \".join(map(str, args)))\n            )\n\n        ctx.args = args\n        ctx._opt_prefixes.update(parser._opt_prefixes)\n        return args\n\n    def invoke(self, ctx: Context) -> t.Any:\n        \"\"\"Given a context, this invokes the attached callback (if it exists)\n        in the right way.\n        \"\"\"\n        if self.deprecated:\n            message = _(\n                \"DeprecationWarning: The command {name!r} is deprecated.\"\n            ).format(name=self.name)\n            echo(style(message, fg=\"red\"), err=True)\n\n        if self.callback is not None:\n            return ctx.invoke(self.callback, **ctx.params)\n\n    def shell_complete(self, ctx: Context, incomplete: str) -> t.List[\"CompletionItem\"]:\n        \"\"\"Return a list of completions for the incomplete value. Looks\n        at the names of options and chained multi-commands.\n\n        :param ctx: Invocation context for this command.\n        :param incomplete: Value being completed. May be empty.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        from click.shell_completion import CompletionItem\n\n        results: t.List[CompletionItem] = []\n\n        if incomplete and not incomplete[0].isalnum():\n            for param in self.get_params(ctx):\n                if (\n                    not isinstance(param, Option)\n                    or param.hidden\n                    or (\n                        not param.multiple\n                        and ctx.get_parameter_source(param.name)  # type: ignore\n                        is ParameterSource.COMMANDLINE\n                    )\n                ):\n                    continue\n\n                results.extend(\n                    CompletionItem(name, help=param.help)\n                    for name in [*param.opts, *param.secondary_opts]\n                    if name.startswith(incomplete)\n                )\n\n        results.extend(super().shell_complete(ctx, incomplete))\n        return results\n\n\nclass MultiCommand(Command):\n    \"\"\"A multi command is the basic implementation of a command that\n    dispatches to subcommands.  The most common version is the\n    :class:`Group`.\n\n    :param invoke_without_command: this controls how the multi command itself\n                                   is invoked.  By default it's only invoked\n                                   if a subcommand is provided.\n    :param no_args_is_help: this controls what happens if no arguments are\n                            provided.  This option is enabled by default if\n                            `invoke_without_command` is disabled or disabled\n                            if it's enabled.  If enabled this will add\n                            ``--help`` as argument if no arguments are\n                            passed.\n    :param subcommand_metavar: the string that is used in the documentation\n                               to indicate the subcommand place.\n    :param chain: if this is set to `True` chaining of multiple subcommands\n                  is enabled.  This restricts the form of commands in that\n                  they cannot have optional arguments but it allows\n                  multiple commands to be chained together.\n    :param result_callback: The result callback to attach to this multi\n        command. This can be set or changed later with the\n        :meth:`result_callback` decorator.\n    :param attrs: Other command arguments described in :class:`Command`.\n    \"\"\"\n\n    allow_extra_args = True\n    allow_interspersed_args = False\n\n    def __init__(\n        self,\n        name: t.Optional[str] = None,\n        invoke_without_command: bool = False,\n        no_args_is_help: t.Optional[bool] = None,\n        subcommand_metavar: t.Optional[str] = None,\n        chain: bool = False,\n        result_callback: t.Optional[t.Callable[..., t.Any]] = None,\n        **attrs: t.Any,\n    ) -> None:\n        super().__init__(name, **attrs)\n\n        if no_args_is_help is None:\n            no_args_is_help = not invoke_without_command\n\n        self.no_args_is_help = no_args_is_help\n        self.invoke_without_command = invoke_without_command\n\n        if subcommand_metavar is None:\n            if chain:\n                subcommand_metavar = \"COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]...\"\n            else:\n                subcommand_metavar = \"COMMAND [ARGS]...\"\n\n        self.subcommand_metavar = subcommand_metavar\n        self.chain = chain\n        # The result callback that is stored. This can be set or\n        # overridden with the :func:`result_callback` decorator.\n        self._result_callback = result_callback\n\n        if self.chain:\n            for param in self.params:\n                if isinstance(param, Argument) and not param.required:\n                    raise RuntimeError(\n                        \"Multi commands in chain mode cannot have\"\n                        \" optional arguments.\"\n                    )\n\n    def to_info_dict(self, ctx: Context) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict(ctx)\n        commands = {}\n\n        for name in self.list_commands(ctx):\n            command = self.get_command(ctx, name)\n\n            if command is None:\n                continue\n\n            sub_ctx = ctx._make_sub_context(command)\n\n            with sub_ctx.scope(cleanup=False):\n                commands[name] = command.to_info_dict(sub_ctx)\n\n        info_dict.update(commands=commands, chain=self.chain)\n        return info_dict\n\n    def collect_usage_pieces(self, ctx: Context) -> t.List[str]:\n        rv = super().collect_usage_pieces(ctx)\n        rv.append(self.subcommand_metavar)\n        return rv\n\n    def format_options(self, ctx: Context, formatter: HelpFormatter) -> None:\n        super().format_options(ctx, formatter)\n        self.format_commands(ctx, formatter)\n\n    def result_callback(self, replace: bool = False) -> t.Callable[[F], F]:\n        \"\"\"Adds a result callback to the command.  By default if a\n        result callback is already registered this will chain them but\n        this can be disabled with the `replace` parameter.  The result\n        callback is invoked with the return value of the subcommand\n        (or the list of return values from all subcommands if chaining\n        is enabled) as well as the parameters as they would be passed\n        to the main callback.\n\n        Example::\n\n            @click.group()\n            @click.option('-i', '--input', default=23)\n            def cli(input):\n                return 42\n\n            @cli.result_callback()\n            def process_result(result, input):\n                return result + input\n\n        :param replace: if set to `True` an already existing result\n                        callback will be removed.\n\n        .. versionchanged:: 8.0\n            Renamed from ``resultcallback``.\n\n        .. versionadded:: 3.0\n        \"\"\"\n\n        def decorator(f: F) -> F:\n            old_callback = self._result_callback\n\n            if old_callback is None or replace:\n                self._result_callback = f\n                return f\n\n            def function(__value, *args, **kwargs):  # type: ignore\n                inner = old_callback(__value, *args, **kwargs)\n                return f(inner, *args, **kwargs)\n\n            self._result_callback = rv = update_wrapper(t.cast(F, function), f)\n            return rv  # type: ignore[return-value]\n\n        return decorator\n\n    def format_commands(self, ctx: Context, formatter: HelpFormatter) -> None:\n        \"\"\"Extra format methods for multi methods that adds all the commands\n        after the options.\n        \"\"\"\n        commands = []\n        for subcommand in self.list_commands(ctx):\n            cmd = self.get_command(ctx, subcommand)\n            # What is this, the tool lied about a command.  Ignore it\n            if cmd is None:\n                continue\n            if cmd.hidden:\n                continue\n\n            commands.append((subcommand, cmd))\n\n        # allow for 3 times the default spacing\n        if len(commands):\n            limit = formatter.width - 6 - max(len(cmd[0]) for cmd in commands)\n\n            rows = []\n            for subcommand, cmd in commands:\n                help = cmd.get_short_help_str(limit)\n                rows.append((subcommand, help))\n\n            if rows:\n                with formatter.section(_(\"Commands\")):\n                    formatter.write_dl(rows)\n\n    def parse_args(self, ctx: Context, args: t.List[str]) -> t.List[str]:\n        if not args and self.no_args_is_help and not ctx.resilient_parsing:\n            echo(ctx.get_help(), color=ctx.color)\n            ctx.exit()\n\n        rest = super().parse_args(ctx, args)\n\n        if self.chain:\n            ctx.protected_args = rest\n            ctx.args = []\n        elif rest:\n            ctx.protected_args, ctx.args = rest[:1], rest[1:]\n\n        return ctx.args\n\n    def invoke(self, ctx: Context) -> t.Any:\n        def _process_result(value: t.Any) -> t.Any:\n            if self._result_callback is not None:\n                value = ctx.invoke(self._result_callback, value, **ctx.params)\n            return value\n\n        if not ctx.protected_args:\n            if self.invoke_without_command:\n                # No subcommand was invoked, so the result callback is\n                # invoked with the group return value for regular\n                # groups, or an empty list for chained groups.\n                with ctx:\n                    rv = super().invoke(ctx)\n                    return _process_result([] if self.chain else rv)\n            ctx.fail(_(\"Missing command.\"))\n\n        # Fetch args back out\n        args = [*ctx.protected_args, *ctx.args]\n        ctx.args = []\n        ctx.protected_args = []\n\n        # If we're not in chain mode, we only allow the invocation of a\n        # single command but we also inform the current context about the\n        # name of the command to invoke.\n        if not self.chain:\n            # Make sure the context is entered so we do not clean up\n            # resources until the result processor has worked.\n            with ctx:\n                cmd_name, cmd, args = self.resolve_command(ctx, args)\n                assert cmd is not None\n                ctx.invoked_subcommand = cmd_name\n                super().invoke(ctx)\n                sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)\n                with sub_ctx:\n                    return _process_result(sub_ctx.command.invoke(sub_ctx))\n\n        # In chain mode we create the contexts step by step, but after the\n        # base command has been invoked.  Because at that point we do not\n        # know the subcommands yet, the invoked subcommand attribute is\n        # set to ``*`` to inform the command that subcommands are executed\n        # but nothing else.\n        with ctx:\n            ctx.invoked_subcommand = \"*\" if args else None\n            super().invoke(ctx)\n\n            # Otherwise we make every single context and invoke them in a\n            # chain.  In that case the return value to the result processor\n            # is the list of all invoked subcommand's results.\n            contexts = []\n            while args:\n                cmd_name, cmd, args = self.resolve_command(ctx, args)\n                assert cmd is not None\n                sub_ctx = cmd.make_context(\n                    cmd_name,\n                    args,\n                    parent=ctx,\n                    allow_extra_args=True,\n                    allow_interspersed_args=False,\n                )\n                contexts.append(sub_ctx)\n                args, sub_ctx.args = sub_ctx.args, []\n\n            rv = []\n            for sub_ctx in contexts:\n                with sub_ctx:\n                    rv.append(sub_ctx.command.invoke(sub_ctx))\n            return _process_result(rv)\n\n    def resolve_command(\n        self, ctx: Context, args: t.List[str]\n    ) -> t.Tuple[t.Optional[str], t.Optional[Command], t.List[str]]:\n        cmd_name = make_str(args[0])\n        original_cmd_name = cmd_name\n\n        # Get the command\n        cmd = self.get_command(ctx, cmd_name)\n\n        # If we can't find the command but there is a normalization\n        # function available, we try with that one.\n        if cmd is None and ctx.token_normalize_func is not None:\n            cmd_name = ctx.token_normalize_func(cmd_name)\n            cmd = self.get_command(ctx, cmd_name)\n\n        # If we don't find the command we want to show an error message\n        # to the user that it was not provided.  However, there is\n        # something else we should do: if the first argument looks like\n        # an option we want to kick off parsing again for arguments to\n        # resolve things like --help which now should go to the main\n        # place.\n        if cmd is None and not ctx.resilient_parsing:\n            if split_opt(cmd_name)[0]:\n                self.parse_args(ctx, ctx.args)\n            ctx.fail(_(\"No such command {name!r}.\").format(name=original_cmd_name))\n        return cmd_name if cmd else None, cmd, args[1:]\n\n    def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]:\n        \"\"\"Given a context and a command name, this returns a\n        :class:`Command` object if it exists or returns `None`.\n        \"\"\"\n        raise NotImplementedError\n\n    def list_commands(self, ctx: Context) -> t.List[str]:\n        \"\"\"Returns a list of subcommand names in the order they should\n        appear.\n        \"\"\"\n        return []\n\n    def shell_complete(self, ctx: Context, incomplete: str) -> t.List[\"CompletionItem\"]:\n        \"\"\"Return a list of completions for the incomplete value. Looks\n        at the names of options, subcommands, and chained\n        multi-commands.\n\n        :param ctx: Invocation context for this command.\n        :param incomplete: Value being completed. May be empty.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        from click.shell_completion import CompletionItem\n\n        results = [\n            CompletionItem(name, help=command.get_short_help_str())\n            for name, command in _complete_visible_commands(ctx, incomplete)\n        ]\n        results.extend(super().shell_complete(ctx, incomplete))\n        return results\n\n\nclass Group(MultiCommand):\n    \"\"\"A group allows a command to have subcommands attached. This is\n    the most common way to implement nesting in Click.\n\n    :param name: The name of the group command.\n    :param commands: A dict mapping names to :class:`Command` objects.\n        Can also be a list of :class:`Command`, which will use\n        :attr:`Command.name` to create the dict.\n    :param attrs: Other command arguments described in\n        :class:`MultiCommand`, :class:`Command`, and\n        :class:`BaseCommand`.\n\n    .. versionchanged:: 8.0\n        The ``commands`` argument can be a list of command objects.\n    \"\"\"\n\n    #: If set, this is used by the group's :meth:`command` decorator\n    #: as the default :class:`Command` class. This is useful to make all\n    #: subcommands use a custom command class.\n    #:\n    #: .. versionadded:: 8.0\n    command_class: t.Optional[t.Type[Command]] = None\n\n    #: If set, this is used by the group's :meth:`group` decorator\n    #: as the default :class:`Group` class. This is useful to make all\n    #: subgroups use a custom group class.\n    #:\n    #: If set to the special value :class:`type` (literally\n    #: ``group_class = type``), this group's class will be used as the\n    #: default class. This makes a custom group class continue to make\n    #: custom groups.\n    #:\n    #: .. versionadded:: 8.0\n    group_class: t.Optional[t.Union[t.Type[\"Group\"], t.Type[type]]] = None\n    # Literal[type] isn't valid, so use Type[type]\n\n    def __init__(\n        self,\n        name: t.Optional[str] = None,\n        commands: t.Optional[\n            t.Union[t.MutableMapping[str, Command], t.Sequence[Command]]\n        ] = None,\n        **attrs: t.Any,\n    ) -> None:\n        super().__init__(name, **attrs)\n\n        if commands is None:\n            commands = {}\n        elif isinstance(commands, abc.Sequence):\n            commands = {c.name: c for c in commands if c.name is not None}\n\n        #: The registered subcommands by their exported names.\n        self.commands: t.MutableMapping[str, Command] = commands\n\n    def add_command(self, cmd: Command, name: t.Optional[str] = None) -> None:\n        \"\"\"Registers another :class:`Command` with this group.  If the name\n        is not provided, the name of the command is used.\n        \"\"\"\n        name = name or cmd.name\n        if name is None:\n            raise TypeError(\"Command has no name.\")\n        _check_multicommand(self, name, cmd, register=True)\n        self.commands[name] = cmd\n\n    @t.overload\n    def command(self, __func: t.Callable[..., t.Any]) -> Command: ...\n\n    @t.overload\n    def command(\n        self, *args: t.Any, **kwargs: t.Any\n    ) -> t.Callable[[t.Callable[..., t.Any]], Command]: ...\n\n    def command(\n        self, *args: t.Any, **kwargs: t.Any\n    ) -> t.Union[t.Callable[[t.Callable[..., t.Any]], Command], Command]:\n        \"\"\"A shortcut decorator for declaring and attaching a command to\n        the group. This takes the same arguments as :func:`command` and\n        immediately registers the created command with this group by\n        calling :meth:`add_command`.\n\n        To customize the command class used, set the\n        :attr:`command_class` attribute.\n\n        .. versionchanged:: 8.1\n            This decorator can be applied without parentheses.\n\n        .. versionchanged:: 8.0\n            Added the :attr:`command_class` attribute.\n        \"\"\"\n        from .decorators import command\n\n        func: t.Optional[t.Callable[..., t.Any]] = None\n\n        if args and callable(args[0]):\n            assert (\n                len(args) == 1 and not kwargs\n            ), \"Use 'command(**kwargs)(callable)' to provide arguments.\"\n            (func,) = args\n            args = ()\n\n        if self.command_class and kwargs.get(\"cls\") is None:\n            kwargs[\"cls\"] = self.command_class\n\n        def decorator(f: t.Callable[..., t.Any]) -> Command:\n            cmd: Command = command(*args, **kwargs)(f)\n            self.add_command(cmd)\n            return cmd\n\n        if func is not None:\n            return decorator(func)\n\n        return decorator\n\n    @t.overload\n    def group(self, __func: t.Callable[..., t.Any]) -> \"Group\": ...\n\n    @t.overload\n    def group(\n        self, *args: t.Any, **kwargs: t.Any\n    ) -> t.Callable[[t.Callable[..., t.Any]], \"Group\"]: ...\n\n    def group(\n        self, *args: t.Any, **kwargs: t.Any\n    ) -> t.Union[t.Callable[[t.Callable[..., t.Any]], \"Group\"], \"Group\"]:\n        \"\"\"A shortcut decorator for declaring and attaching a group to\n        the group. This takes the same arguments as :func:`group` and\n        immediately registers the created group with this group by\n        calling :meth:`add_command`.\n\n        To customize the group class used, set the :attr:`group_class`\n        attribute.\n\n        .. versionchanged:: 8.1\n            This decorator can be applied without parentheses.\n\n        .. versionchanged:: 8.0\n            Added the :attr:`group_class` attribute.\n        \"\"\"\n        from .decorators import group\n\n        func: t.Optional[t.Callable[..., t.Any]] = None\n\n        if args and callable(args[0]):\n            assert (\n                len(args) == 1 and not kwargs\n            ), \"Use 'group(**kwargs)(callable)' to provide arguments.\"\n            (func,) = args\n            args = ()\n\n        if self.group_class is not None and kwargs.get(\"cls\") is None:\n            if self.group_class is type:\n                kwargs[\"cls\"] = type(self)\n            else:\n                kwargs[\"cls\"] = self.group_class\n\n        def decorator(f: t.Callable[..., t.Any]) -> \"Group\":\n            cmd: Group = group(*args, **kwargs)(f)\n            self.add_command(cmd)\n            return cmd\n\n        if func is not None:\n            return decorator(func)\n\n        return decorator\n\n    def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]:\n        return self.commands.get(cmd_name)\n\n    def list_commands(self, ctx: Context) -> t.List[str]:\n        return sorted(self.commands)\n\n\nclass CommandCollection(MultiCommand):\n    \"\"\"A command collection is a multi command that merges multiple multi\n    commands together into one.  This is a straightforward implementation\n    that accepts a list of different multi commands as sources and\n    provides all the commands for each of them.\n\n    See :class:`MultiCommand` and :class:`Command` for the description of\n    ``name`` and ``attrs``.\n    \"\"\"\n\n    def __init__(\n        self,\n        name: t.Optional[str] = None,\n        sources: t.Optional[t.List[MultiCommand]] = None,\n        **attrs: t.Any,\n    ) -> None:\n        super().__init__(name, **attrs)\n        #: The list of registered multi commands.\n        self.sources: t.List[MultiCommand] = sources or []\n\n    def add_source(self, multi_cmd: MultiCommand) -> None:\n        \"\"\"Adds a new multi command to the chain dispatcher.\"\"\"\n        self.sources.append(multi_cmd)\n\n    def get_command(self, ctx: Context, cmd_name: str) -> t.Optional[Command]:\n        for source in self.sources:\n            rv = source.get_command(ctx, cmd_name)\n\n            if rv is not None:\n                if self.chain:\n                    _check_multicommand(self, cmd_name, rv)\n\n                return rv\n\n        return None\n\n    def list_commands(self, ctx: Context) -> t.List[str]:\n        rv: t.Set[str] = set()\n\n        for source in self.sources:\n            rv.update(source.list_commands(ctx))\n\n        return sorted(rv)\n\n\ndef _check_iter(value: t.Any) -> t.Iterator[t.Any]:\n    \"\"\"Check if the value is iterable but not a string. Raises a type\n    error, or return an iterator over the value.\n    \"\"\"\n    if isinstance(value, str):\n        raise TypeError\n\n    return iter(value)\n\n\nclass Parameter:\n    r\"\"\"A parameter to a command comes in two versions: they are either\n    :class:`Option`\\s or :class:`Argument`\\s.  Other subclasses are currently\n    not supported by design as some of the internals for parsing are\n    intentionally not finalized.\n\n    Some settings are supported by both options and arguments.\n\n    :param param_decls: the parameter declarations for this option or\n                        argument.  This is a list of flags or argument\n                        names.\n    :param type: the type that should be used.  Either a :class:`ParamType`\n                 or a Python type.  The latter is converted into the former\n                 automatically if supported.\n    :param required: controls if this is optional or not.\n    :param default: the default value if omitted.  This can also be a callable,\n                    in which case it's invoked when the default is needed\n                    without any arguments.\n    :param callback: A function to further process or validate the value\n        after type conversion. It is called as ``f(ctx, param, value)``\n        and must return the value. It is called for all sources,\n        including prompts.\n    :param nargs: the number of arguments to match.  If not ``1`` the return\n                  value is a tuple instead of single value.  The default for\n                  nargs is ``1`` (except if the type is a tuple, then it's\n                  the arity of the tuple). If ``nargs=-1``, all remaining\n                  parameters are collected.\n    :param metavar: how the value is represented in the help page.\n    :param expose_value: if this is `True` then the value is passed onwards\n                         to the command callback and stored on the context,\n                         otherwise it's skipped.\n    :param is_eager: eager values are processed before non eager ones.  This\n                     should not be set for arguments or it will inverse the\n                     order of processing.\n    :param envvar: a string or list of strings that are environment variables\n                   that should be checked.\n    :param shell_complete: A function that returns custom shell\n        completions. Used instead of the param's type completion if\n        given. Takes ``ctx, param, incomplete`` and must return a list\n        of :class:`~click.shell_completion.CompletionItem` or a list of\n        strings.\n\n    .. versionchanged:: 8.0\n        ``process_value`` validates required parameters and bounded\n        ``nargs``, and invokes the parameter callback before returning\n        the value. This allows the callback to validate prompts.\n        ``full_process_value`` is removed.\n\n    .. versionchanged:: 8.0\n        ``autocompletion`` is renamed to ``shell_complete`` and has new\n        semantics described above. The old name is deprecated and will\n        be removed in 8.1, until then it will be wrapped to match the\n        new requirements.\n\n    .. versionchanged:: 8.0\n        For ``multiple=True, nargs>1``, the default must be a list of\n        tuples.\n\n    .. versionchanged:: 8.0\n        Setting a default is no longer required for ``nargs>1``, it will\n        default to ``None``. ``multiple=True`` or ``nargs=-1`` will\n        default to ``()``.\n\n    .. versionchanged:: 7.1\n        Empty environment variables are ignored rather than taking the\n        empty string value. This makes it possible for scripts to clear\n        variables if they can't unset them.\n\n    .. versionchanged:: 2.0\n        Changed signature for parameter callback to also be passed the\n        parameter. The old callback format will still work, but it will\n        raise a warning to give you a chance to migrate the code easier.\n    \"\"\"\n\n    param_type_name = \"parameter\"\n\n    def __init__(\n        self,\n        param_decls: t.Optional[t.Sequence[str]] = None,\n        type: t.Optional[t.Union[types.ParamType, t.Any]] = None,\n        required: bool = False,\n        default: t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]] = None,\n        callback: t.Optional[t.Callable[[Context, \"Parameter\", t.Any], t.Any]] = None,\n        nargs: t.Optional[int] = None,\n        multiple: bool = False,\n        metavar: t.Optional[str] = None,\n        expose_value: bool = True,\n        is_eager: bool = False,\n        envvar: t.Optional[t.Union[str, t.Sequence[str]]] = None,\n        shell_complete: t.Optional[\n            t.Callable[\n                [Context, \"Parameter\", str],\n                t.Union[t.List[\"CompletionItem\"], t.List[str]],\n            ]\n        ] = None,\n    ) -> None:\n        self.name: t.Optional[str]\n        self.opts: t.List[str]\n        self.secondary_opts: t.List[str]\n        self.name, self.opts, self.secondary_opts = self._parse_decls(\n            param_decls or (), expose_value\n        )\n        self.type: types.ParamType = types.convert_type(type, default)\n\n        # Default nargs to what the type tells us if we have that\n        # information available.\n        if nargs is None:\n            if self.type.is_composite:\n                nargs = self.type.arity\n            else:\n                nargs = 1\n\n        self.required = required\n        self.callback = callback\n        self.nargs = nargs\n        self.multiple = multiple\n        self.expose_value = expose_value\n        self.default = default\n        self.is_eager = is_eager\n        self.metavar = metavar\n        self.envvar = envvar\n        self._custom_shell_complete = shell_complete\n\n        if __debug__:\n            if self.type.is_composite and nargs != self.type.arity:\n                raise ValueError(\n                    f\"'nargs' must be {self.type.arity} (or None) for\"\n                    f\" type {self.type!r}, but it was {nargs}.\"\n                )\n\n            # Skip no default or callable default.\n            check_default = default if not callable(default) else None\n\n            if check_default is not None:\n                if multiple:\n                    try:\n                        # Only check the first value against nargs.\n                        check_default = next(_check_iter(check_default), None)\n                    except TypeError:\n                        raise ValueError(\n                            \"'default' must be a list when 'multiple' is true.\"\n                        ) from None\n\n                # Can be None for multiple with empty default.\n                if nargs != 1 and check_default is not None:\n                    try:\n                        _check_iter(check_default)\n                    except TypeError:\n                        if multiple:\n                            message = (\n                                \"'default' must be a list of lists when 'multiple' is\"\n                                \" true and 'nargs' != 1.\"\n                            )\n                        else:\n                            message = \"'default' must be a list when 'nargs' != 1.\"\n\n                        raise ValueError(message) from None\n\n                    if nargs > 1 and len(check_default) != nargs:\n                        subject = \"item length\" if multiple else \"length\"\n                        raise ValueError(\n                            f\"'default' {subject} must match nargs={nargs}.\"\n                        )\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        \"\"\"Gather information that could be useful for a tool generating\n        user-facing documentation.\n\n        Use :meth:`click.Context.to_info_dict` to traverse the entire\n        CLI structure.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        return {\n            \"name\": self.name,\n            \"param_type_name\": self.param_type_name,\n            \"opts\": self.opts,\n            \"secondary_opts\": self.secondary_opts,\n            \"type\": self.type.to_info_dict(),\n            \"required\": self.required,\n            \"nargs\": self.nargs,\n            \"multiple\": self.multiple,\n            \"default\": self.default,\n            \"envvar\": self.envvar,\n        }\n\n    def __repr__(self) -> str:\n        return f\"<{self.__class__.__name__} {self.name}>\"\n\n    def _parse_decls(\n        self, decls: t.Sequence[str], expose_value: bool\n    ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]:\n        raise NotImplementedError()\n\n    @property\n    def human_readable_name(self) -> str:\n        \"\"\"Returns the human readable name of this parameter.  This is the\n        same as the name for options, but the metavar for arguments.\n        \"\"\"\n        return self.name  # type: ignore\n\n    def make_metavar(self) -> str:\n        if self.metavar is not None:\n            return self.metavar\n\n        metavar = self.type.get_metavar(self)\n\n        if metavar is None:\n            metavar = self.type.name.upper()\n\n        if self.nargs != 1:\n            metavar += \"...\"\n\n        return metavar\n\n    @t.overload\n    def get_default(\n        self, ctx: Context, call: \"te.Literal[True]\" = True\n    ) -> t.Optional[t.Any]: ...\n\n    @t.overload\n    def get_default(\n        self, ctx: Context, call: bool = ...\n    ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: ...\n\n    def get_default(\n        self, ctx: Context, call: bool = True\n    ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]:\n        \"\"\"Get the default for the parameter. Tries\n        :meth:`Context.lookup_default` first, then the local default.\n\n        :param ctx: Current context.\n        :param call: If the default is a callable, call it. Disable to\n            return the callable instead.\n\n        .. versionchanged:: 8.0.2\n            Type casting is no longer performed when getting a default.\n\n        .. versionchanged:: 8.0.1\n            Type casting can fail in resilient parsing mode. Invalid\n            defaults will not prevent showing help text.\n\n        .. versionchanged:: 8.0\n            Looks at ``ctx.default_map`` first.\n\n        .. versionchanged:: 8.0\n            Added the ``call`` parameter.\n        \"\"\"\n        value = ctx.lookup_default(self.name, call=False)  # type: ignore\n\n        if value is None:\n            value = self.default\n\n        if call and callable(value):\n            value = value()\n\n        return value\n\n    def add_to_parser(self, parser: OptionParser, ctx: Context) -> None:\n        raise NotImplementedError()\n\n    def consume_value(\n        self, ctx: Context, opts: t.Mapping[str, t.Any]\n    ) -> t.Tuple[t.Any, ParameterSource]:\n        value = opts.get(self.name)  # type: ignore\n        source = ParameterSource.COMMANDLINE\n\n        if value is None:\n            value = self.value_from_envvar(ctx)\n            source = ParameterSource.ENVIRONMENT\n\n        if value is None:\n            value = ctx.lookup_default(self.name)  # type: ignore\n            source = ParameterSource.DEFAULT_MAP\n\n        if value is None:\n            value = self.get_default(ctx)\n            source = ParameterSource.DEFAULT\n\n        return value, source\n\n    def type_cast_value(self, ctx: Context, value: t.Any) -> t.Any:\n        \"\"\"Convert and validate a value against the option's\n        :attr:`type`, :attr:`multiple`, and :attr:`nargs`.\n        \"\"\"\n        if value is None:\n            return () if self.multiple or self.nargs == -1 else None\n\n        def check_iter(value: t.Any) -> t.Iterator[t.Any]:\n            try:\n                return _check_iter(value)\n            except TypeError:\n                # This should only happen when passing in args manually,\n                # the parser should construct an iterable when parsing\n                # the command line.\n                raise BadParameter(\n                    _(\"Value must be an iterable.\"), ctx=ctx, param=self\n                ) from None\n\n        if self.nargs == 1 or self.type.is_composite:\n\n            def convert(value: t.Any) -> t.Any:\n                return self.type(value, param=self, ctx=ctx)\n\n        elif self.nargs == -1:\n\n            def convert(value: t.Any) -> t.Any:  # t.Tuple[t.Any, ...]\n                return tuple(self.type(x, self, ctx) for x in check_iter(value))\n\n        else:  # nargs > 1\n\n            def convert(value: t.Any) -> t.Any:  # t.Tuple[t.Any, ...]\n                value = tuple(check_iter(value))\n\n                if len(value) != self.nargs:\n                    raise BadParameter(\n                        ngettext(\n                            \"Takes {nargs} values but 1 was given.\",\n                            \"Takes {nargs} values but {len} were given.\",\n                            len(value),\n                        ).format(nargs=self.nargs, len=len(value)),\n                        ctx=ctx,\n                        param=self,\n                    )\n\n                return tuple(self.type(x, self, ctx) for x in value)\n\n        if self.multiple:\n            return tuple(convert(x) for x in check_iter(value))\n\n        return convert(value)\n\n    def value_is_missing(self, value: t.Any) -> bool:\n        if value is None:\n            return True\n\n        if (self.nargs != 1 or self.multiple) and value == ():\n            return True\n\n        return False\n\n    def process_value(self, ctx: Context, value: t.Any) -> t.Any:\n        value = self.type_cast_value(ctx, value)\n\n        if self.required and self.value_is_missing(value):\n            raise MissingParameter(ctx=ctx, param=self)\n\n        if self.callback is not None:\n            value = self.callback(ctx, self, value)\n\n        return value\n\n    def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]:\n        if self.envvar is None:\n            return None\n\n        if isinstance(self.envvar, str):\n            rv = os.environ.get(self.envvar)\n\n            if rv:\n                return rv\n        else:\n            for envvar in self.envvar:\n                rv = os.environ.get(envvar)\n\n                if rv:\n                    return rv\n\n        return None\n\n    def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]:\n        rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx)\n\n        if rv is not None and self.nargs != 1:\n            rv = self.type.split_envvar_value(rv)\n\n        return rv\n\n    def handle_parse_result(\n        self, ctx: Context, opts: t.Mapping[str, t.Any], args: t.List[str]\n    ) -> t.Tuple[t.Any, t.List[str]]:\n        with augment_usage_errors(ctx, param=self):\n            value, source = self.consume_value(ctx, opts)\n            ctx.set_parameter_source(self.name, source)  # type: ignore\n\n            try:\n                value = self.process_value(ctx, value)\n            except Exception:\n                if not ctx.resilient_parsing:\n                    raise\n\n                value = None\n\n        if self.expose_value:\n            ctx.params[self.name] = value  # type: ignore\n\n        return value, args\n\n    def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]:\n        pass\n\n    def get_usage_pieces(self, ctx: Context) -> t.List[str]:\n        return []\n\n    def get_error_hint(self, ctx: Context) -> str:\n        \"\"\"Get a stringified version of the param for use in error messages to\n        indicate which param caused the error.\n        \"\"\"\n        hint_list = self.opts or [self.human_readable_name]\n        return \" / \".join(f\"'{x}'\" for x in hint_list)\n\n    def shell_complete(self, ctx: Context, incomplete: str) -> t.List[\"CompletionItem\"]:\n        \"\"\"Return a list of completions for the incomplete value. If a\n        ``shell_complete`` function was given during init, it is used.\n        Otherwise, the :attr:`type`\n        :meth:`~click.types.ParamType.shell_complete` function is used.\n\n        :param ctx: Invocation context for this command.\n        :param incomplete: Value being completed. May be empty.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        if self._custom_shell_complete is not None:\n            results = self._custom_shell_complete(ctx, self, incomplete)\n\n            if results and isinstance(results[0], str):\n                from click.shell_completion import CompletionItem\n\n                results = [CompletionItem(c) for c in results]\n\n            return t.cast(t.List[\"CompletionItem\"], results)\n\n        return self.type.shell_complete(ctx, self, incomplete)\n\n\nclass Option(Parameter):\n    \"\"\"Options are usually optional values on the command line and\n    have some extra features that arguments don't have.\n\n    All other parameters are passed onwards to the parameter constructor.\n\n    :param show_default: Show the default value for this option in its\n        help text. Values are not shown by default, unless\n        :attr:`Context.show_default` is ``True``. If this value is a\n        string, it shows that string in parentheses instead of the\n        actual value. This is particularly useful for dynamic options.\n        For single option boolean flags, the default remains hidden if\n        its value is ``False``.\n    :param show_envvar: Controls if an environment variable should be\n        shown on the help page. Normally, environment variables are not\n        shown.\n    :param prompt: If set to ``True`` or a non empty string then the\n        user will be prompted for input. If set to ``True`` the prompt\n        will be the option name capitalized.\n    :param confirmation_prompt: Prompt a second time to confirm the\n        value if it was prompted for. Can be set to a string instead of\n        ``True`` to customize the message.\n    :param prompt_required: If set to ``False``, the user will be\n        prompted for input only when the option was specified as a flag\n        without a value.\n    :param hide_input: If this is ``True`` then the input on the prompt\n        will be hidden from the user. This is useful for password input.\n    :param is_flag: forces this option to act as a flag.  The default is\n                    auto detection.\n    :param flag_value: which value should be used for this flag if it's\n                       enabled.  This is set to a boolean automatically if\n                       the option string contains a slash to mark two options.\n    :param multiple: if this is set to `True` then the argument is accepted\n                     multiple times and recorded.  This is similar to ``nargs``\n                     in how it works but supports arbitrary number of\n                     arguments.\n    :param count: this flag makes an option increment an integer.\n    :param allow_from_autoenv: if this is enabled then the value of this\n                               parameter will be pulled from an environment\n                               variable in case a prefix is defined on the\n                               context.\n    :param help: the help string.\n    :param hidden: hide this option from help outputs.\n    :param attrs: Other command arguments described in :class:`Parameter`.\n\n    .. versionchanged:: 8.1.0\n        Help text indentation is cleaned here instead of only in the\n        ``@option`` decorator.\n\n    .. versionchanged:: 8.1.0\n        The ``show_default`` parameter overrides\n        ``Context.show_default``.\n\n    .. versionchanged:: 8.1.0\n        The default of a single option boolean flag is not shown if the\n        default value is ``False``.\n\n    .. versionchanged:: 8.0.1\n        ``type`` is detected from ``flag_value`` if given.\n    \"\"\"\n\n    param_type_name = \"option\"\n\n    def __init__(\n        self,\n        param_decls: t.Optional[t.Sequence[str]] = None,\n        show_default: t.Union[bool, str, None] = None,\n        prompt: t.Union[bool, str] = False,\n        confirmation_prompt: t.Union[bool, str] = False,\n        prompt_required: bool = True,\n        hide_input: bool = False,\n        is_flag: t.Optional[bool] = None,\n        flag_value: t.Optional[t.Any] = None,\n        multiple: bool = False,\n        count: bool = False,\n        allow_from_autoenv: bool = True,\n        type: t.Optional[t.Union[types.ParamType, t.Any]] = None,\n        help: t.Optional[str] = None,\n        hidden: bool = False,\n        show_choices: bool = True,\n        show_envvar: bool = False,\n        **attrs: t.Any,\n    ) -> None:\n        if help:\n            help = inspect.cleandoc(help)\n\n        default_is_missing = \"default\" not in attrs\n        super().__init__(param_decls, type=type, multiple=multiple, **attrs)\n\n        if prompt is True:\n            if self.name is None:\n                raise TypeError(\"'name' is required with 'prompt=True'.\")\n\n            prompt_text: t.Optional[str] = self.name.replace(\"_\", \" \").capitalize()\n        elif prompt is False:\n            prompt_text = None\n        else:\n            prompt_text = prompt\n\n        self.prompt = prompt_text\n        self.confirmation_prompt = confirmation_prompt\n        self.prompt_required = prompt_required\n        self.hide_input = hide_input\n        self.hidden = hidden\n\n        # If prompt is enabled but not required, then the option can be\n        # used as a flag to indicate using prompt or flag_value.\n        self._flag_needs_value = self.prompt is not None and not self.prompt_required\n\n        if is_flag is None:\n            if flag_value is not None:\n                # Implicitly a flag because flag_value was set.\n                is_flag = True\n            elif self._flag_needs_value:\n                # Not a flag, but when used as a flag it shows a prompt.\n                is_flag = False\n            else:\n                # Implicitly a flag because flag options were given.\n                is_flag = bool(self.secondary_opts)\n        elif is_flag is False and not self._flag_needs_value:\n            # Not a flag, and prompt is not enabled, can be used as a\n            # flag if flag_value is set.\n            self._flag_needs_value = flag_value is not None\n\n        self.default: t.Union[t.Any, t.Callable[[], t.Any]]\n\n        if is_flag and default_is_missing and not self.required:\n            if multiple:\n                self.default = ()\n            else:\n                self.default = False\n\n        if flag_value is None:\n            flag_value = not self.default\n\n        self.type: types.ParamType\n        if is_flag and type is None:\n            # Re-guess the type from the flag value instead of the\n            # default.\n            self.type = types.convert_type(None, flag_value)\n\n        self.is_flag: bool = is_flag\n        self.is_bool_flag: bool = is_flag and isinstance(self.type, types.BoolParamType)\n        self.flag_value: t.Any = flag_value\n\n        # Counting\n        self.count = count\n        if count:\n            if type is None:\n                self.type = types.IntRange(min=0)\n            if default_is_missing:\n                self.default = 0\n\n        self.allow_from_autoenv = allow_from_autoenv\n        self.help = help\n        self.show_default = show_default\n        self.show_choices = show_choices\n        self.show_envvar = show_envvar\n\n        if __debug__:\n            if self.nargs == -1:\n                raise TypeError(\"nargs=-1 is not supported for options.\")\n\n            if self.prompt and self.is_flag and not self.is_bool_flag:\n                raise TypeError(\"'prompt' is not valid for non-boolean flag.\")\n\n            if not self.is_bool_flag and self.secondary_opts:\n                raise TypeError(\"Secondary flag is not valid for non-boolean flag.\")\n\n            if self.is_bool_flag and self.hide_input and self.prompt is not None:\n                raise TypeError(\n                    \"'prompt' with 'hide_input' is not valid for boolean flag.\"\n                )\n\n            if self.count:\n                if self.multiple:\n                    raise TypeError(\"'count' is not valid with 'multiple'.\")\n\n                if self.is_flag:\n                    raise TypeError(\"'count' is not valid with 'is_flag'.\")\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict()\n        info_dict.update(\n            help=self.help,\n            prompt=self.prompt,\n            is_flag=self.is_flag,\n            flag_value=self.flag_value,\n            count=self.count,\n            hidden=self.hidden,\n        )\n        return info_dict\n\n    def _parse_decls(\n        self, decls: t.Sequence[str], expose_value: bool\n    ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]:\n        opts = []\n        secondary_opts = []\n        name = None\n        possible_names = []\n\n        for decl in decls:\n            if decl.isidentifier():\n                if name is not None:\n                    raise TypeError(f\"Name '{name}' defined twice\")\n                name = decl\n            else:\n                split_char = \";\" if decl[:1] == \"/\" else \"/\"\n                if split_char in decl:\n                    first, second = decl.split(split_char, 1)\n                    first = first.rstrip()\n                    if first:\n                        possible_names.append(split_opt(first))\n                        opts.append(first)\n                    second = second.lstrip()\n                    if second:\n                        secondary_opts.append(second.lstrip())\n                    if first == second:\n                        raise ValueError(\n                            f\"Boolean option {decl!r} cannot use the\"\n                            \" same flag for true/false.\"\n                        )\n                else:\n                    possible_names.append(split_opt(decl))\n                    opts.append(decl)\n\n        if name is None and possible_names:\n            possible_names.sort(key=lambda x: -len(x[0]))  # group long options first\n            name = possible_names[0][1].replace(\"-\", \"_\").lower()\n            if not name.isidentifier():\n                name = None\n\n        if name is None:\n            if not expose_value:\n                return None, opts, secondary_opts\n            raise TypeError(\n                f\"Could not determine name for option with declarations {decls!r}\"\n            )\n\n        if not opts and not secondary_opts:\n            raise TypeError(\n                f\"No options defined but a name was passed ({name}).\"\n                \" Did you mean to declare an argument instead? Did\"\n                f\" you mean to pass '--{name}'?\"\n            )\n\n        return name, opts, secondary_opts\n\n    def add_to_parser(self, parser: OptionParser, ctx: Context) -> None:\n        if self.multiple:\n            action = \"append\"\n        elif self.count:\n            action = \"count\"\n        else:\n            action = \"store\"\n\n        if self.is_flag:\n            action = f\"{action}_const\"\n\n            if self.is_bool_flag and self.secondary_opts:\n                parser.add_option(\n                    obj=self, opts=self.opts, dest=self.name, action=action, const=True\n                )\n                parser.add_option(\n                    obj=self,\n                    opts=self.secondary_opts,\n                    dest=self.name,\n                    action=action,\n                    const=False,\n                )\n            else:\n                parser.add_option(\n                    obj=self,\n                    opts=self.opts,\n                    dest=self.name,\n                    action=action,\n                    const=self.flag_value,\n                )\n        else:\n            parser.add_option(\n                obj=self,\n                opts=self.opts,\n                dest=self.name,\n                action=action,\n                nargs=self.nargs,\n            )\n\n    def get_help_record(self, ctx: Context) -> t.Optional[t.Tuple[str, str]]:\n        if self.hidden:\n            return None\n\n        any_prefix_is_slash = False\n\n        def _write_opts(opts: t.Sequence[str]) -> str:\n            nonlocal any_prefix_is_slash\n\n            rv, any_slashes = join_options(opts)\n\n            if any_slashes:\n                any_prefix_is_slash = True\n\n            if not self.is_flag and not self.count:\n                rv += f\" {self.make_metavar()}\"\n\n            return rv\n\n        rv = [_write_opts(self.opts)]\n\n        if self.secondary_opts:\n            rv.append(_write_opts(self.secondary_opts))\n\n        help = self.help or \"\"\n        extra = []\n\n        if self.show_envvar:\n            envvar = self.envvar\n\n            if envvar is None:\n                if (\n                    self.allow_from_autoenv\n                    and ctx.auto_envvar_prefix is not None\n                    and self.name is not None\n                ):\n                    envvar = f\"{ctx.auto_envvar_prefix}_{self.name.upper()}\"\n\n            if envvar is not None:\n                var_str = (\n                    envvar\n                    if isinstance(envvar, str)\n                    else \", \".join(str(d) for d in envvar)\n                )\n                extra.append(_(\"env var: {var}\").format(var=var_str))\n\n        # Temporarily enable resilient parsing to avoid type casting\n        # failing for the default. Might be possible to extend this to\n        # help formatting in general.\n        resilient = ctx.resilient_parsing\n        ctx.resilient_parsing = True\n\n        try:\n            default_value = self.get_default(ctx, call=False)\n        finally:\n            ctx.resilient_parsing = resilient\n\n        show_default = False\n        show_default_is_str = False\n\n        if self.show_default is not None:\n            if isinstance(self.show_default, str):\n                show_default_is_str = show_default = True\n            else:\n                show_default = self.show_default\n        elif ctx.show_default is not None:\n            show_default = ctx.show_default\n\n        if show_default_is_str or (show_default and (default_value is not None)):\n            if show_default_is_str:\n                default_string = f\"({self.show_default})\"\n            elif isinstance(default_value, (list, tuple)):\n                default_string = \", \".join(str(d) for d in default_value)\n            elif inspect.isfunction(default_value):\n                default_string = _(\"(dynamic)\")\n            elif self.is_bool_flag and self.secondary_opts:\n                # For boolean flags that have distinct True/False opts,\n                # use the opt without prefix instead of the value.\n                default_string = split_opt(\n                    (self.opts if default_value else self.secondary_opts)[0]\n                )[1]\n            elif self.is_bool_flag and not self.secondary_opts and not default_value:\n                default_string = \"\"\n            elif default_value == \"\":\n                default_string = '\"\"'\n            else:\n                default_string = str(default_value)\n\n            if default_string:\n                extra.append(_(\"default: {default}\").format(default=default_string))\n\n        if (\n            isinstance(self.type, types._NumberRangeBase)\n            # skip count with default range type\n            and not (self.count and self.type.min == 0 and self.type.max is None)\n        ):\n            range_str = self.type._describe_range()\n\n            if range_str:\n                extra.append(range_str)\n\n        if self.required:\n            extra.append(_(\"required\"))\n\n        if extra:\n            extra_str = \"; \".join(extra)\n            help = f\"{help}  [{extra_str}]\" if help else f\"[{extra_str}]\"\n\n        return (\"; \" if any_prefix_is_slash else \" / \").join(rv), help\n\n    @t.overload\n    def get_default(\n        self, ctx: Context, call: \"te.Literal[True]\" = True\n    ) -> t.Optional[t.Any]: ...\n\n    @t.overload\n    def get_default(\n        self, ctx: Context, call: bool = ...\n    ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: ...\n\n    def get_default(\n        self, ctx: Context, call: bool = True\n    ) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]:\n        # If we're a non boolean flag our default is more complex because\n        # we need to look at all flags in the same group to figure out\n        # if we're the default one in which case we return the flag\n        # value as default.\n        if self.is_flag and not self.is_bool_flag:\n            for param in ctx.command.params:\n                if param.name == self.name and param.default:\n                    return t.cast(Option, param).flag_value\n\n            return None\n\n        return super().get_default(ctx, call=call)\n\n    def prompt_for_value(self, ctx: Context) -> t.Any:\n        \"\"\"This is an alternative flow that can be activated in the full\n        value processing if a value does not exist.  It will prompt the\n        user until a valid value exists and then returns the processed\n        value as result.\n        \"\"\"\n        assert self.prompt is not None\n\n        # Calculate the default before prompting anything to be stable.\n        default = self.get_default(ctx)\n\n        # If this is a prompt for a flag we need to handle this\n        # differently.\n        if self.is_bool_flag:\n            return confirm(self.prompt, default)\n\n        return prompt(\n            self.prompt,\n            default=default,\n            type=self.type,\n            hide_input=self.hide_input,\n            show_choices=self.show_choices,\n            confirmation_prompt=self.confirmation_prompt,\n            value_proc=lambda x: self.process_value(ctx, x),\n        )\n\n    def resolve_envvar_value(self, ctx: Context) -> t.Optional[str]:\n        rv = super().resolve_envvar_value(ctx)\n\n        if rv is not None:\n            return rv\n\n        if (\n            self.allow_from_autoenv\n            and ctx.auto_envvar_prefix is not None\n            and self.name is not None\n        ):\n            envvar = f\"{ctx.auto_envvar_prefix}_{self.name.upper()}\"\n            rv = os.environ.get(envvar)\n\n            if rv:\n                return rv\n\n        return None\n\n    def value_from_envvar(self, ctx: Context) -> t.Optional[t.Any]:\n        rv: t.Optional[t.Any] = self.resolve_envvar_value(ctx)\n\n        if rv is None:\n            return None\n\n        value_depth = (self.nargs != 1) + bool(self.multiple)\n\n        if value_depth > 0:\n            rv = self.type.split_envvar_value(rv)\n\n            if self.multiple and self.nargs != 1:\n                rv = batch(rv, self.nargs)\n\n        return rv\n\n    def consume_value(\n        self, ctx: Context, opts: t.Mapping[str, \"Parameter\"]\n    ) -> t.Tuple[t.Any, ParameterSource]:\n        value, source = super().consume_value(ctx, opts)\n\n        # The parser will emit a sentinel value if the option can be\n        # given as a flag without a value. This is different from None\n        # to distinguish from the flag not being given at all.\n        if value is _flag_needs_value:\n            if self.prompt is not None and not ctx.resilient_parsing:\n                value = self.prompt_for_value(ctx)\n                source = ParameterSource.PROMPT\n            else:\n                value = self.flag_value\n                source = ParameterSource.COMMANDLINE\n\n        elif (\n            self.multiple\n            and value is not None\n            and any(v is _flag_needs_value for v in value)\n        ):\n            value = [self.flag_value if v is _flag_needs_value else v for v in value]\n            source = ParameterSource.COMMANDLINE\n\n        # The value wasn't set, or used the param's default, prompt if\n        # prompting is enabled.\n        elif (\n            source in {None, ParameterSource.DEFAULT}\n            and self.prompt is not None\n            and (self.required or self.prompt_required)\n            and not ctx.resilient_parsing\n        ):\n            value = self.prompt_for_value(ctx)\n            source = ParameterSource.PROMPT\n\n        return value, source\n\n\nclass Argument(Parameter):\n    \"\"\"Arguments are positional parameters to a command.  They generally\n    provide fewer features than options but can have infinite ``nargs``\n    and are required by default.\n\n    All parameters are passed onwards to the constructor of :class:`Parameter`.\n    \"\"\"\n\n    param_type_name = \"argument\"\n\n    def __init__(\n        self,\n        param_decls: t.Sequence[str],\n        required: t.Optional[bool] = None,\n        **attrs: t.Any,\n    ) -> None:\n        if required is None:\n            if attrs.get(\"default\") is not None:\n                required = False\n            else:\n                required = attrs.get(\"nargs\", 1) > 0\n\n        if \"multiple\" in attrs:\n            raise TypeError(\"__init__() got an unexpected keyword argument 'multiple'.\")\n\n        super().__init__(param_decls, required=required, **attrs)\n\n        if __debug__:\n            if self.default is not None and self.nargs == -1:\n                raise TypeError(\"'default' is not supported for nargs=-1.\")\n\n    @property\n    def human_readable_name(self) -> str:\n        if self.metavar is not None:\n            return self.metavar\n        return self.name.upper()  # type: ignore\n\n    def make_metavar(self) -> str:\n        if self.metavar is not None:\n            return self.metavar\n        var = self.type.get_metavar(self)\n        if not var:\n            var = self.name.upper()  # type: ignore\n        if not self.required:\n            var = f\"[{var}]\"\n        if self.nargs != 1:\n            var += \"...\"\n        return var\n\n    def _parse_decls(\n        self, decls: t.Sequence[str], expose_value: bool\n    ) -> t.Tuple[t.Optional[str], t.List[str], t.List[str]]:\n        if not decls:\n            if not expose_value:\n                return None, [], []\n            raise TypeError(\"Argument is marked as exposed, but does not have a name.\")\n        if len(decls) == 1:\n            name = arg = decls[0]\n            name = name.replace(\"-\", \"_\").lower()\n        else:\n            raise TypeError(\n                \"Arguments take exactly one parameter declaration, got\"\n                f\" {len(decls)}.\"\n            )\n        return name, [arg], []\n\n    def get_usage_pieces(self, ctx: Context) -> t.List[str]:\n        return [self.make_metavar()]\n\n    def get_error_hint(self, ctx: Context) -> str:\n        return f\"'{self.make_metavar()}'\"\n\n    def add_to_parser(self, parser: OptionParser, ctx: Context) -> None:\n        parser.add_argument(dest=self.name, nargs=self.nargs, obj=self)\n"
  },
  {
    "path": "libs/click/decorators.py",
    "content": "import inspect\nimport types\nimport typing as t\nfrom functools import update_wrapper\nfrom gettext import gettext as _\n\nfrom .core import Argument\nfrom .core import Command\nfrom .core import Context\nfrom .core import Group\nfrom .core import Option\nfrom .core import Parameter\nfrom .globals import get_current_context\nfrom .utils import echo\n\nif t.TYPE_CHECKING:\n    import typing_extensions as te\n\n    P = te.ParamSpec(\"P\")\n\nR = t.TypeVar(\"R\")\nT = t.TypeVar(\"T\")\n_AnyCallable = t.Callable[..., t.Any]\nFC = t.TypeVar(\"FC\", bound=t.Union[_AnyCallable, Command])\n\n\ndef pass_context(f: \"t.Callable[te.Concatenate[Context, P], R]\") -> \"t.Callable[P, R]\":\n    \"\"\"Marks a callback as wanting to receive the current context\n    object as first argument.\n    \"\"\"\n\n    def new_func(*args: \"P.args\", **kwargs: \"P.kwargs\") -> \"R\":\n        return f(get_current_context(), *args, **kwargs)\n\n    return update_wrapper(new_func, f)\n\n\ndef pass_obj(f: \"t.Callable[te.Concatenate[t.Any, P], R]\") -> \"t.Callable[P, R]\":\n    \"\"\"Similar to :func:`pass_context`, but only pass the object on the\n    context onwards (:attr:`Context.obj`).  This is useful if that object\n    represents the state of a nested system.\n    \"\"\"\n\n    def new_func(*args: \"P.args\", **kwargs: \"P.kwargs\") -> \"R\":\n        return f(get_current_context().obj, *args, **kwargs)\n\n    return update_wrapper(new_func, f)\n\n\ndef make_pass_decorator(\n    object_type: t.Type[T], ensure: bool = False\n) -> t.Callable[[\"t.Callable[te.Concatenate[T, P], R]\"], \"t.Callable[P, R]\"]:\n    \"\"\"Given an object type this creates a decorator that will work\n    similar to :func:`pass_obj` but instead of passing the object of the\n    current context, it will find the innermost context of type\n    :func:`object_type`.\n\n    This generates a decorator that works roughly like this::\n\n        from functools import update_wrapper\n\n        def decorator(f):\n            @pass_context\n            def new_func(ctx, *args, **kwargs):\n                obj = ctx.find_object(object_type)\n                return ctx.invoke(f, obj, *args, **kwargs)\n            return update_wrapper(new_func, f)\n        return decorator\n\n    :param object_type: the type of the object to pass.\n    :param ensure: if set to `True`, a new object will be created and\n                   remembered on the context if it's not there yet.\n    \"\"\"\n\n    def decorator(f: \"t.Callable[te.Concatenate[T, P], R]\") -> \"t.Callable[P, R]\":\n        def new_func(*args: \"P.args\", **kwargs: \"P.kwargs\") -> \"R\":\n            ctx = get_current_context()\n\n            obj: t.Optional[T]\n            if ensure:\n                obj = ctx.ensure_object(object_type)\n            else:\n                obj = ctx.find_object(object_type)\n\n            if obj is None:\n                raise RuntimeError(\n                    \"Managed to invoke callback without a context\"\n                    f\" object of type {object_type.__name__!r}\"\n                    \" existing.\"\n                )\n\n            return ctx.invoke(f, obj, *args, **kwargs)\n\n        return update_wrapper(new_func, f)\n\n    return decorator\n\n\ndef pass_meta_key(\n    key: str, *, doc_description: t.Optional[str] = None\n) -> \"t.Callable[[t.Callable[te.Concatenate[t.Any, P], R]], t.Callable[P, R]]\":\n    \"\"\"Create a decorator that passes a key from\n    :attr:`click.Context.meta` as the first argument to the decorated\n    function.\n\n    :param key: Key in ``Context.meta`` to pass.\n    :param doc_description: Description of the object being passed,\n        inserted into the decorator's docstring. Defaults to \"the 'key'\n        key from Context.meta\".\n\n    .. versionadded:: 8.0\n    \"\"\"\n\n    def decorator(f: \"t.Callable[te.Concatenate[t.Any, P], R]\") -> \"t.Callable[P, R]\":\n        def new_func(*args: \"P.args\", **kwargs: \"P.kwargs\") -> R:\n            ctx = get_current_context()\n            obj = ctx.meta[key]\n            return ctx.invoke(f, obj, *args, **kwargs)\n\n        return update_wrapper(new_func, f)\n\n    if doc_description is None:\n        doc_description = f\"the {key!r} key from :attr:`click.Context.meta`\"\n\n    decorator.__doc__ = (\n        f\"Decorator that passes {doc_description} as the first argument\"\n        \" to the decorated function.\"\n    )\n    return decorator\n\n\nCmdType = t.TypeVar(\"CmdType\", bound=Command)\n\n\n# variant: no call, directly as decorator for a function.\n@t.overload\ndef command(name: _AnyCallable) -> Command: ...\n\n\n# variant: with positional name and with positional or keyword cls argument:\n# @command(namearg, CommandCls, ...) or @command(namearg, cls=CommandCls, ...)\n@t.overload\ndef command(\n    name: t.Optional[str],\n    cls: t.Type[CmdType],\n    **attrs: t.Any,\n) -> t.Callable[[_AnyCallable], CmdType]: ...\n\n\n# variant: name omitted, cls _must_ be a keyword argument, @command(cls=CommandCls, ...)\n@t.overload\ndef command(\n    name: None = None,\n    *,\n    cls: t.Type[CmdType],\n    **attrs: t.Any,\n) -> t.Callable[[_AnyCallable], CmdType]: ...\n\n\n# variant: with optional string name, no cls argument provided.\n@t.overload\ndef command(\n    name: t.Optional[str] = ..., cls: None = None, **attrs: t.Any\n) -> t.Callable[[_AnyCallable], Command]: ...\n\n\ndef command(\n    name: t.Union[t.Optional[str], _AnyCallable] = None,\n    cls: t.Optional[t.Type[CmdType]] = None,\n    **attrs: t.Any,\n) -> t.Union[Command, t.Callable[[_AnyCallable], t.Union[Command, CmdType]]]:\n    r\"\"\"Creates a new :class:`Command` and uses the decorated function as\n    callback.  This will also automatically attach all decorated\n    :func:`option`\\s and :func:`argument`\\s as parameters to the command.\n\n    The name of the command defaults to the name of the function with\n    underscores replaced by dashes.  If you want to change that, you can\n    pass the intended name as the first argument.\n\n    All keyword arguments are forwarded to the underlying command class.\n    For the ``params`` argument, any decorated params are appended to\n    the end of the list.\n\n    Once decorated the function turns into a :class:`Command` instance\n    that can be invoked as a command line utility or be attached to a\n    command :class:`Group`.\n\n    :param name: the name of the command.  This defaults to the function\n                 name with underscores replaced by dashes.\n    :param cls: the command class to instantiate.  This defaults to\n                :class:`Command`.\n\n    .. versionchanged:: 8.1\n        This decorator can be applied without parentheses.\n\n    .. versionchanged:: 8.1\n        The ``params`` argument can be used. Decorated params are\n        appended to the end of the list.\n    \"\"\"\n\n    func: t.Optional[t.Callable[[_AnyCallable], t.Any]] = None\n\n    if callable(name):\n        func = name\n        name = None\n        assert cls is None, \"Use 'command(cls=cls)(callable)' to specify a class.\"\n        assert not attrs, \"Use 'command(**kwargs)(callable)' to provide arguments.\"\n\n    if cls is None:\n        cls = t.cast(t.Type[CmdType], Command)\n\n    def decorator(f: _AnyCallable) -> CmdType:\n        if isinstance(f, Command):\n            raise TypeError(\"Attempted to convert a callback into a command twice.\")\n\n        attr_params = attrs.pop(\"params\", None)\n        params = attr_params if attr_params is not None else []\n\n        try:\n            decorator_params = f.__click_params__  # type: ignore\n        except AttributeError:\n            pass\n        else:\n            del f.__click_params__  # type: ignore\n            params.extend(reversed(decorator_params))\n\n        if attrs.get(\"help\") is None:\n            attrs[\"help\"] = f.__doc__\n\n        if t.TYPE_CHECKING:\n            assert cls is not None\n            assert not callable(name)\n\n        cmd = cls(\n            name=name or f.__name__.lower().replace(\"_\", \"-\"),\n            callback=f,\n            params=params,\n            **attrs,\n        )\n        cmd.__doc__ = f.__doc__\n        return cmd\n\n    if func is not None:\n        return decorator(func)\n\n    return decorator\n\n\nGrpType = t.TypeVar(\"GrpType\", bound=Group)\n\n\n# variant: no call, directly as decorator for a function.\n@t.overload\ndef group(name: _AnyCallable) -> Group: ...\n\n\n# variant: with positional name and with positional or keyword cls argument:\n# @group(namearg, GroupCls, ...) or @group(namearg, cls=GroupCls, ...)\n@t.overload\ndef group(\n    name: t.Optional[str],\n    cls: t.Type[GrpType],\n    **attrs: t.Any,\n) -> t.Callable[[_AnyCallable], GrpType]: ...\n\n\n# variant: name omitted, cls _must_ be a keyword argument, @group(cmd=GroupCls, ...)\n@t.overload\ndef group(\n    name: None = None,\n    *,\n    cls: t.Type[GrpType],\n    **attrs: t.Any,\n) -> t.Callable[[_AnyCallable], GrpType]: ...\n\n\n# variant: with optional string name, no cls argument provided.\n@t.overload\ndef group(\n    name: t.Optional[str] = ..., cls: None = None, **attrs: t.Any\n) -> t.Callable[[_AnyCallable], Group]: ...\n\n\ndef group(\n    name: t.Union[str, _AnyCallable, None] = None,\n    cls: t.Optional[t.Type[GrpType]] = None,\n    **attrs: t.Any,\n) -> t.Union[Group, t.Callable[[_AnyCallable], t.Union[Group, GrpType]]]:\n    \"\"\"Creates a new :class:`Group` with a function as callback.  This\n    works otherwise the same as :func:`command` just that the `cls`\n    parameter is set to :class:`Group`.\n\n    .. versionchanged:: 8.1\n        This decorator can be applied without parentheses.\n    \"\"\"\n    if cls is None:\n        cls = t.cast(t.Type[GrpType], Group)\n\n    if callable(name):\n        return command(cls=cls, **attrs)(name)\n\n    return command(name, cls, **attrs)\n\n\ndef _param_memo(f: t.Callable[..., t.Any], param: Parameter) -> None:\n    if isinstance(f, Command):\n        f.params.append(param)\n    else:\n        if not hasattr(f, \"__click_params__\"):\n            f.__click_params__ = []  # type: ignore\n\n        f.__click_params__.append(param)  # type: ignore\n\n\ndef argument(\n    *param_decls: str, cls: t.Optional[t.Type[Argument]] = None, **attrs: t.Any\n) -> t.Callable[[FC], FC]:\n    \"\"\"Attaches an argument to the command.  All positional arguments are\n    passed as parameter declarations to :class:`Argument`; all keyword\n    arguments are forwarded unchanged (except ``cls``).\n    This is equivalent to creating an :class:`Argument` instance manually\n    and attaching it to the :attr:`Command.params` list.\n\n    For the default argument class, refer to :class:`Argument` and\n    :class:`Parameter` for descriptions of parameters.\n\n    :param cls: the argument class to instantiate.  This defaults to\n                :class:`Argument`.\n    :param param_decls: Passed as positional arguments to the constructor of\n        ``cls``.\n    :param attrs: Passed as keyword arguments to the constructor of ``cls``.\n    \"\"\"\n    if cls is None:\n        cls = Argument\n\n    def decorator(f: FC) -> FC:\n        _param_memo(f, cls(param_decls, **attrs))\n        return f\n\n    return decorator\n\n\ndef option(\n    *param_decls: str, cls: t.Optional[t.Type[Option]] = None, **attrs: t.Any\n) -> t.Callable[[FC], FC]:\n    \"\"\"Attaches an option to the command.  All positional arguments are\n    passed as parameter declarations to :class:`Option`; all keyword\n    arguments are forwarded unchanged (except ``cls``).\n    This is equivalent to creating an :class:`Option` instance manually\n    and attaching it to the :attr:`Command.params` list.\n\n    For the default option class, refer to :class:`Option` and\n    :class:`Parameter` for descriptions of parameters.\n\n    :param cls: the option class to instantiate.  This defaults to\n                :class:`Option`.\n    :param param_decls: Passed as positional arguments to the constructor of\n        ``cls``.\n    :param attrs: Passed as keyword arguments to the constructor of ``cls``.\n    \"\"\"\n    if cls is None:\n        cls = Option\n\n    def decorator(f: FC) -> FC:\n        _param_memo(f, cls(param_decls, **attrs))\n        return f\n\n    return decorator\n\n\ndef confirmation_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]:\n    \"\"\"Add a ``--yes`` option which shows a prompt before continuing if\n    not passed. If the prompt is declined, the program will exit.\n\n    :param param_decls: One or more option names. Defaults to the single\n        value ``\"--yes\"``.\n    :param kwargs: Extra arguments are passed to :func:`option`.\n    \"\"\"\n\n    def callback(ctx: Context, param: Parameter, value: bool) -> None:\n        if not value:\n            ctx.abort()\n\n    if not param_decls:\n        param_decls = (\"--yes\",)\n\n    kwargs.setdefault(\"is_flag\", True)\n    kwargs.setdefault(\"callback\", callback)\n    kwargs.setdefault(\"expose_value\", False)\n    kwargs.setdefault(\"prompt\", \"Do you want to continue?\")\n    kwargs.setdefault(\"help\", \"Confirm the action without prompting.\")\n    return option(*param_decls, **kwargs)\n\n\ndef password_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]:\n    \"\"\"Add a ``--password`` option which prompts for a password, hiding\n    input and asking to enter the value again for confirmation.\n\n    :param param_decls: One or more option names. Defaults to the single\n        value ``\"--password\"``.\n    :param kwargs: Extra arguments are passed to :func:`option`.\n    \"\"\"\n    if not param_decls:\n        param_decls = (\"--password\",)\n\n    kwargs.setdefault(\"prompt\", True)\n    kwargs.setdefault(\"confirmation_prompt\", True)\n    kwargs.setdefault(\"hide_input\", True)\n    return option(*param_decls, **kwargs)\n\n\ndef version_option(\n    version: t.Optional[str] = None,\n    *param_decls: str,\n    package_name: t.Optional[str] = None,\n    prog_name: t.Optional[str] = None,\n    message: t.Optional[str] = None,\n    **kwargs: t.Any,\n) -> t.Callable[[FC], FC]:\n    \"\"\"Add a ``--version`` option which immediately prints the version\n    number and exits the program.\n\n    If ``version`` is not provided, Click will try to detect it using\n    :func:`importlib.metadata.version` to get the version for the\n    ``package_name``. On Python < 3.8, the ``importlib_metadata``\n    backport must be installed.\n\n    If ``package_name`` is not provided, Click will try to detect it by\n    inspecting the stack frames. This will be used to detect the\n    version, so it must match the name of the installed package.\n\n    :param version: The version number to show. If not provided, Click\n        will try to detect it.\n    :param param_decls: One or more option names. Defaults to the single\n        value ``\"--version\"``.\n    :param package_name: The package name to detect the version from. If\n        not provided, Click will try to detect it.\n    :param prog_name: The name of the CLI to show in the message. If not\n        provided, it will be detected from the command.\n    :param message: The message to show. The values ``%(prog)s``,\n        ``%(package)s``, and ``%(version)s`` are available. Defaults to\n        ``\"%(prog)s, version %(version)s\"``.\n    :param kwargs: Extra arguments are passed to :func:`option`.\n    :raise RuntimeError: ``version`` could not be detected.\n\n    .. versionchanged:: 8.0\n        Add the ``package_name`` parameter, and the ``%(package)s``\n        value for messages.\n\n    .. versionchanged:: 8.0\n        Use :mod:`importlib.metadata` instead of ``pkg_resources``. The\n        version is detected based on the package name, not the entry\n        point name. The Python package name must match the installed\n        package name, or be passed with ``package_name=``.\n    \"\"\"\n    if message is None:\n        message = _(\"%(prog)s, version %(version)s\")\n\n    if version is None and package_name is None:\n        frame = inspect.currentframe()\n        f_back = frame.f_back if frame is not None else None\n        f_globals = f_back.f_globals if f_back is not None else None\n        # break reference cycle\n        # https://docs.python.org/3/library/inspect.html#the-interpreter-stack\n        del frame\n\n        if f_globals is not None:\n            package_name = f_globals.get(\"__name__\")\n\n            if package_name == \"__main__\":\n                package_name = f_globals.get(\"__package__\")\n\n            if package_name:\n                package_name = package_name.partition(\".\")[0]\n\n    def callback(ctx: Context, param: Parameter, value: bool) -> None:\n        if not value or ctx.resilient_parsing:\n            return\n\n        nonlocal prog_name\n        nonlocal version\n\n        if prog_name is None:\n            prog_name = ctx.find_root().info_name\n\n        if version is None and package_name is not None:\n            metadata: t.Optional[types.ModuleType]\n\n            try:\n                from importlib import metadata\n            except ImportError:\n                # Python < 3.8\n                import importlib_metadata as metadata  # type: ignore\n\n            try:\n                version = metadata.version(package_name)  # type: ignore\n            except metadata.PackageNotFoundError:  # type: ignore\n                raise RuntimeError(\n                    f\"{package_name!r} is not installed. Try passing\"\n                    \" 'package_name' instead.\"\n                ) from None\n\n        if version is None:\n            raise RuntimeError(\n                f\"Could not determine the version for {package_name!r} automatically.\"\n            )\n\n        echo(\n            message % {\"prog\": prog_name, \"package\": package_name, \"version\": version},\n            color=ctx.color,\n        )\n        ctx.exit()\n\n    if not param_decls:\n        param_decls = (\"--version\",)\n\n    kwargs.setdefault(\"is_flag\", True)\n    kwargs.setdefault(\"expose_value\", False)\n    kwargs.setdefault(\"is_eager\", True)\n    kwargs.setdefault(\"help\", _(\"Show the version and exit.\"))\n    kwargs[\"callback\"] = callback\n    return option(*param_decls, **kwargs)\n\n\nclass HelpOption(Option):\n    \"\"\"Pre-configured ``--help`` option which immediately prints the help page\n    and exits the program.\n    \"\"\"\n\n    def __init__(\n        self,\n        param_decls: t.Optional[t.Sequence[str]] = None,\n        **kwargs: t.Any,\n    ) -> None:\n        if not param_decls:\n            param_decls = (\"--help\",)\n\n        kwargs.setdefault(\"is_flag\", True)\n        kwargs.setdefault(\"expose_value\", False)\n        kwargs.setdefault(\"is_eager\", True)\n        kwargs.setdefault(\"help\", _(\"Show this message and exit.\"))\n        kwargs.setdefault(\"callback\", self.show_help)\n\n        super().__init__(param_decls, **kwargs)\n\n    @staticmethod\n    def show_help(ctx: Context, param: Parameter, value: bool) -> None:\n        \"\"\"Callback that print the help page on ``<stdout>`` and exits.\"\"\"\n        if value and not ctx.resilient_parsing:\n            echo(ctx.get_help(), color=ctx.color)\n            ctx.exit()\n\n\ndef help_option(*param_decls: str, **kwargs: t.Any) -> t.Callable[[FC], FC]:\n    \"\"\"Decorator for the pre-configured ``--help`` option defined above.\n\n    :param param_decls: One or more option names. Defaults to the single\n        value ``\"--help\"``.\n    :param kwargs: Extra arguments are passed to :func:`option`.\n    \"\"\"\n    kwargs.setdefault(\"cls\", HelpOption)\n    return option(*param_decls, **kwargs)\n"
  },
  {
    "path": "libs/click/exceptions.py",
    "content": "import typing as t\nfrom gettext import gettext as _\nfrom gettext import ngettext\n\nfrom ._compat import get_text_stderr\nfrom .globals import resolve_color_default\nfrom .utils import echo\nfrom .utils import format_filename\n\nif t.TYPE_CHECKING:\n    from .core import Command\n    from .core import Context\n    from .core import Parameter\n\n\ndef _join_param_hints(\n    param_hint: t.Optional[t.Union[t.Sequence[str], str]],\n) -> t.Optional[str]:\n    if param_hint is not None and not isinstance(param_hint, str):\n        return \" / \".join(repr(x) for x in param_hint)\n\n    return param_hint\n\n\nclass ClickException(Exception):\n    \"\"\"An exception that Click can handle and show to the user.\"\"\"\n\n    #: The exit code for this exception.\n    exit_code = 1\n\n    def __init__(self, message: str) -> None:\n        super().__init__(message)\n        # The context will be removed by the time we print the message, so cache\n        # the color settings here to be used later on (in `show`)\n        self.show_color: t.Optional[bool] = resolve_color_default()\n        self.message = message\n\n    def format_message(self) -> str:\n        return self.message\n\n    def __str__(self) -> str:\n        return self.message\n\n    def show(self, file: t.Optional[t.IO[t.Any]] = None) -> None:\n        if file is None:\n            file = get_text_stderr()\n\n        echo(\n            _(\"Error: {message}\").format(message=self.format_message()),\n            file=file,\n            color=self.show_color,\n        )\n\n\nclass UsageError(ClickException):\n    \"\"\"An internal exception that signals a usage error.  This typically\n    aborts any further handling.\n\n    :param message: the error message to display.\n    :param ctx: optionally the context that caused this error.  Click will\n                fill in the context automatically in some situations.\n    \"\"\"\n\n    exit_code = 2\n\n    def __init__(self, message: str, ctx: t.Optional[\"Context\"] = None) -> None:\n        super().__init__(message)\n        self.ctx = ctx\n        self.cmd: t.Optional[Command] = self.ctx.command if self.ctx else None\n\n    def show(self, file: t.Optional[t.IO[t.Any]] = None) -> None:\n        if file is None:\n            file = get_text_stderr()\n        color = None\n        hint = \"\"\n        if (\n            self.ctx is not None\n            and self.ctx.command.get_help_option(self.ctx) is not None\n        ):\n            hint = _(\"Try '{command} {option}' for help.\").format(\n                command=self.ctx.command_path, option=self.ctx.help_option_names[0]\n            )\n            hint = f\"{hint}\\n\"\n        if self.ctx is not None:\n            color = self.ctx.color\n            echo(f\"{self.ctx.get_usage()}\\n{hint}\", file=file, color=color)\n        echo(\n            _(\"Error: {message}\").format(message=self.format_message()),\n            file=file,\n            color=color,\n        )\n\n\nclass BadParameter(UsageError):\n    \"\"\"An exception that formats out a standardized error message for a\n    bad parameter.  This is useful when thrown from a callback or type as\n    Click will attach contextual information to it (for instance, which\n    parameter it is).\n\n    .. versionadded:: 2.0\n\n    :param param: the parameter object that caused this error.  This can\n                  be left out, and Click will attach this info itself\n                  if possible.\n    :param param_hint: a string that shows up as parameter name.  This\n                       can be used as alternative to `param` in cases\n                       where custom validation should happen.  If it is\n                       a string it's used as such, if it's a list then\n                       each item is quoted and separated.\n    \"\"\"\n\n    def __init__(\n        self,\n        message: str,\n        ctx: t.Optional[\"Context\"] = None,\n        param: t.Optional[\"Parameter\"] = None,\n        param_hint: t.Optional[str] = None,\n    ) -> None:\n        super().__init__(message, ctx)\n        self.param = param\n        self.param_hint = param_hint\n\n    def format_message(self) -> str:\n        if self.param_hint is not None:\n            param_hint = self.param_hint\n        elif self.param is not None:\n            param_hint = self.param.get_error_hint(self.ctx)  # type: ignore\n        else:\n            return _(\"Invalid value: {message}\").format(message=self.message)\n\n        return _(\"Invalid value for {param_hint}: {message}\").format(\n            param_hint=_join_param_hints(param_hint), message=self.message\n        )\n\n\nclass MissingParameter(BadParameter):\n    \"\"\"Raised if click required an option or argument but it was not\n    provided when invoking the script.\n\n    .. versionadded:: 4.0\n\n    :param param_type: a string that indicates the type of the parameter.\n                       The default is to inherit the parameter type from\n                       the given `param`.  Valid values are ``'parameter'``,\n                       ``'option'`` or ``'argument'``.\n    \"\"\"\n\n    def __init__(\n        self,\n        message: t.Optional[str] = None,\n        ctx: t.Optional[\"Context\"] = None,\n        param: t.Optional[\"Parameter\"] = None,\n        param_hint: t.Optional[str] = None,\n        param_type: t.Optional[str] = None,\n    ) -> None:\n        super().__init__(message or \"\", ctx, param, param_hint)\n        self.param_type = param_type\n\n    def format_message(self) -> str:\n        if self.param_hint is not None:\n            param_hint: t.Optional[str] = self.param_hint\n        elif self.param is not None:\n            param_hint = self.param.get_error_hint(self.ctx)  # type: ignore\n        else:\n            param_hint = None\n\n        param_hint = _join_param_hints(param_hint)\n        param_hint = f\" {param_hint}\" if param_hint else \"\"\n\n        param_type = self.param_type\n        if param_type is None and self.param is not None:\n            param_type = self.param.param_type_name\n\n        msg = self.message\n        if self.param is not None:\n            msg_extra = self.param.type.get_missing_message(self.param)\n            if msg_extra:\n                if msg:\n                    msg += f\". {msg_extra}\"\n                else:\n                    msg = msg_extra\n\n        msg = f\" {msg}\" if msg else \"\"\n\n        # Translate param_type for known types.\n        if param_type == \"argument\":\n            missing = _(\"Missing argument\")\n        elif param_type == \"option\":\n            missing = _(\"Missing option\")\n        elif param_type == \"parameter\":\n            missing = _(\"Missing parameter\")\n        else:\n            missing = _(\"Missing {param_type}\").format(param_type=param_type)\n\n        return f\"{missing}{param_hint}.{msg}\"\n\n    def __str__(self) -> str:\n        if not self.message:\n            param_name = self.param.name if self.param else None\n            return _(\"Missing parameter: {param_name}\").format(param_name=param_name)\n        else:\n            return self.message\n\n\nclass NoSuchOption(UsageError):\n    \"\"\"Raised if click attempted to handle an option that does not\n    exist.\n\n    .. versionadded:: 4.0\n    \"\"\"\n\n    def __init__(\n        self,\n        option_name: str,\n        message: t.Optional[str] = None,\n        possibilities: t.Optional[t.Sequence[str]] = None,\n        ctx: t.Optional[\"Context\"] = None,\n    ) -> None:\n        if message is None:\n            message = _(\"No such option: {name}\").format(name=option_name)\n\n        super().__init__(message, ctx)\n        self.option_name = option_name\n        self.possibilities = possibilities\n\n    def format_message(self) -> str:\n        if not self.possibilities:\n            return self.message\n\n        possibility_str = \", \".join(sorted(self.possibilities))\n        suggest = ngettext(\n            \"Did you mean {possibility}?\",\n            \"(Possible options: {possibilities})\",\n            len(self.possibilities),\n        ).format(possibility=possibility_str, possibilities=possibility_str)\n        return f\"{self.message} {suggest}\"\n\n\nclass BadOptionUsage(UsageError):\n    \"\"\"Raised if an option is generally supplied but the use of the option\n    was incorrect.  This is for instance raised if the number of arguments\n    for an option is not correct.\n\n    .. versionadded:: 4.0\n\n    :param option_name: the name of the option being used incorrectly.\n    \"\"\"\n\n    def __init__(\n        self, option_name: str, message: str, ctx: t.Optional[\"Context\"] = None\n    ) -> None:\n        super().__init__(message, ctx)\n        self.option_name = option_name\n\n\nclass BadArgumentUsage(UsageError):\n    \"\"\"Raised if an argument is generally supplied but the use of the argument\n    was incorrect.  This is for instance raised if the number of values\n    for an argument is not correct.\n\n    .. versionadded:: 6.0\n    \"\"\"\n\n\nclass FileError(ClickException):\n    \"\"\"Raised if a file cannot be opened.\"\"\"\n\n    def __init__(self, filename: str, hint: t.Optional[str] = None) -> None:\n        if hint is None:\n            hint = _(\"unknown error\")\n\n        super().__init__(hint)\n        self.ui_filename: str = format_filename(filename)\n        self.filename = filename\n\n    def format_message(self) -> str:\n        return _(\"Could not open file {filename!r}: {message}\").format(\n            filename=self.ui_filename, message=self.message\n        )\n\n\nclass Abort(RuntimeError):\n    \"\"\"An internal signalling exception that signals Click to abort.\"\"\"\n\n\nclass Exit(RuntimeError):\n    \"\"\"An exception that indicates that the application should exit with some\n    status code.\n\n    :param code: the status code to exit with.\n    \"\"\"\n\n    __slots__ = (\"exit_code\",)\n\n    def __init__(self, code: int = 0) -> None:\n        self.exit_code: int = code\n"
  },
  {
    "path": "libs/click/formatting.py",
    "content": "import typing as t\nfrom contextlib import contextmanager\nfrom gettext import gettext as _\n\nfrom ._compat import term_len\nfrom .parser import split_opt\n\n# Can force a width.  This is used by the test system\nFORCED_WIDTH: t.Optional[int] = None\n\n\ndef measure_table(rows: t.Iterable[t.Tuple[str, str]]) -> t.Tuple[int, ...]:\n    widths: t.Dict[int, int] = {}\n\n    for row in rows:\n        for idx, col in enumerate(row):\n            widths[idx] = max(widths.get(idx, 0), term_len(col))\n\n    return tuple(y for x, y in sorted(widths.items()))\n\n\ndef iter_rows(\n    rows: t.Iterable[t.Tuple[str, str]], col_count: int\n) -> t.Iterator[t.Tuple[str, ...]]:\n    for row in rows:\n        yield row + (\"\",) * (col_count - len(row))\n\n\ndef wrap_text(\n    text: str,\n    width: int = 78,\n    initial_indent: str = \"\",\n    subsequent_indent: str = \"\",\n    preserve_paragraphs: bool = False,\n) -> str:\n    \"\"\"A helper function that intelligently wraps text.  By default, it\n    assumes that it operates on a single paragraph of text but if the\n    `preserve_paragraphs` parameter is provided it will intelligently\n    handle paragraphs (defined by two empty lines).\n\n    If paragraphs are handled, a paragraph can be prefixed with an empty\n    line containing the ``\\\\b`` character (``\\\\x08``) to indicate that\n    no rewrapping should happen in that block.\n\n    :param text: the text that should be rewrapped.\n    :param width: the maximum width for the text.\n    :param initial_indent: the initial indent that should be placed on the\n                           first line as a string.\n    :param subsequent_indent: the indent string that should be placed on\n                              each consecutive line.\n    :param preserve_paragraphs: if this flag is set then the wrapping will\n                                intelligently handle paragraphs.\n    \"\"\"\n    from ._textwrap import TextWrapper\n\n    text = text.expandtabs()\n    wrapper = TextWrapper(\n        width,\n        initial_indent=initial_indent,\n        subsequent_indent=subsequent_indent,\n        replace_whitespace=False,\n    )\n    if not preserve_paragraphs:\n        return wrapper.fill(text)\n\n    p: t.List[t.Tuple[int, bool, str]] = []\n    buf: t.List[str] = []\n    indent = None\n\n    def _flush_par() -> None:\n        if not buf:\n            return\n        if buf[0].strip() == \"\\b\":\n            p.append((indent or 0, True, \"\\n\".join(buf[1:])))\n        else:\n            p.append((indent or 0, False, \" \".join(buf)))\n        del buf[:]\n\n    for line in text.splitlines():\n        if not line:\n            _flush_par()\n            indent = None\n        else:\n            if indent is None:\n                orig_len = term_len(line)\n                line = line.lstrip()\n                indent = orig_len - term_len(line)\n            buf.append(line)\n    _flush_par()\n\n    rv = []\n    for indent, raw, text in p:\n        with wrapper.extra_indent(\" \" * indent):\n            if raw:\n                rv.append(wrapper.indent_only(text))\n            else:\n                rv.append(wrapper.fill(text))\n\n    return \"\\n\\n\".join(rv)\n\n\nclass HelpFormatter:\n    \"\"\"This class helps with formatting text-based help pages.  It's\n    usually just needed for very special internal cases, but it's also\n    exposed so that developers can write their own fancy outputs.\n\n    At present, it always writes into memory.\n\n    :param indent_increment: the additional increment for each level.\n    :param width: the width for the text.  This defaults to the terminal\n                  width clamped to a maximum of 78.\n    \"\"\"\n\n    def __init__(\n        self,\n        indent_increment: int = 2,\n        width: t.Optional[int] = None,\n        max_width: t.Optional[int] = None,\n    ) -> None:\n        import shutil\n\n        self.indent_increment = indent_increment\n        if max_width is None:\n            max_width = 80\n        if width is None:\n            width = FORCED_WIDTH\n            if width is None:\n                width = max(min(shutil.get_terminal_size().columns, max_width) - 2, 50)\n        self.width = width\n        self.current_indent = 0\n        self.buffer: t.List[str] = []\n\n    def write(self, string: str) -> None:\n        \"\"\"Writes a unicode string into the internal buffer.\"\"\"\n        self.buffer.append(string)\n\n    def indent(self) -> None:\n        \"\"\"Increases the indentation.\"\"\"\n        self.current_indent += self.indent_increment\n\n    def dedent(self) -> None:\n        \"\"\"Decreases the indentation.\"\"\"\n        self.current_indent -= self.indent_increment\n\n    def write_usage(\n        self, prog: str, args: str = \"\", prefix: t.Optional[str] = None\n    ) -> None:\n        \"\"\"Writes a usage line into the buffer.\n\n        :param prog: the program name.\n        :param args: whitespace separated list of arguments.\n        :param prefix: The prefix for the first line. Defaults to\n            ``\"Usage: \"``.\n        \"\"\"\n        if prefix is None:\n            prefix = f\"{_('Usage:')} \"\n\n        usage_prefix = f\"{prefix:>{self.current_indent}}{prog} \"\n        text_width = self.width - self.current_indent\n\n        if text_width >= (term_len(usage_prefix) + 20):\n            # The arguments will fit to the right of the prefix.\n            indent = \" \" * term_len(usage_prefix)\n            self.write(\n                wrap_text(\n                    args,\n                    text_width,\n                    initial_indent=usage_prefix,\n                    subsequent_indent=indent,\n                )\n            )\n        else:\n            # The prefix is too long, put the arguments on the next line.\n            self.write(usage_prefix)\n            self.write(\"\\n\")\n            indent = \" \" * (max(self.current_indent, term_len(prefix)) + 4)\n            self.write(\n                wrap_text(\n                    args, text_width, initial_indent=indent, subsequent_indent=indent\n                )\n            )\n\n        self.write(\"\\n\")\n\n    def write_heading(self, heading: str) -> None:\n        \"\"\"Writes a heading into the buffer.\"\"\"\n        self.write(f\"{'':>{self.current_indent}}{heading}:\\n\")\n\n    def write_paragraph(self) -> None:\n        \"\"\"Writes a paragraph into the buffer.\"\"\"\n        if self.buffer:\n            self.write(\"\\n\")\n\n    def write_text(self, text: str) -> None:\n        \"\"\"Writes re-indented text into the buffer.  This rewraps and\n        preserves paragraphs.\n        \"\"\"\n        indent = \" \" * self.current_indent\n        self.write(\n            wrap_text(\n                text,\n                self.width,\n                initial_indent=indent,\n                subsequent_indent=indent,\n                preserve_paragraphs=True,\n            )\n        )\n        self.write(\"\\n\")\n\n    def write_dl(\n        self,\n        rows: t.Sequence[t.Tuple[str, str]],\n        col_max: int = 30,\n        col_spacing: int = 2,\n    ) -> None:\n        \"\"\"Writes a definition list into the buffer.  This is how options\n        and commands are usually formatted.\n\n        :param rows: a list of two item tuples for the terms and values.\n        :param col_max: the maximum width of the first column.\n        :param col_spacing: the number of spaces between the first and\n                            second column.\n        \"\"\"\n        rows = list(rows)\n        widths = measure_table(rows)\n        if len(widths) != 2:\n            raise TypeError(\"Expected two columns for definition list\")\n\n        first_col = min(widths[0], col_max) + col_spacing\n\n        for first, second in iter_rows(rows, len(widths)):\n            self.write(f\"{'':>{self.current_indent}}{first}\")\n            if not second:\n                self.write(\"\\n\")\n                continue\n            if term_len(first) <= first_col - col_spacing:\n                self.write(\" \" * (first_col - term_len(first)))\n            else:\n                self.write(\"\\n\")\n                self.write(\" \" * (first_col + self.current_indent))\n\n            text_width = max(self.width - first_col - 2, 10)\n            wrapped_text = wrap_text(second, text_width, preserve_paragraphs=True)\n            lines = wrapped_text.splitlines()\n\n            if lines:\n                self.write(f\"{lines[0]}\\n\")\n\n                for line in lines[1:]:\n                    self.write(f\"{'':>{first_col + self.current_indent}}{line}\\n\")\n            else:\n                self.write(\"\\n\")\n\n    @contextmanager\n    def section(self, name: str) -> t.Iterator[None]:\n        \"\"\"Helpful context manager that writes a paragraph, a heading,\n        and the indents.\n\n        :param name: the section name that is written as heading.\n        \"\"\"\n        self.write_paragraph()\n        self.write_heading(name)\n        self.indent()\n        try:\n            yield\n        finally:\n            self.dedent()\n\n    @contextmanager\n    def indentation(self) -> t.Iterator[None]:\n        \"\"\"A context manager that increases the indentation.\"\"\"\n        self.indent()\n        try:\n            yield\n        finally:\n            self.dedent()\n\n    def getvalue(self) -> str:\n        \"\"\"Returns the buffer contents.\"\"\"\n        return \"\".join(self.buffer)\n\n\ndef join_options(options: t.Sequence[str]) -> t.Tuple[str, bool]:\n    \"\"\"Given a list of option strings this joins them in the most appropriate\n    way and returns them in the form ``(formatted_string,\n    any_prefix_is_slash)`` where the second item in the tuple is a flag that\n    indicates if any of the option prefixes was a slash.\n    \"\"\"\n    rv = []\n    any_prefix_is_slash = False\n\n    for opt in options:\n        prefix = split_opt(opt)[0]\n\n        if prefix == \"/\":\n            any_prefix_is_slash = True\n\n        rv.append((len(prefix), opt))\n\n    rv.sort(key=lambda x: x[0])\n    return \", \".join(x[1] for x in rv), any_prefix_is_slash\n"
  },
  {
    "path": "libs/click/globals.py",
    "content": "import typing as t\nfrom threading import local\n\nif t.TYPE_CHECKING:\n    import typing_extensions as te\n\n    from .core import Context\n\n_local = local()\n\n\n@t.overload\ndef get_current_context(silent: \"te.Literal[False]\" = False) -> \"Context\": ...\n\n\n@t.overload\ndef get_current_context(silent: bool = ...) -> t.Optional[\"Context\"]: ...\n\n\ndef get_current_context(silent: bool = False) -> t.Optional[\"Context\"]:\n    \"\"\"Returns the current click context.  This can be used as a way to\n    access the current context object from anywhere.  This is a more implicit\n    alternative to the :func:`pass_context` decorator.  This function is\n    primarily useful for helpers such as :func:`echo` which might be\n    interested in changing its behavior based on the current context.\n\n    To push the current context, :meth:`Context.scope` can be used.\n\n    .. versionadded:: 5.0\n\n    :param silent: if set to `True` the return value is `None` if no context\n                   is available.  The default behavior is to raise a\n                   :exc:`RuntimeError`.\n    \"\"\"\n    try:\n        return t.cast(\"Context\", _local.stack[-1])\n    except (AttributeError, IndexError) as e:\n        if not silent:\n            raise RuntimeError(\"There is no active click context.\") from e\n\n    return None\n\n\ndef push_context(ctx: \"Context\") -> None:\n    \"\"\"Pushes a new context to the current stack.\"\"\"\n    _local.__dict__.setdefault(\"stack\", []).append(ctx)\n\n\ndef pop_context() -> None:\n    \"\"\"Removes the top level from the stack.\"\"\"\n    _local.stack.pop()\n\n\ndef resolve_color_default(color: t.Optional[bool] = None) -> t.Optional[bool]:\n    \"\"\"Internal helper to get the default value of the color flag.  If a\n    value is passed it's returned unchanged, otherwise it's looked up from\n    the current context.\n    \"\"\"\n    if color is not None:\n        return color\n\n    ctx = get_current_context(silent=True)\n\n    if ctx is not None:\n        return ctx.color\n\n    return None\n"
  },
  {
    "path": "libs/click/parser.py",
    "content": "\"\"\"\nThis module started out as largely a copy paste from the stdlib's\noptparse module with the features removed that we do not need from\noptparse because we implement them in Click on a higher level (for\ninstance type handling, help formatting and a lot more).\n\nThe plan is to remove more and more from here over time.\n\nThe reason this is a different module and not optparse from the stdlib\nis that there are differences in 2.x and 3.x about the error messages\ngenerated and optparse in the stdlib uses gettext for no good reason\nand might cause us issues.\n\nClick uses parts of optparse written by Gregory P. Ward and maintained\nby the Python Software Foundation. This is limited to code in parser.py.\n\nCopyright 2001-2006 Gregory P. Ward. All rights reserved.\nCopyright 2002-2006 Python Software Foundation. All rights reserved.\n\"\"\"\n\n# This code uses parts of optparse written by Gregory P. Ward and\n# maintained by the Python Software Foundation.\n# Copyright 2001-2006 Gregory P. Ward\n# Copyright 2002-2006 Python Software Foundation\nimport typing as t\nfrom collections import deque\nfrom gettext import gettext as _\nfrom gettext import ngettext\n\nfrom .exceptions import BadArgumentUsage\nfrom .exceptions import BadOptionUsage\nfrom .exceptions import NoSuchOption\nfrom .exceptions import UsageError\n\nif t.TYPE_CHECKING:\n    import typing_extensions as te\n\n    from .core import Argument as CoreArgument\n    from .core import Context\n    from .core import Option as CoreOption\n    from .core import Parameter as CoreParameter\n\nV = t.TypeVar(\"V\")\n\n# Sentinel value that indicates an option was passed as a flag without a\n# value but is not a flag option. Option.consume_value uses this to\n# prompt or use the flag_value.\n_flag_needs_value = object()\n\n\ndef _unpack_args(\n    args: t.Sequence[str], nargs_spec: t.Sequence[int]\n) -> t.Tuple[t.Sequence[t.Union[str, t.Sequence[t.Optional[str]], None]], t.List[str]]:\n    \"\"\"Given an iterable of arguments and an iterable of nargs specifications,\n    it returns a tuple with all the unpacked arguments at the first index\n    and all remaining arguments as the second.\n\n    The nargs specification is the number of arguments that should be consumed\n    or `-1` to indicate that this position should eat up all the remainders.\n\n    Missing items are filled with `None`.\n    \"\"\"\n    args = deque(args)\n    nargs_spec = deque(nargs_spec)\n    rv: t.List[t.Union[str, t.Tuple[t.Optional[str], ...], None]] = []\n    spos: t.Optional[int] = None\n\n    def _fetch(c: \"te.Deque[V]\") -> t.Optional[V]:\n        try:\n            if spos is None:\n                return c.popleft()\n            else:\n                return c.pop()\n        except IndexError:\n            return None\n\n    while nargs_spec:\n        nargs = _fetch(nargs_spec)\n\n        if nargs is None:\n            continue\n\n        if nargs == 1:\n            rv.append(_fetch(args))\n        elif nargs > 1:\n            x = [_fetch(args) for _ in range(nargs)]\n\n            # If we're reversed, we're pulling in the arguments in reverse,\n            # so we need to turn them around.\n            if spos is not None:\n                x.reverse()\n\n            rv.append(tuple(x))\n        elif nargs < 0:\n            if spos is not None:\n                raise TypeError(\"Cannot have two nargs < 0\")\n\n            spos = len(rv)\n            rv.append(None)\n\n    # spos is the position of the wildcard (star).  If it's not `None`,\n    # we fill it with the remainder.\n    if spos is not None:\n        rv[spos] = tuple(args)\n        args = []\n        rv[spos + 1 :] = reversed(rv[spos + 1 :])\n\n    return tuple(rv), list(args)\n\n\ndef split_opt(opt: str) -> t.Tuple[str, str]:\n    first = opt[:1]\n    if first.isalnum():\n        return \"\", opt\n    if opt[1:2] == first:\n        return opt[:2], opt[2:]\n    return first, opt[1:]\n\n\ndef normalize_opt(opt: str, ctx: t.Optional[\"Context\"]) -> str:\n    if ctx is None or ctx.token_normalize_func is None:\n        return opt\n    prefix, opt = split_opt(opt)\n    return f\"{prefix}{ctx.token_normalize_func(opt)}\"\n\n\ndef split_arg_string(string: str) -> t.List[str]:\n    \"\"\"Split an argument string as with :func:`shlex.split`, but don't\n    fail if the string is incomplete. Ignores a missing closing quote or\n    incomplete escape sequence and uses the partial token as-is.\n\n    .. code-block:: python\n\n        split_arg_string(\"example 'my file\")\n        [\"example\", \"my file\"]\n\n        split_arg_string(\"example my\\\\\")\n        [\"example\", \"my\"]\n\n    :param string: String to split.\n    \"\"\"\n    import shlex\n\n    lex = shlex.shlex(string, posix=True)\n    lex.whitespace_split = True\n    lex.commenters = \"\"\n    out = []\n\n    try:\n        for token in lex:\n            out.append(token)\n    except ValueError:\n        # Raised when end-of-string is reached in an invalid state. Use\n        # the partial token as-is. The quote or escape character is in\n        # lex.state, not lex.token.\n        out.append(lex.token)\n\n    return out\n\n\nclass Option:\n    def __init__(\n        self,\n        obj: \"CoreOption\",\n        opts: t.Sequence[str],\n        dest: t.Optional[str],\n        action: t.Optional[str] = None,\n        nargs: int = 1,\n        const: t.Optional[t.Any] = None,\n    ):\n        self._short_opts = []\n        self._long_opts = []\n        self.prefixes: t.Set[str] = set()\n\n        for opt in opts:\n            prefix, value = split_opt(opt)\n            if not prefix:\n                raise ValueError(f\"Invalid start character for option ({opt})\")\n            self.prefixes.add(prefix[0])\n            if len(prefix) == 1 and len(value) == 1:\n                self._short_opts.append(opt)\n            else:\n                self._long_opts.append(opt)\n                self.prefixes.add(prefix)\n\n        if action is None:\n            action = \"store\"\n\n        self.dest = dest\n        self.action = action\n        self.nargs = nargs\n        self.const = const\n        self.obj = obj\n\n    @property\n    def takes_value(self) -> bool:\n        return self.action in (\"store\", \"append\")\n\n    def process(self, value: t.Any, state: \"ParsingState\") -> None:\n        if self.action == \"store\":\n            state.opts[self.dest] = value  # type: ignore\n        elif self.action == \"store_const\":\n            state.opts[self.dest] = self.const  # type: ignore\n        elif self.action == \"append\":\n            state.opts.setdefault(self.dest, []).append(value)  # type: ignore\n        elif self.action == \"append_const\":\n            state.opts.setdefault(self.dest, []).append(self.const)  # type: ignore\n        elif self.action == \"count\":\n            state.opts[self.dest] = state.opts.get(self.dest, 0) + 1  # type: ignore\n        else:\n            raise ValueError(f\"unknown action '{self.action}'\")\n        state.order.append(self.obj)\n\n\nclass Argument:\n    def __init__(self, obj: \"CoreArgument\", dest: t.Optional[str], nargs: int = 1):\n        self.dest = dest\n        self.nargs = nargs\n        self.obj = obj\n\n    def process(\n        self,\n        value: t.Union[t.Optional[str], t.Sequence[t.Optional[str]]],\n        state: \"ParsingState\",\n    ) -> None:\n        if self.nargs > 1:\n            assert value is not None\n            holes = sum(1 for x in value if x is None)\n            if holes == len(value):\n                value = None\n            elif holes != 0:\n                raise BadArgumentUsage(\n                    _(\"Argument {name!r} takes {nargs} values.\").format(\n                        name=self.dest, nargs=self.nargs\n                    )\n                )\n\n        if self.nargs == -1 and self.obj.envvar is not None and value == ():\n            # Replace empty tuple with None so that a value from the\n            # environment may be tried.\n            value = None\n\n        state.opts[self.dest] = value  # type: ignore\n        state.order.append(self.obj)\n\n\nclass ParsingState:\n    def __init__(self, rargs: t.List[str]) -> None:\n        self.opts: t.Dict[str, t.Any] = {}\n        self.largs: t.List[str] = []\n        self.rargs = rargs\n        self.order: t.List[CoreParameter] = []\n\n\nclass OptionParser:\n    \"\"\"The option parser is an internal class that is ultimately used to\n    parse options and arguments.  It's modelled after optparse and brings\n    a similar but vastly simplified API.  It should generally not be used\n    directly as the high level Click classes wrap it for you.\n\n    It's not nearly as extensible as optparse or argparse as it does not\n    implement features that are implemented on a higher level (such as\n    types or defaults).\n\n    :param ctx: optionally the :class:`~click.Context` where this parser\n                should go with.\n    \"\"\"\n\n    def __init__(self, ctx: t.Optional[\"Context\"] = None) -> None:\n        #: The :class:`~click.Context` for this parser.  This might be\n        #: `None` for some advanced use cases.\n        self.ctx = ctx\n        #: This controls how the parser deals with interspersed arguments.\n        #: If this is set to `False`, the parser will stop on the first\n        #: non-option.  Click uses this to implement nested subcommands\n        #: safely.\n        self.allow_interspersed_args: bool = True\n        #: This tells the parser how to deal with unknown options.  By\n        #: default it will error out (which is sensible), but there is a\n        #: second mode where it will ignore it and continue processing\n        #: after shifting all the unknown options into the resulting args.\n        self.ignore_unknown_options: bool = False\n\n        if ctx is not None:\n            self.allow_interspersed_args = ctx.allow_interspersed_args\n            self.ignore_unknown_options = ctx.ignore_unknown_options\n\n        self._short_opt: t.Dict[str, Option] = {}\n        self._long_opt: t.Dict[str, Option] = {}\n        self._opt_prefixes = {\"-\", \"--\"}\n        self._args: t.List[Argument] = []\n\n    def add_option(\n        self,\n        obj: \"CoreOption\",\n        opts: t.Sequence[str],\n        dest: t.Optional[str],\n        action: t.Optional[str] = None,\n        nargs: int = 1,\n        const: t.Optional[t.Any] = None,\n    ) -> None:\n        \"\"\"Adds a new option named `dest` to the parser.  The destination\n        is not inferred (unlike with optparse) and needs to be explicitly\n        provided.  Action can be any of ``store``, ``store_const``,\n        ``append``, ``append_const`` or ``count``.\n\n        The `obj` can be used to identify the option in the order list\n        that is returned from the parser.\n        \"\"\"\n        opts = [normalize_opt(opt, self.ctx) for opt in opts]\n        option = Option(obj, opts, dest, action=action, nargs=nargs, const=const)\n        self._opt_prefixes.update(option.prefixes)\n        for opt in option._short_opts:\n            self._short_opt[opt] = option\n        for opt in option._long_opts:\n            self._long_opt[opt] = option\n\n    def add_argument(\n        self, obj: \"CoreArgument\", dest: t.Optional[str], nargs: int = 1\n    ) -> None:\n        \"\"\"Adds a positional argument named `dest` to the parser.\n\n        The `obj` can be used to identify the option in the order list\n        that is returned from the parser.\n        \"\"\"\n        self._args.append(Argument(obj, dest=dest, nargs=nargs))\n\n    def parse_args(\n        self, args: t.List[str]\n    ) -> t.Tuple[t.Dict[str, t.Any], t.List[str], t.List[\"CoreParameter\"]]:\n        \"\"\"Parses positional arguments and returns ``(values, args, order)``\n        for the parsed options and arguments as well as the leftover\n        arguments if there are any.  The order is a list of objects as they\n        appear on the command line.  If arguments appear multiple times they\n        will be memorized multiple times as well.\n        \"\"\"\n        state = ParsingState(args)\n        try:\n            self._process_args_for_options(state)\n            self._process_args_for_args(state)\n        except UsageError:\n            if self.ctx is None or not self.ctx.resilient_parsing:\n                raise\n        return state.opts, state.largs, state.order\n\n    def _process_args_for_args(self, state: ParsingState) -> None:\n        pargs, args = _unpack_args(\n            state.largs + state.rargs, [x.nargs for x in self._args]\n        )\n\n        for idx, arg in enumerate(self._args):\n            arg.process(pargs[idx], state)\n\n        state.largs = args\n        state.rargs = []\n\n    def _process_args_for_options(self, state: ParsingState) -> None:\n        while state.rargs:\n            arg = state.rargs.pop(0)\n            arglen = len(arg)\n            # Double dashes always handled explicitly regardless of what\n            # prefixes are valid.\n            if arg == \"--\":\n                return\n            elif arg[:1] in self._opt_prefixes and arglen > 1:\n                self._process_opts(arg, state)\n            elif self.allow_interspersed_args:\n                state.largs.append(arg)\n            else:\n                state.rargs.insert(0, arg)\n                return\n\n        # Say this is the original argument list:\n        # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)]\n        #                            ^\n        # (we are about to process arg(i)).\n        #\n        # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of\n        # [arg0, ..., arg(i-1)] (any options and their arguments will have\n        # been removed from largs).\n        #\n        # The while loop will usually consume 1 or more arguments per pass.\n        # If it consumes 1 (eg. arg is an option that takes no arguments),\n        # then after _process_arg() is done the situation is:\n        #\n        #   largs = subset of [arg0, ..., arg(i)]\n        #   rargs = [arg(i+1), ..., arg(N-1)]\n        #\n        # If allow_interspersed_args is false, largs will always be\n        # *empty* -- still a subset of [arg0, ..., arg(i-1)], but\n        # not a very interesting subset!\n\n    def _match_long_opt(\n        self, opt: str, explicit_value: t.Optional[str], state: ParsingState\n    ) -> None:\n        if opt not in self._long_opt:\n            from difflib import get_close_matches\n\n            possibilities = get_close_matches(opt, self._long_opt)\n            raise NoSuchOption(opt, possibilities=possibilities, ctx=self.ctx)\n\n        option = self._long_opt[opt]\n        if option.takes_value:\n            # At this point it's safe to modify rargs by injecting the\n            # explicit value, because no exception is raised in this\n            # branch.  This means that the inserted value will be fully\n            # consumed.\n            if explicit_value is not None:\n                state.rargs.insert(0, explicit_value)\n\n            value = self._get_value_from_state(opt, option, state)\n\n        elif explicit_value is not None:\n            raise BadOptionUsage(\n                opt, _(\"Option {name!r} does not take a value.\").format(name=opt)\n            )\n\n        else:\n            value = None\n\n        option.process(value, state)\n\n    def _match_short_opt(self, arg: str, state: ParsingState) -> None:\n        stop = False\n        i = 1\n        prefix = arg[0]\n        unknown_options = []\n\n        for ch in arg[1:]:\n            opt = normalize_opt(f\"{prefix}{ch}\", self.ctx)\n            option = self._short_opt.get(opt)\n            i += 1\n\n            if not option:\n                if self.ignore_unknown_options:\n                    unknown_options.append(ch)\n                    continue\n                raise NoSuchOption(opt, ctx=self.ctx)\n            if option.takes_value:\n                # Any characters left in arg?  Pretend they're the\n                # next arg, and stop consuming characters of arg.\n                if i < len(arg):\n                    state.rargs.insert(0, arg[i:])\n                    stop = True\n\n                value = self._get_value_from_state(opt, option, state)\n\n            else:\n                value = None\n\n            option.process(value, state)\n\n            if stop:\n                break\n\n        # If we got any unknown options we recombine the string of the\n        # remaining options and re-attach the prefix, then report that\n        # to the state as new larg.  This way there is basic combinatorics\n        # that can be achieved while still ignoring unknown arguments.\n        if self.ignore_unknown_options and unknown_options:\n            state.largs.append(f\"{prefix}{''.join(unknown_options)}\")\n\n    def _get_value_from_state(\n        self, option_name: str, option: Option, state: ParsingState\n    ) -> t.Any:\n        nargs = option.nargs\n\n        if len(state.rargs) < nargs:\n            if option.obj._flag_needs_value:\n                # Option allows omitting the value.\n                value = _flag_needs_value\n            else:\n                raise BadOptionUsage(\n                    option_name,\n                    ngettext(\n                        \"Option {name!r} requires an argument.\",\n                        \"Option {name!r} requires {nargs} arguments.\",\n                        nargs,\n                    ).format(name=option_name, nargs=nargs),\n                )\n        elif nargs == 1:\n            next_rarg = state.rargs[0]\n\n            if (\n                option.obj._flag_needs_value\n                and isinstance(next_rarg, str)\n                and next_rarg[:1] in self._opt_prefixes\n                and len(next_rarg) > 1\n            ):\n                # The next arg looks like the start of an option, don't\n                # use it as the value if omitting the value is allowed.\n                value = _flag_needs_value\n            else:\n                value = state.rargs.pop(0)\n        else:\n            value = tuple(state.rargs[:nargs])\n            del state.rargs[:nargs]\n\n        return value\n\n    def _process_opts(self, arg: str, state: ParsingState) -> None:\n        explicit_value = None\n        # Long option handling happens in two parts.  The first part is\n        # supporting explicitly attached values.  In any case, we will try\n        # to long match the option first.\n        if \"=\" in arg:\n            long_opt, explicit_value = arg.split(\"=\", 1)\n        else:\n            long_opt = arg\n        norm_long_opt = normalize_opt(long_opt, self.ctx)\n\n        # At this point we will match the (assumed) long option through\n        # the long option matching code.  Note that this allows options\n        # like \"-foo\" to be matched as long options.\n        try:\n            self._match_long_opt(norm_long_opt, explicit_value, state)\n        except NoSuchOption:\n            # At this point the long option matching failed, and we need\n            # to try with short options.  However there is a special rule\n            # which says, that if we have a two character options prefix\n            # (applies to \"--foo\" for instance), we do not dispatch to the\n            # short option code and will instead raise the no option\n            # error.\n            if arg[:2] not in self._opt_prefixes:\n                self._match_short_opt(arg, state)\n                return\n\n            if not self.ignore_unknown_options:\n                raise\n\n            state.largs.append(arg)\n"
  },
  {
    "path": "libs/click/py.typed",
    "content": ""
  },
  {
    "path": "libs/click/shell_completion.py",
    "content": "import os\nimport re\nimport typing as t\nfrom gettext import gettext as _\n\nfrom .core import Argument\nfrom .core import BaseCommand\nfrom .core import Context\nfrom .core import MultiCommand\nfrom .core import Option\nfrom .core import Parameter\nfrom .core import ParameterSource\nfrom .parser import split_arg_string\nfrom .utils import echo\n\n\ndef shell_complete(\n    cli: BaseCommand,\n    ctx_args: t.MutableMapping[str, t.Any],\n    prog_name: str,\n    complete_var: str,\n    instruction: str,\n) -> int:\n    \"\"\"Perform shell completion for the given CLI program.\n\n    :param cli: Command being called.\n    :param ctx_args: Extra arguments to pass to\n        ``cli.make_context``.\n    :param prog_name: Name of the executable in the shell.\n    :param complete_var: Name of the environment variable that holds\n        the completion instruction.\n    :param instruction: Value of ``complete_var`` with the completion\n        instruction and shell, in the form ``instruction_shell``.\n    :return: Status code to exit with.\n    \"\"\"\n    shell, _, instruction = instruction.partition(\"_\")\n    comp_cls = get_completion_class(shell)\n\n    if comp_cls is None:\n        return 1\n\n    comp = comp_cls(cli, ctx_args, prog_name, complete_var)\n\n    if instruction == \"source\":\n        echo(comp.source())\n        return 0\n\n    if instruction == \"complete\":\n        echo(comp.complete())\n        return 0\n\n    return 1\n\n\nclass CompletionItem:\n    \"\"\"Represents a completion value and metadata about the value. The\n    default metadata is ``type`` to indicate special shell handling,\n    and ``help`` if a shell supports showing a help string next to the\n    value.\n\n    Arbitrary parameters can be passed when creating the object, and\n    accessed using ``item.attr``. If an attribute wasn't passed,\n    accessing it returns ``None``.\n\n    :param value: The completion suggestion.\n    :param type: Tells the shell script to provide special completion\n        support for the type. Click uses ``\"dir\"`` and ``\"file\"``.\n    :param help: String shown next to the value if supported.\n    :param kwargs: Arbitrary metadata. The built-in implementations\n        don't use this, but custom type completions paired with custom\n        shell support could use it.\n    \"\"\"\n\n    __slots__ = (\"value\", \"type\", \"help\", \"_info\")\n\n    def __init__(\n        self,\n        value: t.Any,\n        type: str = \"plain\",\n        help: t.Optional[str] = None,\n        **kwargs: t.Any,\n    ) -> None:\n        self.value: t.Any = value\n        self.type: str = type\n        self.help: t.Optional[str] = help\n        self._info = kwargs\n\n    def __getattr__(self, name: str) -> t.Any:\n        return self._info.get(name)\n\n\n# Only Bash >= 4.4 has the nosort option.\n_SOURCE_BASH = \"\"\"\\\n%(complete_func)s() {\n    local IFS=$'\\\\n'\n    local response\n\n    response=$(env COMP_WORDS=\"${COMP_WORDS[*]}\" COMP_CWORD=$COMP_CWORD \\\n%(complete_var)s=bash_complete $1)\n\n    for completion in $response; do\n        IFS=',' read type value <<< \"$completion\"\n\n        if [[ $type == 'dir' ]]; then\n            COMPREPLY=()\n            compopt -o dirnames\n        elif [[ $type == 'file' ]]; then\n            COMPREPLY=()\n            compopt -o default\n        elif [[ $type == 'plain' ]]; then\n            COMPREPLY+=($value)\n        fi\n    done\n\n    return 0\n}\n\n%(complete_func)s_setup() {\n    complete -o nosort -F %(complete_func)s %(prog_name)s\n}\n\n%(complete_func)s_setup;\n\"\"\"\n\n_SOURCE_ZSH = \"\"\"\\\n#compdef %(prog_name)s\n\n%(complete_func)s() {\n    local -a completions\n    local -a completions_with_descriptions\n    local -a response\n    (( ! $+commands[%(prog_name)s] )) && return 1\n\n    response=(\"${(@f)$(env COMP_WORDS=\"${words[*]}\" COMP_CWORD=$((CURRENT-1)) \\\n%(complete_var)s=zsh_complete %(prog_name)s)}\")\n\n    for type key descr in ${response}; do\n        if [[ \"$type\" == \"plain\" ]]; then\n            if [[ \"$descr\" == \"_\" ]]; then\n                completions+=(\"$key\")\n            else\n                completions_with_descriptions+=(\"$key\":\"$descr\")\n            fi\n        elif [[ \"$type\" == \"dir\" ]]; then\n            _path_files -/\n        elif [[ \"$type\" == \"file\" ]]; then\n            _path_files -f\n        fi\n    done\n\n    if [ -n \"$completions_with_descriptions\" ]; then\n        _describe -V unsorted completions_with_descriptions -U\n    fi\n\n    if [ -n \"$completions\" ]; then\n        compadd -U -V unsorted -a completions\n    fi\n}\n\nif [[ $zsh_eval_context[-1] == loadautofunc ]]; then\n    # autoload from fpath, call function directly\n    %(complete_func)s \"$@\"\nelse\n    # eval/source/. command, register function for later\n    compdef %(complete_func)s %(prog_name)s\nfi\n\"\"\"\n\n_SOURCE_FISH = \"\"\"\\\nfunction %(complete_func)s;\n    set -l response (env %(complete_var)s=fish_complete COMP_WORDS=(commandline -cp) \\\nCOMP_CWORD=(commandline -t) %(prog_name)s);\n\n    for completion in $response;\n        set -l metadata (string split \",\" $completion);\n\n        if test $metadata[1] = \"dir\";\n            __fish_complete_directories $metadata[2];\n        else if test $metadata[1] = \"file\";\n            __fish_complete_path $metadata[2];\n        else if test $metadata[1] = \"plain\";\n            echo $metadata[2];\n        end;\n    end;\nend;\n\ncomplete --no-files --command %(prog_name)s --arguments \\\n\"(%(complete_func)s)\";\n\"\"\"\n\n\nclass ShellComplete:\n    \"\"\"Base class for providing shell completion support. A subclass for\n    a given shell will override attributes and methods to implement the\n    completion instructions (``source`` and ``complete``).\n\n    :param cli: Command being called.\n    :param prog_name: Name of the executable in the shell.\n    :param complete_var: Name of the environment variable that holds\n        the completion instruction.\n\n    .. versionadded:: 8.0\n    \"\"\"\n\n    name: t.ClassVar[str]\n    \"\"\"Name to register the shell as with :func:`add_completion_class`.\n    This is used in completion instructions (``{name}_source`` and\n    ``{name}_complete``).\n    \"\"\"\n\n    source_template: t.ClassVar[str]\n    \"\"\"Completion script template formatted by :meth:`source`. This must\n    be provided by subclasses.\n    \"\"\"\n\n    def __init__(\n        self,\n        cli: BaseCommand,\n        ctx_args: t.MutableMapping[str, t.Any],\n        prog_name: str,\n        complete_var: str,\n    ) -> None:\n        self.cli = cli\n        self.ctx_args = ctx_args\n        self.prog_name = prog_name\n        self.complete_var = complete_var\n\n    @property\n    def func_name(self) -> str:\n        \"\"\"The name of the shell function defined by the completion\n        script.\n        \"\"\"\n        safe_name = re.sub(r\"\\W*\", \"\", self.prog_name.replace(\"-\", \"_\"), flags=re.ASCII)\n        return f\"_{safe_name}_completion\"\n\n    def source_vars(self) -> t.Dict[str, t.Any]:\n        \"\"\"Vars for formatting :attr:`source_template`.\n\n        By default this provides ``complete_func``, ``complete_var``,\n        and ``prog_name``.\n        \"\"\"\n        return {\n            \"complete_func\": self.func_name,\n            \"complete_var\": self.complete_var,\n            \"prog_name\": self.prog_name,\n        }\n\n    def source(self) -> str:\n        \"\"\"Produce the shell script that defines the completion\n        function. By default this ``%``-style formats\n        :attr:`source_template` with the dict returned by\n        :meth:`source_vars`.\n        \"\"\"\n        return self.source_template % self.source_vars()\n\n    def get_completion_args(self) -> t.Tuple[t.List[str], str]:\n        \"\"\"Use the env vars defined by the shell script to return a\n        tuple of ``args, incomplete``. This must be implemented by\n        subclasses.\n        \"\"\"\n        raise NotImplementedError\n\n    def get_completions(\n        self, args: t.List[str], incomplete: str\n    ) -> t.List[CompletionItem]:\n        \"\"\"Determine the context and last complete command or parameter\n        from the complete args. Call that object's ``shell_complete``\n        method to get the completions for the incomplete value.\n\n        :param args: List of complete args before the incomplete value.\n        :param incomplete: Value being completed. May be empty.\n        \"\"\"\n        ctx = _resolve_context(self.cli, self.ctx_args, self.prog_name, args)\n        obj, incomplete = _resolve_incomplete(ctx, args, incomplete)\n        return obj.shell_complete(ctx, incomplete)\n\n    def format_completion(self, item: CompletionItem) -> str:\n        \"\"\"Format a completion item into the form recognized by the\n        shell script. This must be implemented by subclasses.\n\n        :param item: Completion item to format.\n        \"\"\"\n        raise NotImplementedError\n\n    def complete(self) -> str:\n        \"\"\"Produce the completion data to send back to the shell.\n\n        By default this calls :meth:`get_completion_args`, gets the\n        completions, then calls :meth:`format_completion` for each\n        completion.\n        \"\"\"\n        args, incomplete = self.get_completion_args()\n        completions = self.get_completions(args, incomplete)\n        out = [self.format_completion(item) for item in completions]\n        return \"\\n\".join(out)\n\n\nclass BashComplete(ShellComplete):\n    \"\"\"Shell completion for Bash.\"\"\"\n\n    name = \"bash\"\n    source_template = _SOURCE_BASH\n\n    @staticmethod\n    def _check_version() -> None:\n        import shutil\n        import subprocess\n\n        bash_exe = shutil.which(\"bash\")\n\n        if bash_exe is None:\n            match = None\n        else:\n            output = subprocess.run(\n                [bash_exe, \"--norc\", \"-c\", 'echo \"${BASH_VERSION}\"'],\n                stdout=subprocess.PIPE,\n            )\n            match = re.search(r\"^(\\d+)\\.(\\d+)\\.\\d+\", output.stdout.decode())\n\n        if match is not None:\n            major, minor = match.groups()\n\n            if major < \"4\" or major == \"4\" and minor < \"4\":\n                echo(\n                    _(\n                        \"Shell completion is not supported for Bash\"\n                        \" versions older than 4.4.\"\n                    ),\n                    err=True,\n                )\n        else:\n            echo(\n                _(\"Couldn't detect Bash version, shell completion is not supported.\"),\n                err=True,\n            )\n\n    def source(self) -> str:\n        self._check_version()\n        return super().source()\n\n    def get_completion_args(self) -> t.Tuple[t.List[str], str]:\n        cwords = split_arg_string(os.environ[\"COMP_WORDS\"])\n        cword = int(os.environ[\"COMP_CWORD\"])\n        args = cwords[1:cword]\n\n        try:\n            incomplete = cwords[cword]\n        except IndexError:\n            incomplete = \"\"\n\n        return args, incomplete\n\n    def format_completion(self, item: CompletionItem) -> str:\n        return f\"{item.type},{item.value}\"\n\n\nclass ZshComplete(ShellComplete):\n    \"\"\"Shell completion for Zsh.\"\"\"\n\n    name = \"zsh\"\n    source_template = _SOURCE_ZSH\n\n    def get_completion_args(self) -> t.Tuple[t.List[str], str]:\n        cwords = split_arg_string(os.environ[\"COMP_WORDS\"])\n        cword = int(os.environ[\"COMP_CWORD\"])\n        args = cwords[1:cword]\n\n        try:\n            incomplete = cwords[cword]\n        except IndexError:\n            incomplete = \"\"\n\n        return args, incomplete\n\n    def format_completion(self, item: CompletionItem) -> str:\n        return f\"{item.type}\\n{item.value}\\n{item.help if item.help else '_'}\"\n\n\nclass FishComplete(ShellComplete):\n    \"\"\"Shell completion for Fish.\"\"\"\n\n    name = \"fish\"\n    source_template = _SOURCE_FISH\n\n    def get_completion_args(self) -> t.Tuple[t.List[str], str]:\n        cwords = split_arg_string(os.environ[\"COMP_WORDS\"])\n        incomplete = os.environ[\"COMP_CWORD\"]\n        args = cwords[1:]\n\n        # Fish stores the partial word in both COMP_WORDS and\n        # COMP_CWORD, remove it from complete args.\n        if incomplete and args and args[-1] == incomplete:\n            args.pop()\n\n        return args, incomplete\n\n    def format_completion(self, item: CompletionItem) -> str:\n        if item.help:\n            return f\"{item.type},{item.value}\\t{item.help}\"\n\n        return f\"{item.type},{item.value}\"\n\n\nShellCompleteType = t.TypeVar(\"ShellCompleteType\", bound=t.Type[ShellComplete])\n\n\n_available_shells: t.Dict[str, t.Type[ShellComplete]] = {\n    \"bash\": BashComplete,\n    \"fish\": FishComplete,\n    \"zsh\": ZshComplete,\n}\n\n\ndef add_completion_class(\n    cls: ShellCompleteType, name: t.Optional[str] = None\n) -> ShellCompleteType:\n    \"\"\"Register a :class:`ShellComplete` subclass under the given name.\n    The name will be provided by the completion instruction environment\n    variable during completion.\n\n    :param cls: The completion class that will handle completion for the\n        shell.\n    :param name: Name to register the class under. Defaults to the\n        class's ``name`` attribute.\n    \"\"\"\n    if name is None:\n        name = cls.name\n\n    _available_shells[name] = cls\n\n    return cls\n\n\ndef get_completion_class(shell: str) -> t.Optional[t.Type[ShellComplete]]:\n    \"\"\"Look up a registered :class:`ShellComplete` subclass by the name\n    provided by the completion instruction environment variable. If the\n    name isn't registered, returns ``None``.\n\n    :param shell: Name the class is registered under.\n    \"\"\"\n    return _available_shells.get(shell)\n\n\ndef _is_incomplete_argument(ctx: Context, param: Parameter) -> bool:\n    \"\"\"Determine if the given parameter is an argument that can still\n    accept values.\n\n    :param ctx: Invocation context for the command represented by the\n        parsed complete args.\n    :param param: Argument object being checked.\n    \"\"\"\n    if not isinstance(param, Argument):\n        return False\n\n    assert param.name is not None\n    # Will be None if expose_value is False.\n    value = ctx.params.get(param.name)\n    return (\n        param.nargs == -1\n        or ctx.get_parameter_source(param.name) is not ParameterSource.COMMANDLINE\n        or (\n            param.nargs > 1\n            and isinstance(value, (tuple, list))\n            and len(value) < param.nargs\n        )\n    )\n\n\ndef _start_of_option(ctx: Context, value: str) -> bool:\n    \"\"\"Check if the value looks like the start of an option.\"\"\"\n    if not value:\n        return False\n\n    c = value[0]\n    return c in ctx._opt_prefixes\n\n\ndef _is_incomplete_option(ctx: Context, args: t.List[str], param: Parameter) -> bool:\n    \"\"\"Determine if the given parameter is an option that needs a value.\n\n    :param args: List of complete args before the incomplete value.\n    :param param: Option object being checked.\n    \"\"\"\n    if not isinstance(param, Option):\n        return False\n\n    if param.is_flag or param.count:\n        return False\n\n    last_option = None\n\n    for index, arg in enumerate(reversed(args)):\n        if index + 1 > param.nargs:\n            break\n\n        if _start_of_option(ctx, arg):\n            last_option = arg\n\n    return last_option is not None and last_option in param.opts\n\n\ndef _resolve_context(\n    cli: BaseCommand,\n    ctx_args: t.MutableMapping[str, t.Any],\n    prog_name: str,\n    args: t.List[str],\n) -> Context:\n    \"\"\"Produce the context hierarchy starting with the command and\n    traversing the complete arguments. This only follows the commands,\n    it doesn't trigger input prompts or callbacks.\n\n    :param cli: Command being called.\n    :param prog_name: Name of the executable in the shell.\n    :param args: List of complete args before the incomplete value.\n    \"\"\"\n    ctx_args[\"resilient_parsing\"] = True\n    ctx = cli.make_context(prog_name, args.copy(), **ctx_args)\n    args = ctx.protected_args + ctx.args\n\n    while args:\n        command = ctx.command\n\n        if isinstance(command, MultiCommand):\n            if not command.chain:\n                name, cmd, args = command.resolve_command(ctx, args)\n\n                if cmd is None:\n                    return ctx\n\n                ctx = cmd.make_context(name, args, parent=ctx, resilient_parsing=True)\n                args = ctx.protected_args + ctx.args\n            else:\n                sub_ctx = ctx\n\n                while args:\n                    name, cmd, args = command.resolve_command(ctx, args)\n\n                    if cmd is None:\n                        return ctx\n\n                    sub_ctx = cmd.make_context(\n                        name,\n                        args,\n                        parent=ctx,\n                        allow_extra_args=True,\n                        allow_interspersed_args=False,\n                        resilient_parsing=True,\n                    )\n                    args = sub_ctx.args\n\n                ctx = sub_ctx\n                args = [*sub_ctx.protected_args, *sub_ctx.args]\n        else:\n            break\n\n    return ctx\n\n\ndef _resolve_incomplete(\n    ctx: Context, args: t.List[str], incomplete: str\n) -> t.Tuple[t.Union[BaseCommand, Parameter], str]:\n    \"\"\"Find the Click object that will handle the completion of the\n    incomplete value. Return the object and the incomplete value.\n\n    :param ctx: Invocation context for the command represented by\n        the parsed complete args.\n    :param args: List of complete args before the incomplete value.\n    :param incomplete: Value being completed. May be empty.\n    \"\"\"\n    # Different shells treat an \"=\" between a long option name and\n    # value differently. Might keep the value joined, return the \"=\"\n    # as a separate item, or return the split name and value. Always\n    # split and discard the \"=\" to make completion easier.\n    if incomplete == \"=\":\n        incomplete = \"\"\n    elif \"=\" in incomplete and _start_of_option(ctx, incomplete):\n        name, _, incomplete = incomplete.partition(\"=\")\n        args.append(name)\n\n    # The \"--\" marker tells Click to stop treating values as options\n    # even if they start with the option character. If it hasn't been\n    # given and the incomplete arg looks like an option, the current\n    # command will provide option name completions.\n    if \"--\" not in args and _start_of_option(ctx, incomplete):\n        return ctx.command, incomplete\n\n    params = ctx.command.get_params(ctx)\n\n    # If the last complete arg is an option name with an incomplete\n    # value, the option will provide value completions.\n    for param in params:\n        if _is_incomplete_option(ctx, args, param):\n            return param, incomplete\n\n    # It's not an option name or value. The first argument without a\n    # parsed value will provide value completions.\n    for param in params:\n        if _is_incomplete_argument(ctx, param):\n            return param, incomplete\n\n    # There were no unparsed arguments, the command may be a group that\n    # will provide command name completions.\n    return ctx.command, incomplete\n"
  },
  {
    "path": "libs/click/termui.py",
    "content": "import inspect\nimport io\nimport itertools\nimport sys\nimport typing as t\nfrom gettext import gettext as _\n\nfrom ._compat import isatty\nfrom ._compat import strip_ansi\nfrom .exceptions import Abort\nfrom .exceptions import UsageError\nfrom .globals import resolve_color_default\nfrom .types import Choice\nfrom .types import convert_type\nfrom .types import ParamType\nfrom .utils import echo\nfrom .utils import LazyFile\n\nif t.TYPE_CHECKING:\n    from ._termui_impl import ProgressBar\n\nV = t.TypeVar(\"V\")\n\n# The prompt functions to use.  The doc tools currently override these\n# functions to customize how they work.\nvisible_prompt_func: t.Callable[[str], str] = input\n\n_ansi_colors = {\n    \"black\": 30,\n    \"red\": 31,\n    \"green\": 32,\n    \"yellow\": 33,\n    \"blue\": 34,\n    \"magenta\": 35,\n    \"cyan\": 36,\n    \"white\": 37,\n    \"reset\": 39,\n    \"bright_black\": 90,\n    \"bright_red\": 91,\n    \"bright_green\": 92,\n    \"bright_yellow\": 93,\n    \"bright_blue\": 94,\n    \"bright_magenta\": 95,\n    \"bright_cyan\": 96,\n    \"bright_white\": 97,\n}\n_ansi_reset_all = \"\\033[0m\"\n\n\ndef hidden_prompt_func(prompt: str) -> str:\n    import getpass\n\n    return getpass.getpass(prompt)\n\n\ndef _build_prompt(\n    text: str,\n    suffix: str,\n    show_default: bool = False,\n    default: t.Optional[t.Any] = None,\n    show_choices: bool = True,\n    type: t.Optional[ParamType] = None,\n) -> str:\n    prompt = text\n    if type is not None and show_choices and isinstance(type, Choice):\n        prompt += f\" ({', '.join(map(str, type.choices))})\"\n    if default is not None and show_default:\n        prompt = f\"{prompt} [{_format_default(default)}]\"\n    return f\"{prompt}{suffix}\"\n\n\ndef _format_default(default: t.Any) -> t.Any:\n    if isinstance(default, (io.IOBase, LazyFile)) and hasattr(default, \"name\"):\n        return default.name\n\n    return default\n\n\ndef prompt(\n    text: str,\n    default: t.Optional[t.Any] = None,\n    hide_input: bool = False,\n    confirmation_prompt: t.Union[bool, str] = False,\n    type: t.Optional[t.Union[ParamType, t.Any]] = None,\n    value_proc: t.Optional[t.Callable[[str], t.Any]] = None,\n    prompt_suffix: str = \": \",\n    show_default: bool = True,\n    err: bool = False,\n    show_choices: bool = True,\n) -> t.Any:\n    \"\"\"Prompts a user for input.  This is a convenience function that can\n    be used to prompt a user for input later.\n\n    If the user aborts the input by sending an interrupt signal, this\n    function will catch it and raise a :exc:`Abort` exception.\n\n    :param text: the text to show for the prompt.\n    :param default: the default value to use if no input happens.  If this\n                    is not given it will prompt until it's aborted.\n    :param hide_input: if this is set to true then the input value will\n                       be hidden.\n    :param confirmation_prompt: Prompt a second time to confirm the\n        value. Can be set to a string instead of ``True`` to customize\n        the message.\n    :param type: the type to use to check the value against.\n    :param value_proc: if this parameter is provided it's a function that\n                       is invoked instead of the type conversion to\n                       convert a value.\n    :param prompt_suffix: a suffix that should be added to the prompt.\n    :param show_default: shows or hides the default value in the prompt.\n    :param err: if set to true the file defaults to ``stderr`` instead of\n                ``stdout``, the same as with echo.\n    :param show_choices: Show or hide choices if the passed type is a Choice.\n                         For example if type is a Choice of either day or week,\n                         show_choices is true and text is \"Group by\" then the\n                         prompt will be \"Group by (day, week): \".\n\n    .. versionadded:: 8.0\n        ``confirmation_prompt`` can be a custom string.\n\n    .. versionadded:: 7.0\n        Added the ``show_choices`` parameter.\n\n    .. versionadded:: 6.0\n        Added unicode support for cmd.exe on Windows.\n\n    .. versionadded:: 4.0\n        Added the `err` parameter.\n\n    \"\"\"\n\n    def prompt_func(text: str) -> str:\n        f = hidden_prompt_func if hide_input else visible_prompt_func\n        try:\n            # Write the prompt separately so that we get nice\n            # coloring through colorama on Windows\n            echo(text.rstrip(\" \"), nl=False, err=err)\n            # Echo a space to stdout to work around an issue where\n            # readline causes backspace to clear the whole line.\n            return f(\" \")\n        except (KeyboardInterrupt, EOFError):\n            # getpass doesn't print a newline if the user aborts input with ^C.\n            # Allegedly this behavior is inherited from getpass(3).\n            # A doc bug has been filed at https://bugs.python.org/issue24711\n            if hide_input:\n                echo(None, err=err)\n            raise Abort() from None\n\n    if value_proc is None:\n        value_proc = convert_type(type, default)\n\n    prompt = _build_prompt(\n        text, prompt_suffix, show_default, default, show_choices, type\n    )\n\n    if confirmation_prompt:\n        if confirmation_prompt is True:\n            confirmation_prompt = _(\"Repeat for confirmation\")\n\n        confirmation_prompt = _build_prompt(confirmation_prompt, prompt_suffix)\n\n    while True:\n        while True:\n            value = prompt_func(prompt)\n            if value:\n                break\n            elif default is not None:\n                value = default\n                break\n        try:\n            result = value_proc(value)\n        except UsageError as e:\n            if hide_input:\n                echo(_(\"Error: The value you entered was invalid.\"), err=err)\n            else:\n                echo(_(\"Error: {e.message}\").format(e=e), err=err)\n            continue\n        if not confirmation_prompt:\n            return result\n        while True:\n            value2 = prompt_func(confirmation_prompt)\n            is_empty = not value and not value2\n            if value2 or is_empty:\n                break\n        if value == value2:\n            return result\n        echo(_(\"Error: The two entered values do not match.\"), err=err)\n\n\ndef confirm(\n    text: str,\n    default: t.Optional[bool] = False,\n    abort: bool = False,\n    prompt_suffix: str = \": \",\n    show_default: bool = True,\n    err: bool = False,\n) -> bool:\n    \"\"\"Prompts for confirmation (yes/no question).\n\n    If the user aborts the input by sending a interrupt signal this\n    function will catch it and raise a :exc:`Abort` exception.\n\n    :param text: the question to ask.\n    :param default: The default value to use when no input is given. If\n        ``None``, repeat until input is given.\n    :param abort: if this is set to `True` a negative answer aborts the\n                  exception by raising :exc:`Abort`.\n    :param prompt_suffix: a suffix that should be added to the prompt.\n    :param show_default: shows or hides the default value in the prompt.\n    :param err: if set to true the file defaults to ``stderr`` instead of\n                ``stdout``, the same as with echo.\n\n    .. versionchanged:: 8.0\n        Repeat until input is given if ``default`` is ``None``.\n\n    .. versionadded:: 4.0\n        Added the ``err`` parameter.\n    \"\"\"\n    prompt = _build_prompt(\n        text,\n        prompt_suffix,\n        show_default,\n        \"y/n\" if default is None else (\"Y/n\" if default else \"y/N\"),\n    )\n\n    while True:\n        try:\n            # Write the prompt separately so that we get nice\n            # coloring through colorama on Windows\n            echo(prompt.rstrip(\" \"), nl=False, err=err)\n            # Echo a space to stdout to work around an issue where\n            # readline causes backspace to clear the whole line.\n            value = visible_prompt_func(\" \").lower().strip()\n        except (KeyboardInterrupt, EOFError):\n            raise Abort() from None\n        if value in (\"y\", \"yes\"):\n            rv = True\n        elif value in (\"n\", \"no\"):\n            rv = False\n        elif default is not None and value == \"\":\n            rv = default\n        else:\n            echo(_(\"Error: invalid input\"), err=err)\n            continue\n        break\n    if abort and not rv:\n        raise Abort()\n    return rv\n\n\ndef echo_via_pager(\n    text_or_generator: t.Union[t.Iterable[str], t.Callable[[], t.Iterable[str]], str],\n    color: t.Optional[bool] = None,\n) -> None:\n    \"\"\"This function takes a text and shows it via an environment specific\n    pager on stdout.\n\n    .. versionchanged:: 3.0\n       Added the `color` flag.\n\n    :param text_or_generator: the text to page, or alternatively, a\n                              generator emitting the text to page.\n    :param color: controls if the pager supports ANSI colors or not.  The\n                  default is autodetection.\n    \"\"\"\n    color = resolve_color_default(color)\n\n    if inspect.isgeneratorfunction(text_or_generator):\n        i = t.cast(t.Callable[[], t.Iterable[str]], text_or_generator)()\n    elif isinstance(text_or_generator, str):\n        i = [text_or_generator]\n    else:\n        i = iter(t.cast(t.Iterable[str], text_or_generator))\n\n    # convert every element of i to a text type if necessary\n    text_generator = (el if isinstance(el, str) else str(el) for el in i)\n\n    from ._termui_impl import pager\n\n    return pager(itertools.chain(text_generator, \"\\n\"), color)\n\n\ndef progressbar(\n    iterable: t.Optional[t.Iterable[V]] = None,\n    length: t.Optional[int] = None,\n    label: t.Optional[str] = None,\n    show_eta: bool = True,\n    show_percent: t.Optional[bool] = None,\n    show_pos: bool = False,\n    item_show_func: t.Optional[t.Callable[[t.Optional[V]], t.Optional[str]]] = None,\n    fill_char: str = \"#\",\n    empty_char: str = \"-\",\n    bar_template: str = \"%(label)s  [%(bar)s]  %(info)s\",\n    info_sep: str = \"  \",\n    width: int = 36,\n    file: t.Optional[t.TextIO] = None,\n    color: t.Optional[bool] = None,\n    update_min_steps: int = 1,\n) -> \"ProgressBar[V]\":\n    \"\"\"This function creates an iterable context manager that can be used\n    to iterate over something while showing a progress bar.  It will\n    either iterate over the `iterable` or `length` items (that are counted\n    up).  While iteration happens, this function will print a rendered\n    progress bar to the given `file` (defaults to stdout) and will attempt\n    to calculate remaining time and more.  By default, this progress bar\n    will not be rendered if the file is not a terminal.\n\n    The context manager creates the progress bar.  When the context\n    manager is entered the progress bar is already created.  With every\n    iteration over the progress bar, the iterable passed to the bar is\n    advanced and the bar is updated.  When the context manager exits,\n    a newline is printed and the progress bar is finalized on screen.\n\n    Note: The progress bar is currently designed for use cases where the\n    total progress can be expected to take at least several seconds.\n    Because of this, the ProgressBar class object won't display\n    progress that is considered too fast, and progress where the time\n    between steps is less than a second.\n\n    No printing must happen or the progress bar will be unintentionally\n    destroyed.\n\n    Example usage::\n\n        with progressbar(items) as bar:\n            for item in bar:\n                do_something_with(item)\n\n    Alternatively, if no iterable is specified, one can manually update the\n    progress bar through the `update()` method instead of directly\n    iterating over the progress bar.  The update method accepts the number\n    of steps to increment the bar with::\n\n        with progressbar(length=chunks.total_bytes) as bar:\n            for chunk in chunks:\n                process_chunk(chunk)\n                bar.update(chunks.bytes)\n\n    The ``update()`` method also takes an optional value specifying the\n    ``current_item`` at the new position. This is useful when used\n    together with ``item_show_func`` to customize the output for each\n    manual step::\n\n        with click.progressbar(\n            length=total_size,\n            label='Unzipping archive',\n            item_show_func=lambda a: a.filename\n        ) as bar:\n            for archive in zip_file:\n                archive.extract()\n                bar.update(archive.size, archive)\n\n    :param iterable: an iterable to iterate over.  If not provided the length\n                     is required.\n    :param length: the number of items to iterate over.  By default the\n                   progressbar will attempt to ask the iterator about its\n                   length, which might or might not work.  If an iterable is\n                   also provided this parameter can be used to override the\n                   length.  If an iterable is not provided the progress bar\n                   will iterate over a range of that length.\n    :param label: the label to show next to the progress bar.\n    :param show_eta: enables or disables the estimated time display.  This is\n                     automatically disabled if the length cannot be\n                     determined.\n    :param show_percent: enables or disables the percentage display.  The\n                         default is `True` if the iterable has a length or\n                         `False` if not.\n    :param show_pos: enables or disables the absolute position display.  The\n                     default is `False`.\n    :param item_show_func: A function called with the current item which\n        can return a string to show next to the progress bar. If the\n        function returns ``None`` nothing is shown. The current item can\n        be ``None``, such as when entering and exiting the bar.\n    :param fill_char: the character to use to show the filled part of the\n                      progress bar.\n    :param empty_char: the character to use to show the non-filled part of\n                       the progress bar.\n    :param bar_template: the format string to use as template for the bar.\n                         The parameters in it are ``label`` for the label,\n                         ``bar`` for the progress bar and ``info`` for the\n                         info section.\n    :param info_sep: the separator between multiple info items (eta etc.)\n    :param width: the width of the progress bar in characters, 0 means full\n                  terminal width\n    :param file: The file to write to. If this is not a terminal then\n        only the label is printed.\n    :param color: controls if the terminal supports ANSI colors or not.  The\n                  default is autodetection.  This is only needed if ANSI\n                  codes are included anywhere in the progress bar output\n                  which is not the case by default.\n    :param update_min_steps: Render only when this many updates have\n        completed. This allows tuning for very fast iterators.\n\n    .. versionchanged:: 8.0\n        Output is shown even if execution time is less than 0.5 seconds.\n\n    .. versionchanged:: 8.0\n        ``item_show_func`` shows the current item, not the previous one.\n\n    .. versionchanged:: 8.0\n        Labels are echoed if the output is not a TTY. Reverts a change\n        in 7.0 that removed all output.\n\n    .. versionadded:: 8.0\n       Added the ``update_min_steps`` parameter.\n\n    .. versionchanged:: 4.0\n        Added the ``color`` parameter. Added the ``update`` method to\n        the object.\n\n    .. versionadded:: 2.0\n    \"\"\"\n    from ._termui_impl import ProgressBar\n\n    color = resolve_color_default(color)\n    return ProgressBar(\n        iterable=iterable,\n        length=length,\n        show_eta=show_eta,\n        show_percent=show_percent,\n        show_pos=show_pos,\n        item_show_func=item_show_func,\n        fill_char=fill_char,\n        empty_char=empty_char,\n        bar_template=bar_template,\n        info_sep=info_sep,\n        file=file,\n        label=label,\n        width=width,\n        color=color,\n        update_min_steps=update_min_steps,\n    )\n\n\ndef clear() -> None:\n    \"\"\"Clears the terminal screen.  This will have the effect of clearing\n    the whole visible space of the terminal and moving the cursor to the\n    top left.  This does not do anything if not connected to a terminal.\n\n    .. versionadded:: 2.0\n    \"\"\"\n    if not isatty(sys.stdout):\n        return\n\n    # ANSI escape \\033[2J clears the screen, \\033[1;1H moves the cursor\n    echo(\"\\033[2J\\033[1;1H\", nl=False)\n\n\ndef _interpret_color(\n    color: t.Union[int, t.Tuple[int, int, int], str], offset: int = 0\n) -> str:\n    if isinstance(color, int):\n        return f\"{38 + offset};5;{color:d}\"\n\n    if isinstance(color, (tuple, list)):\n        r, g, b = color\n        return f\"{38 + offset};2;{r:d};{g:d};{b:d}\"\n\n    return str(_ansi_colors[color] + offset)\n\n\ndef style(\n    text: t.Any,\n    fg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None,\n    bg: t.Optional[t.Union[int, t.Tuple[int, int, int], str]] = None,\n    bold: t.Optional[bool] = None,\n    dim: t.Optional[bool] = None,\n    underline: t.Optional[bool] = None,\n    overline: t.Optional[bool] = None,\n    italic: t.Optional[bool] = None,\n    blink: t.Optional[bool] = None,\n    reverse: t.Optional[bool] = None,\n    strikethrough: t.Optional[bool] = None,\n    reset: bool = True,\n) -> str:\n    \"\"\"Styles a text with ANSI styles and returns the new string.  By\n    default the styling is self contained which means that at the end\n    of the string a reset code is issued.  This can be prevented by\n    passing ``reset=False``.\n\n    Examples::\n\n        click.echo(click.style('Hello World!', fg='green'))\n        click.echo(click.style('ATTENTION!', blink=True))\n        click.echo(click.style('Some things', reverse=True, fg='cyan'))\n        click.echo(click.style('More colors', fg=(255, 12, 128), bg=117))\n\n    Supported color names:\n\n    * ``black`` (might be a gray)\n    * ``red``\n    * ``green``\n    * ``yellow`` (might be an orange)\n    * ``blue``\n    * ``magenta``\n    * ``cyan``\n    * ``white`` (might be light gray)\n    * ``bright_black``\n    * ``bright_red``\n    * ``bright_green``\n    * ``bright_yellow``\n    * ``bright_blue``\n    * ``bright_magenta``\n    * ``bright_cyan``\n    * ``bright_white``\n    * ``reset`` (reset the color code only)\n\n    If the terminal supports it, color may also be specified as:\n\n    -   An integer in the interval [0, 255]. The terminal must support\n        8-bit/256-color mode.\n    -   An RGB tuple of three integers in [0, 255]. The terminal must\n        support 24-bit/true-color mode.\n\n    See https://en.wikipedia.org/wiki/ANSI_color and\n    https://gist.github.com/XVilka/8346728 for more information.\n\n    :param text: the string to style with ansi codes.\n    :param fg: if provided this will become the foreground color.\n    :param bg: if provided this will become the background color.\n    :param bold: if provided this will enable or disable bold mode.\n    :param dim: if provided this will enable or disable dim mode.  This is\n                badly supported.\n    :param underline: if provided this will enable or disable underline.\n    :param overline: if provided this will enable or disable overline.\n    :param italic: if provided this will enable or disable italic.\n    :param blink: if provided this will enable or disable blinking.\n    :param reverse: if provided this will enable or disable inverse\n                    rendering (foreground becomes background and the\n                    other way round).\n    :param strikethrough: if provided this will enable or disable\n        striking through text.\n    :param reset: by default a reset-all code is added at the end of the\n                  string which means that styles do not carry over.  This\n                  can be disabled to compose styles.\n\n    .. versionchanged:: 8.0\n        A non-string ``message`` is converted to a string.\n\n    .. versionchanged:: 8.0\n       Added support for 256 and RGB color codes.\n\n    .. versionchanged:: 8.0\n        Added the ``strikethrough``, ``italic``, and ``overline``\n        parameters.\n\n    .. versionchanged:: 7.0\n        Added support for bright colors.\n\n    .. versionadded:: 2.0\n    \"\"\"\n    if not isinstance(text, str):\n        text = str(text)\n\n    bits = []\n\n    if fg:\n        try:\n            bits.append(f\"\\033[{_interpret_color(fg)}m\")\n        except KeyError:\n            raise TypeError(f\"Unknown color {fg!r}\") from None\n\n    if bg:\n        try:\n            bits.append(f\"\\033[{_interpret_color(bg, 10)}m\")\n        except KeyError:\n            raise TypeError(f\"Unknown color {bg!r}\") from None\n\n    if bold is not None:\n        bits.append(f\"\\033[{1 if bold else 22}m\")\n    if dim is not None:\n        bits.append(f\"\\033[{2 if dim else 22}m\")\n    if underline is not None:\n        bits.append(f\"\\033[{4 if underline else 24}m\")\n    if overline is not None:\n        bits.append(f\"\\033[{53 if overline else 55}m\")\n    if italic is not None:\n        bits.append(f\"\\033[{3 if italic else 23}m\")\n    if blink is not None:\n        bits.append(f\"\\033[{5 if blink else 25}m\")\n    if reverse is not None:\n        bits.append(f\"\\033[{7 if reverse else 27}m\")\n    if strikethrough is not None:\n        bits.append(f\"\\033[{9 if strikethrough else 29}m\")\n    bits.append(text)\n    if reset:\n        bits.append(_ansi_reset_all)\n    return \"\".join(bits)\n\n\ndef unstyle(text: str) -> str:\n    \"\"\"Removes ANSI styling information from a string.  Usually it's not\n    necessary to use this function as Click's echo function will\n    automatically remove styling if necessary.\n\n    .. versionadded:: 2.0\n\n    :param text: the text to remove style information from.\n    \"\"\"\n    return strip_ansi(text)\n\n\ndef secho(\n    message: t.Optional[t.Any] = None,\n    file: t.Optional[t.IO[t.AnyStr]] = None,\n    nl: bool = True,\n    err: bool = False,\n    color: t.Optional[bool] = None,\n    **styles: t.Any,\n) -> None:\n    \"\"\"This function combines :func:`echo` and :func:`style` into one\n    call.  As such the following two calls are the same::\n\n        click.secho('Hello World!', fg='green')\n        click.echo(click.style('Hello World!', fg='green'))\n\n    All keyword arguments are forwarded to the underlying functions\n    depending on which one they go with.\n\n    Non-string types will be converted to :class:`str`. However,\n    :class:`bytes` are passed directly to :meth:`echo` without applying\n    style. If you want to style bytes that represent text, call\n    :meth:`bytes.decode` first.\n\n    .. versionchanged:: 8.0\n        A non-string ``message`` is converted to a string. Bytes are\n        passed through without style applied.\n\n    .. versionadded:: 2.0\n    \"\"\"\n    if message is not None and not isinstance(message, (bytes, bytearray)):\n        message = style(message, **styles)\n\n    return echo(message, file=file, nl=nl, err=err, color=color)\n\n\ndef edit(\n    text: t.Optional[t.AnyStr] = None,\n    editor: t.Optional[str] = None,\n    env: t.Optional[t.Mapping[str, str]] = None,\n    require_save: bool = True,\n    extension: str = \".txt\",\n    filename: t.Optional[str] = None,\n) -> t.Optional[t.AnyStr]:\n    r\"\"\"Edits the given text in the defined editor.  If an editor is given\n    (should be the full path to the executable but the regular operating\n    system search path is used for finding the executable) it overrides\n    the detected editor.  Optionally, some environment variables can be\n    used.  If the editor is closed without changes, `None` is returned.  In\n    case a file is edited directly the return value is always `None` and\n    `require_save` and `extension` are ignored.\n\n    If the editor cannot be opened a :exc:`UsageError` is raised.\n\n    Note for Windows: to simplify cross-platform usage, the newlines are\n    automatically converted from POSIX to Windows and vice versa.  As such,\n    the message here will have ``\\n`` as newline markers.\n\n    :param text: the text to edit.\n    :param editor: optionally the editor to use.  Defaults to automatic\n                   detection.\n    :param env: environment variables to forward to the editor.\n    :param require_save: if this is true, then not saving in the editor\n                         will make the return value become `None`.\n    :param extension: the extension to tell the editor about.  This defaults\n                      to `.txt` but changing this might change syntax\n                      highlighting.\n    :param filename: if provided it will edit this file instead of the\n                     provided text contents.  It will not use a temporary\n                     file as an indirection in that case.\n    \"\"\"\n    from ._termui_impl import Editor\n\n    ed = Editor(editor=editor, env=env, require_save=require_save, extension=extension)\n\n    if filename is None:\n        return ed.edit(text)\n\n    ed.edit_file(filename)\n    return None\n\n\ndef launch(url: str, wait: bool = False, locate: bool = False) -> int:\n    \"\"\"This function launches the given URL (or filename) in the default\n    viewer application for this file type.  If this is an executable, it\n    might launch the executable in a new session.  The return value is\n    the exit code of the launched application.  Usually, ``0`` indicates\n    success.\n\n    Examples::\n\n        click.launch('https://click.palletsprojects.com/')\n        click.launch('/my/downloaded/file', locate=True)\n\n    .. versionadded:: 2.0\n\n    :param url: URL or filename of the thing to launch.\n    :param wait: Wait for the program to exit before returning. This\n        only works if the launched program blocks. In particular,\n        ``xdg-open`` on Linux does not block.\n    :param locate: if this is set to `True` then instead of launching the\n                   application associated with the URL it will attempt to\n                   launch a file manager with the file located.  This\n                   might have weird effects if the URL does not point to\n                   the filesystem.\n    \"\"\"\n    from ._termui_impl import open_url\n\n    return open_url(url, wait=wait, locate=locate)\n\n\n# If this is provided, getchar() calls into this instead.  This is used\n# for unittesting purposes.\n_getchar: t.Optional[t.Callable[[bool], str]] = None\n\n\ndef getchar(echo: bool = False) -> str:\n    \"\"\"Fetches a single character from the terminal and returns it.  This\n    will always return a unicode character and under certain rare\n    circumstances this might return more than one character.  The\n    situations which more than one character is returned is when for\n    whatever reason multiple characters end up in the terminal buffer or\n    standard input was not actually a terminal.\n\n    Note that this will always read from the terminal, even if something\n    is piped into the standard input.\n\n    Note for Windows: in rare cases when typing non-ASCII characters, this\n    function might wait for a second character and then return both at once.\n    This is because certain Unicode characters look like special-key markers.\n\n    .. versionadded:: 2.0\n\n    :param echo: if set to `True`, the character read will also show up on\n                 the terminal.  The default is to not show it.\n    \"\"\"\n    global _getchar\n\n    if _getchar is None:\n        from ._termui_impl import getchar as f\n\n        _getchar = f\n\n    return _getchar(echo)\n\n\ndef raw_terminal() -> t.ContextManager[int]:\n    from ._termui_impl import raw_terminal as f\n\n    return f()\n\n\ndef pause(info: t.Optional[str] = None, err: bool = False) -> None:\n    \"\"\"This command stops execution and waits for the user to press any\n    key to continue.  This is similar to the Windows batch \"pause\"\n    command.  If the program is not run through a terminal, this command\n    will instead do nothing.\n\n    .. versionadded:: 2.0\n\n    .. versionadded:: 4.0\n       Added the `err` parameter.\n\n    :param info: The message to print before pausing. Defaults to\n        ``\"Press any key to continue...\"``.\n    :param err: if set to message goes to ``stderr`` instead of\n                ``stdout``, the same as with echo.\n    \"\"\"\n    if not isatty(sys.stdin) or not isatty(sys.stdout):\n        return\n\n    if info is None:\n        info = _(\"Press any key to continue...\")\n\n    try:\n        if info:\n            echo(info, nl=False, err=err)\n        try:\n            getchar()\n        except (KeyboardInterrupt, EOFError):\n            pass\n    finally:\n        if info:\n            echo(err=err)\n"
  },
  {
    "path": "libs/click/testing.py",
    "content": "import contextlib\nimport io\nimport os\nimport shlex\nimport shutil\nimport sys\nimport tempfile\nimport typing as t\nfrom types import TracebackType\n\nfrom . import _compat\nfrom . import formatting\nfrom . import termui\nfrom . import utils\nfrom ._compat import _find_binary_reader\n\nif t.TYPE_CHECKING:\n    from .core import BaseCommand\n\n\nclass EchoingStdin:\n    def __init__(self, input: t.BinaryIO, output: t.BinaryIO) -> None:\n        self._input = input\n        self._output = output\n        self._paused = False\n\n    def __getattr__(self, x: str) -> t.Any:\n        return getattr(self._input, x)\n\n    def _echo(self, rv: bytes) -> bytes:\n        if not self._paused:\n            self._output.write(rv)\n\n        return rv\n\n    def read(self, n: int = -1) -> bytes:\n        return self._echo(self._input.read(n))\n\n    def read1(self, n: int = -1) -> bytes:\n        return self._echo(self._input.read1(n))  # type: ignore\n\n    def readline(self, n: int = -1) -> bytes:\n        return self._echo(self._input.readline(n))\n\n    def readlines(self) -> t.List[bytes]:\n        return [self._echo(x) for x in self._input.readlines()]\n\n    def __iter__(self) -> t.Iterator[bytes]:\n        return iter(self._echo(x) for x in self._input)\n\n    def __repr__(self) -> str:\n        return repr(self._input)\n\n\n@contextlib.contextmanager\ndef _pause_echo(stream: t.Optional[EchoingStdin]) -> t.Iterator[None]:\n    if stream is None:\n        yield\n    else:\n        stream._paused = True\n        yield\n        stream._paused = False\n\n\nclass _NamedTextIOWrapper(io.TextIOWrapper):\n    def __init__(\n        self, buffer: t.BinaryIO, name: str, mode: str, **kwargs: t.Any\n    ) -> None:\n        super().__init__(buffer, **kwargs)\n        self._name = name\n        self._mode = mode\n\n    @property\n    def name(self) -> str:\n        return self._name\n\n    @property\n    def mode(self) -> str:\n        return self._mode\n\n\ndef make_input_stream(\n    input: t.Optional[t.Union[str, bytes, t.IO[t.Any]]], charset: str\n) -> t.BinaryIO:\n    # Is already an input stream.\n    if hasattr(input, \"read\"):\n        rv = _find_binary_reader(t.cast(t.IO[t.Any], input))\n\n        if rv is not None:\n            return rv\n\n        raise TypeError(\"Could not find binary reader for input stream.\")\n\n    if input is None:\n        input = b\"\"\n    elif isinstance(input, str):\n        input = input.encode(charset)\n\n    return io.BytesIO(input)\n\n\nclass Result:\n    \"\"\"Holds the captured result of an invoked CLI script.\"\"\"\n\n    def __init__(\n        self,\n        runner: \"CliRunner\",\n        stdout_bytes: bytes,\n        stderr_bytes: t.Optional[bytes],\n        return_value: t.Any,\n        exit_code: int,\n        exception: t.Optional[BaseException],\n        exc_info: t.Optional[\n            t.Tuple[t.Type[BaseException], BaseException, TracebackType]\n        ] = None,\n    ):\n        #: The runner that created the result\n        self.runner = runner\n        #: The standard output as bytes.\n        self.stdout_bytes = stdout_bytes\n        #: The standard error as bytes, or None if not available\n        self.stderr_bytes = stderr_bytes\n        #: The value returned from the invoked command.\n        #:\n        #: .. versionadded:: 8.0\n        self.return_value = return_value\n        #: The exit code as integer.\n        self.exit_code = exit_code\n        #: The exception that happened if one did.\n        self.exception = exception\n        #: The traceback\n        self.exc_info = exc_info\n\n    @property\n    def output(self) -> str:\n        \"\"\"The (standard) output as unicode string.\"\"\"\n        return self.stdout\n\n    @property\n    def stdout(self) -> str:\n        \"\"\"The standard output as unicode string.\"\"\"\n        return self.stdout_bytes.decode(self.runner.charset, \"replace\").replace(\n            \"\\r\\n\", \"\\n\"\n        )\n\n    @property\n    def stderr(self) -> str:\n        \"\"\"The standard error as unicode string.\"\"\"\n        if self.stderr_bytes is None:\n            raise ValueError(\"stderr not separately captured\")\n        return self.stderr_bytes.decode(self.runner.charset, \"replace\").replace(\n            \"\\r\\n\", \"\\n\"\n        )\n\n    def __repr__(self) -> str:\n        exc_str = repr(self.exception) if self.exception else \"okay\"\n        return f\"<{type(self).__name__} {exc_str}>\"\n\n\nclass CliRunner:\n    \"\"\"The CLI runner provides functionality to invoke a Click command line\n    script for unittesting purposes in a isolated environment.  This only\n    works in single-threaded systems without any concurrency as it changes the\n    global interpreter state.\n\n    :param charset: the character set for the input and output data.\n    :param env: a dictionary with environment variables for overriding.\n    :param echo_stdin: if this is set to `True`, then reading from stdin writes\n                       to stdout.  This is useful for showing examples in\n                       some circumstances.  Note that regular prompts\n                       will automatically echo the input.\n    :param mix_stderr: if this is set to `False`, then stdout and stderr are\n                       preserved as independent streams.  This is useful for\n                       Unix-philosophy apps that have predictable stdout and\n                       noisy stderr, such that each may be measured\n                       independently\n    \"\"\"\n\n    def __init__(\n        self,\n        charset: str = \"utf-8\",\n        env: t.Optional[t.Mapping[str, t.Optional[str]]] = None,\n        echo_stdin: bool = False,\n        mix_stderr: bool = True,\n    ) -> None:\n        self.charset = charset\n        self.env: t.Mapping[str, t.Optional[str]] = env or {}\n        self.echo_stdin = echo_stdin\n        self.mix_stderr = mix_stderr\n\n    def get_default_prog_name(self, cli: \"BaseCommand\") -> str:\n        \"\"\"Given a command object it will return the default program name\n        for it.  The default is the `name` attribute or ``\"root\"`` if not\n        set.\n        \"\"\"\n        return cli.name or \"root\"\n\n    def make_env(\n        self, overrides: t.Optional[t.Mapping[str, t.Optional[str]]] = None\n    ) -> t.Mapping[str, t.Optional[str]]:\n        \"\"\"Returns the environment overrides for invoking a script.\"\"\"\n        rv = dict(self.env)\n        if overrides:\n            rv.update(overrides)\n        return rv\n\n    @contextlib.contextmanager\n    def isolation(\n        self,\n        input: t.Optional[t.Union[str, bytes, t.IO[t.Any]]] = None,\n        env: t.Optional[t.Mapping[str, t.Optional[str]]] = None,\n        color: bool = False,\n    ) -> t.Iterator[t.Tuple[io.BytesIO, t.Optional[io.BytesIO]]]:\n        \"\"\"A context manager that sets up the isolation for invoking of a\n        command line tool.  This sets up stdin with the given input data\n        and `os.environ` with the overrides from the given dictionary.\n        This also rebinds some internals in Click to be mocked (like the\n        prompt functionality).\n\n        This is automatically done in the :meth:`invoke` method.\n\n        :param input: the input stream to put into sys.stdin.\n        :param env: the environment overrides as dictionary.\n        :param color: whether the output should contain color codes. The\n                      application can still override this explicitly.\n\n        .. versionchanged:: 8.0\n            ``stderr`` is opened with ``errors=\"backslashreplace\"``\n            instead of the default ``\"strict\"``.\n\n        .. versionchanged:: 4.0\n            Added the ``color`` parameter.\n        \"\"\"\n        bytes_input = make_input_stream(input, self.charset)\n        echo_input = None\n\n        old_stdin = sys.stdin\n        old_stdout = sys.stdout\n        old_stderr = sys.stderr\n        old_forced_width = formatting.FORCED_WIDTH\n        formatting.FORCED_WIDTH = 80\n\n        env = self.make_env(env)\n\n        bytes_output = io.BytesIO()\n\n        if self.echo_stdin:\n            bytes_input = echo_input = t.cast(\n                t.BinaryIO, EchoingStdin(bytes_input, bytes_output)\n            )\n\n        sys.stdin = text_input = _NamedTextIOWrapper(\n            bytes_input, encoding=self.charset, name=\"<stdin>\", mode=\"r\"\n        )\n\n        if self.echo_stdin:\n            # Force unbuffered reads, otherwise TextIOWrapper reads a\n            # large chunk which is echoed early.\n            text_input._CHUNK_SIZE = 1  # type: ignore\n\n        sys.stdout = _NamedTextIOWrapper(\n            bytes_output, encoding=self.charset, name=\"<stdout>\", mode=\"w\"\n        )\n\n        bytes_error = None\n        if self.mix_stderr:\n            sys.stderr = sys.stdout\n        else:\n            bytes_error = io.BytesIO()\n            sys.stderr = _NamedTextIOWrapper(\n                bytes_error,\n                encoding=self.charset,\n                name=\"<stderr>\",\n                mode=\"w\",\n                errors=\"backslashreplace\",\n            )\n\n        @_pause_echo(echo_input)  # type: ignore\n        def visible_input(prompt: t.Optional[str] = None) -> str:\n            sys.stdout.write(prompt or \"\")\n            val = text_input.readline().rstrip(\"\\r\\n\")\n            sys.stdout.write(f\"{val}\\n\")\n            sys.stdout.flush()\n            return val\n\n        @_pause_echo(echo_input)  # type: ignore\n        def hidden_input(prompt: t.Optional[str] = None) -> str:\n            sys.stdout.write(f\"{prompt or ''}\\n\")\n            sys.stdout.flush()\n            return text_input.readline().rstrip(\"\\r\\n\")\n\n        @_pause_echo(echo_input)  # type: ignore\n        def _getchar(echo: bool) -> str:\n            char = sys.stdin.read(1)\n\n            if echo:\n                sys.stdout.write(char)\n\n            sys.stdout.flush()\n            return char\n\n        default_color = color\n\n        def should_strip_ansi(\n            stream: t.Optional[t.IO[t.Any]] = None, color: t.Optional[bool] = None\n        ) -> bool:\n            if color is None:\n                return not default_color\n            return not color\n\n        old_visible_prompt_func = termui.visible_prompt_func\n        old_hidden_prompt_func = termui.hidden_prompt_func\n        old__getchar_func = termui._getchar\n        old_should_strip_ansi = utils.should_strip_ansi  # type: ignore\n        old__compat_should_strip_ansi = _compat.should_strip_ansi\n        termui.visible_prompt_func = visible_input\n        termui.hidden_prompt_func = hidden_input\n        termui._getchar = _getchar\n        utils.should_strip_ansi = should_strip_ansi  # type: ignore\n        _compat.should_strip_ansi = should_strip_ansi\n\n        old_env = {}\n        try:\n            for key, value in env.items():\n                old_env[key] = os.environ.get(key)\n                if value is None:\n                    try:\n                        del os.environ[key]\n                    except Exception:\n                        pass\n                else:\n                    os.environ[key] = value\n            yield (bytes_output, bytes_error)\n        finally:\n            for key, value in old_env.items():\n                if value is None:\n                    try:\n                        del os.environ[key]\n                    except Exception:\n                        pass\n                else:\n                    os.environ[key] = value\n            sys.stdout = old_stdout\n            sys.stderr = old_stderr\n            sys.stdin = old_stdin\n            termui.visible_prompt_func = old_visible_prompt_func\n            termui.hidden_prompt_func = old_hidden_prompt_func\n            termui._getchar = old__getchar_func\n            utils.should_strip_ansi = old_should_strip_ansi  # type: ignore\n            _compat.should_strip_ansi = old__compat_should_strip_ansi\n            formatting.FORCED_WIDTH = old_forced_width\n\n    def invoke(\n        self,\n        cli: \"BaseCommand\",\n        args: t.Optional[t.Union[str, t.Sequence[str]]] = None,\n        input: t.Optional[t.Union[str, bytes, t.IO[t.Any]]] = None,\n        env: t.Optional[t.Mapping[str, t.Optional[str]]] = None,\n        catch_exceptions: bool = True,\n        color: bool = False,\n        **extra: t.Any,\n    ) -> Result:\n        \"\"\"Invokes a command in an isolated environment.  The arguments are\n        forwarded directly to the command line script, the `extra` keyword\n        arguments are passed to the :meth:`~clickpkg.Command.main` function of\n        the command.\n\n        This returns a :class:`Result` object.\n\n        :param cli: the command to invoke\n        :param args: the arguments to invoke. It may be given as an iterable\n                     or a string. When given as string it will be interpreted\n                     as a Unix shell command. More details at\n                     :func:`shlex.split`.\n        :param input: the input data for `sys.stdin`.\n        :param env: the environment overrides.\n        :param catch_exceptions: Whether to catch any other exceptions than\n                                 ``SystemExit``.\n        :param extra: the keyword arguments to pass to :meth:`main`.\n        :param color: whether the output should contain color codes. The\n                      application can still override this explicitly.\n\n        .. versionchanged:: 8.0\n            The result object has the ``return_value`` attribute with\n            the value returned from the invoked command.\n\n        .. versionchanged:: 4.0\n            Added the ``color`` parameter.\n\n        .. versionchanged:: 3.0\n            Added the ``catch_exceptions`` parameter.\n\n        .. versionchanged:: 3.0\n            The result object has the ``exc_info`` attribute with the\n            traceback if available.\n        \"\"\"\n        exc_info = None\n        with self.isolation(input=input, env=env, color=color) as outstreams:\n            return_value = None\n            exception: t.Optional[BaseException] = None\n            exit_code = 0\n\n            if isinstance(args, str):\n                args = shlex.split(args)\n\n            try:\n                prog_name = extra.pop(\"prog_name\")\n            except KeyError:\n                prog_name = self.get_default_prog_name(cli)\n\n            try:\n                return_value = cli.main(args=args or (), prog_name=prog_name, **extra)\n            except SystemExit as e:\n                exc_info = sys.exc_info()\n                e_code = t.cast(t.Optional[t.Union[int, t.Any]], e.code)\n\n                if e_code is None:\n                    e_code = 0\n\n                if e_code != 0:\n                    exception = e\n\n                if not isinstance(e_code, int):\n                    sys.stdout.write(str(e_code))\n                    sys.stdout.write(\"\\n\")\n                    e_code = 1\n\n                exit_code = e_code\n\n            except Exception as e:\n                if not catch_exceptions:\n                    raise\n                exception = e\n                exit_code = 1\n                exc_info = sys.exc_info()\n            finally:\n                sys.stdout.flush()\n                stdout = outstreams[0].getvalue()\n                if self.mix_stderr:\n                    stderr = None\n                else:\n                    stderr = outstreams[1].getvalue()  # type: ignore\n\n        return Result(\n            runner=self,\n            stdout_bytes=stdout,\n            stderr_bytes=stderr,\n            return_value=return_value,\n            exit_code=exit_code,\n            exception=exception,\n            exc_info=exc_info,  # type: ignore\n        )\n\n    @contextlib.contextmanager\n    def isolated_filesystem(\n        self, temp_dir: t.Optional[t.Union[str, \"os.PathLike[str]\"]] = None\n    ) -> t.Iterator[str]:\n        \"\"\"A context manager that creates a temporary directory and\n        changes the current working directory to it. This isolates tests\n        that affect the contents of the CWD to prevent them from\n        interfering with each other.\n\n        :param temp_dir: Create the temporary directory under this\n            directory. If given, the created directory is not removed\n            when exiting.\n\n        .. versionchanged:: 8.0\n            Added the ``temp_dir`` parameter.\n        \"\"\"\n        cwd = os.getcwd()\n        dt = tempfile.mkdtemp(dir=temp_dir)\n        os.chdir(dt)\n\n        try:\n            yield dt\n        finally:\n            os.chdir(cwd)\n\n            if temp_dir is None:\n                try:\n                    shutil.rmtree(dt)\n                except OSError:\n                    pass\n"
  },
  {
    "path": "libs/click/types.py",
    "content": "import os\nimport stat\nimport sys\nimport typing as t\nfrom datetime import datetime\nfrom gettext import gettext as _\nfrom gettext import ngettext\n\nfrom ._compat import _get_argv_encoding\nfrom ._compat import open_stream\nfrom .exceptions import BadParameter\nfrom .utils import format_filename\nfrom .utils import LazyFile\nfrom .utils import safecall\n\nif t.TYPE_CHECKING:\n    import typing_extensions as te\n\n    from .core import Context\n    from .core import Parameter\n    from .shell_completion import CompletionItem\n\n\nclass ParamType:\n    \"\"\"Represents the type of a parameter. Validates and converts values\n    from the command line or Python into the correct type.\n\n    To implement a custom type, subclass and implement at least the\n    following:\n\n    -   The :attr:`name` class attribute must be set.\n    -   Calling an instance of the type with ``None`` must return\n        ``None``. This is already implemented by default.\n    -   :meth:`convert` must convert string values to the correct type.\n    -   :meth:`convert` must accept values that are already the correct\n        type.\n    -   It must be able to convert a value if the ``ctx`` and ``param``\n        arguments are ``None``. This can occur when converting prompt\n        input.\n    \"\"\"\n\n    is_composite: t.ClassVar[bool] = False\n    arity: t.ClassVar[int] = 1\n\n    #: the descriptive name of this type\n    name: str\n\n    #: if a list of this type is expected and the value is pulled from a\n    #: string environment variable, this is what splits it up.  `None`\n    #: means any whitespace.  For all parameters the general rule is that\n    #: whitespace splits them up.  The exception are paths and files which\n    #: are split by ``os.path.pathsep`` by default (\":\" on Unix and \";\" on\n    #: Windows).\n    envvar_list_splitter: t.ClassVar[t.Optional[str]] = None\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        \"\"\"Gather information that could be useful for a tool generating\n        user-facing documentation.\n\n        Use :meth:`click.Context.to_info_dict` to traverse the entire\n        CLI structure.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        # The class name without the \"ParamType\" suffix.\n        param_type = type(self).__name__.partition(\"ParamType\")[0]\n        param_type = param_type.partition(\"ParameterType\")[0]\n\n        # Custom subclasses might not remember to set a name.\n        if hasattr(self, \"name\"):\n            name = self.name\n        else:\n            name = param_type\n\n        return {\"param_type\": param_type, \"name\": name}\n\n    def __call__(\n        self,\n        value: t.Any,\n        param: t.Optional[\"Parameter\"] = None,\n        ctx: t.Optional[\"Context\"] = None,\n    ) -> t.Any:\n        if value is not None:\n            return self.convert(value, param, ctx)\n\n    def get_metavar(self, param: \"Parameter\") -> t.Optional[str]:\n        \"\"\"Returns the metavar default for this param if it provides one.\"\"\"\n\n    def get_missing_message(self, param: \"Parameter\") -> t.Optional[str]:\n        \"\"\"Optionally might return extra information about a missing\n        parameter.\n\n        .. versionadded:: 2.0\n        \"\"\"\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        \"\"\"Convert the value to the correct type. This is not called if\n        the value is ``None`` (the missing value).\n\n        This must accept string values from the command line, as well as\n        values that are already the correct type. It may also convert\n        other compatible types.\n\n        The ``param`` and ``ctx`` arguments may be ``None`` in certain\n        situations, such as when converting prompt input.\n\n        If the value cannot be converted, call :meth:`fail` with a\n        descriptive message.\n\n        :param value: The value to convert.\n        :param param: The parameter that is using this type to convert\n            its value. May be ``None``.\n        :param ctx: The current context that arrived at this value. May\n            be ``None``.\n        \"\"\"\n        return value\n\n    def split_envvar_value(self, rv: str) -> t.Sequence[str]:\n        \"\"\"Given a value from an environment variable this splits it up\n        into small chunks depending on the defined envvar list splitter.\n\n        If the splitter is set to `None`, which means that whitespace splits,\n        then leading and trailing whitespace is ignored.  Otherwise, leading\n        and trailing splitters usually lead to empty items being included.\n        \"\"\"\n        return (rv or \"\").split(self.envvar_list_splitter)\n\n    def fail(\n        self,\n        message: str,\n        param: t.Optional[\"Parameter\"] = None,\n        ctx: t.Optional[\"Context\"] = None,\n    ) -> \"t.NoReturn\":\n        \"\"\"Helper method to fail with an invalid value message.\"\"\"\n        raise BadParameter(message, ctx=ctx, param=param)\n\n    def shell_complete(\n        self, ctx: \"Context\", param: \"Parameter\", incomplete: str\n    ) -> t.List[\"CompletionItem\"]:\n        \"\"\"Return a list of\n        :class:`~click.shell_completion.CompletionItem` objects for the\n        incomplete value. Most types do not provide completions, but\n        some do, and this allows custom types to provide custom\n        completions as well.\n\n        :param ctx: Invocation context for this command.\n        :param param: The parameter that is requesting completion.\n        :param incomplete: Value being completed. May be empty.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        return []\n\n\nclass CompositeParamType(ParamType):\n    is_composite = True\n\n    @property\n    def arity(self) -> int:  # type: ignore\n        raise NotImplementedError()\n\n\nclass FuncParamType(ParamType):\n    def __init__(self, func: t.Callable[[t.Any], t.Any]) -> None:\n        self.name: str = func.__name__\n        self.func = func\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict()\n        info_dict[\"func\"] = self.func\n        return info_dict\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        try:\n            return self.func(value)\n        except ValueError:\n            try:\n                value = str(value)\n            except UnicodeError:\n                value = value.decode(\"utf-8\", \"replace\")\n\n            self.fail(value, param, ctx)\n\n\nclass UnprocessedParamType(ParamType):\n    name = \"text\"\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        return value\n\n    def __repr__(self) -> str:\n        return \"UNPROCESSED\"\n\n\nclass StringParamType(ParamType):\n    name = \"text\"\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        if isinstance(value, bytes):\n            enc = _get_argv_encoding()\n            try:\n                value = value.decode(enc)\n            except UnicodeError:\n                fs_enc = sys.getfilesystemencoding()\n                if fs_enc != enc:\n                    try:\n                        value = value.decode(fs_enc)\n                    except UnicodeError:\n                        value = value.decode(\"utf-8\", \"replace\")\n                else:\n                    value = value.decode(\"utf-8\", \"replace\")\n            return value\n        return str(value)\n\n    def __repr__(self) -> str:\n        return \"STRING\"\n\n\nclass Choice(ParamType):\n    \"\"\"The choice type allows a value to be checked against a fixed set\n    of supported values. All of these values have to be strings.\n\n    You should only pass a list or tuple of choices. Other iterables\n    (like generators) may lead to surprising results.\n\n    The resulting value will always be one of the originally passed choices\n    regardless of ``case_sensitive`` or any ``ctx.token_normalize_func``\n    being specified.\n\n    See :ref:`choice-opts` for an example.\n\n    :param case_sensitive: Set to false to make choices case\n        insensitive. Defaults to true.\n    \"\"\"\n\n    name = \"choice\"\n\n    def __init__(self, choices: t.Sequence[str], case_sensitive: bool = True) -> None:\n        self.choices = choices\n        self.case_sensitive = case_sensitive\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict()\n        info_dict[\"choices\"] = self.choices\n        info_dict[\"case_sensitive\"] = self.case_sensitive\n        return info_dict\n\n    def get_metavar(self, param: \"Parameter\") -> str:\n        choices_str = \"|\".join(self.choices)\n\n        # Use curly braces to indicate a required argument.\n        if param.required and param.param_type_name == \"argument\":\n            return f\"{{{choices_str}}}\"\n\n        # Use square braces to indicate an option or optional argument.\n        return f\"[{choices_str}]\"\n\n    def get_missing_message(self, param: \"Parameter\") -> str:\n        return _(\"Choose from:\\n\\t{choices}\").format(choices=\",\\n\\t\".join(self.choices))\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        # Match through normalization and case sensitivity\n        # first do token_normalize_func, then lowercase\n        # preserve original `value` to produce an accurate message in\n        # `self.fail`\n        normed_value = value\n        normed_choices = {choice: choice for choice in self.choices}\n\n        if ctx is not None and ctx.token_normalize_func is not None:\n            normed_value = ctx.token_normalize_func(value)\n            normed_choices = {\n                ctx.token_normalize_func(normed_choice): original\n                for normed_choice, original in normed_choices.items()\n            }\n\n        if not self.case_sensitive:\n            normed_value = normed_value.casefold()\n            normed_choices = {\n                normed_choice.casefold(): original\n                for normed_choice, original in normed_choices.items()\n            }\n\n        if normed_value in normed_choices:\n            return normed_choices[normed_value]\n\n        choices_str = \", \".join(map(repr, self.choices))\n        self.fail(\n            ngettext(\n                \"{value!r} is not {choice}.\",\n                \"{value!r} is not one of {choices}.\",\n                len(self.choices),\n            ).format(value=value, choice=choices_str, choices=choices_str),\n            param,\n            ctx,\n        )\n\n    def __repr__(self) -> str:\n        return f\"Choice({list(self.choices)})\"\n\n    def shell_complete(\n        self, ctx: \"Context\", param: \"Parameter\", incomplete: str\n    ) -> t.List[\"CompletionItem\"]:\n        \"\"\"Complete choices that start with the incomplete value.\n\n        :param ctx: Invocation context for this command.\n        :param param: The parameter that is requesting completion.\n        :param incomplete: Value being completed. May be empty.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        from click.shell_completion import CompletionItem\n\n        str_choices = map(str, self.choices)\n\n        if self.case_sensitive:\n            matched = (c for c in str_choices if c.startswith(incomplete))\n        else:\n            incomplete = incomplete.lower()\n            matched = (c for c in str_choices if c.lower().startswith(incomplete))\n\n        return [CompletionItem(c) for c in matched]\n\n\nclass DateTime(ParamType):\n    \"\"\"The DateTime type converts date strings into `datetime` objects.\n\n    The format strings which are checked are configurable, but default to some\n    common (non-timezone aware) ISO 8601 formats.\n\n    When specifying *DateTime* formats, you should only pass a list or a tuple.\n    Other iterables, like generators, may lead to surprising results.\n\n    The format strings are processed using ``datetime.strptime``, and this\n    consequently defines the format strings which are allowed.\n\n    Parsing is tried using each format, in order, and the first format which\n    parses successfully is used.\n\n    :param formats: A list or tuple of date format strings, in the order in\n                    which they should be tried. Defaults to\n                    ``'%Y-%m-%d'``, ``'%Y-%m-%dT%H:%M:%S'``,\n                    ``'%Y-%m-%d %H:%M:%S'``.\n    \"\"\"\n\n    name = \"datetime\"\n\n    def __init__(self, formats: t.Optional[t.Sequence[str]] = None):\n        self.formats: t.Sequence[str] = formats or [\n            \"%Y-%m-%d\",\n            \"%Y-%m-%dT%H:%M:%S\",\n            \"%Y-%m-%d %H:%M:%S\",\n        ]\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict()\n        info_dict[\"formats\"] = self.formats\n        return info_dict\n\n    def get_metavar(self, param: \"Parameter\") -> str:\n        return f\"[{'|'.join(self.formats)}]\"\n\n    def _try_to_convert_date(self, value: t.Any, format: str) -> t.Optional[datetime]:\n        try:\n            return datetime.strptime(value, format)\n        except ValueError:\n            return None\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        if isinstance(value, datetime):\n            return value\n\n        for format in self.formats:\n            converted = self._try_to_convert_date(value, format)\n\n            if converted is not None:\n                return converted\n\n        formats_str = \", \".join(map(repr, self.formats))\n        self.fail(\n            ngettext(\n                \"{value!r} does not match the format {format}.\",\n                \"{value!r} does not match the formats {formats}.\",\n                len(self.formats),\n            ).format(value=value, format=formats_str, formats=formats_str),\n            param,\n            ctx,\n        )\n\n    def __repr__(self) -> str:\n        return \"DateTime\"\n\n\nclass _NumberParamTypeBase(ParamType):\n    _number_class: t.ClassVar[t.Type[t.Any]]\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        try:\n            return self._number_class(value)\n        except ValueError:\n            self.fail(\n                _(\"{value!r} is not a valid {number_type}.\").format(\n                    value=value, number_type=self.name\n                ),\n                param,\n                ctx,\n            )\n\n\nclass _NumberRangeBase(_NumberParamTypeBase):\n    def __init__(\n        self,\n        min: t.Optional[float] = None,\n        max: t.Optional[float] = None,\n        min_open: bool = False,\n        max_open: bool = False,\n        clamp: bool = False,\n    ) -> None:\n        self.min = min\n        self.max = max\n        self.min_open = min_open\n        self.max_open = max_open\n        self.clamp = clamp\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict()\n        info_dict.update(\n            min=self.min,\n            max=self.max,\n            min_open=self.min_open,\n            max_open=self.max_open,\n            clamp=self.clamp,\n        )\n        return info_dict\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        import operator\n\n        rv = super().convert(value, param, ctx)\n        lt_min: bool = self.min is not None and (\n            operator.le if self.min_open else operator.lt\n        )(rv, self.min)\n        gt_max: bool = self.max is not None and (\n            operator.ge if self.max_open else operator.gt\n        )(rv, self.max)\n\n        if self.clamp:\n            if lt_min:\n                return self._clamp(self.min, 1, self.min_open)  # type: ignore\n\n            if gt_max:\n                return self._clamp(self.max, -1, self.max_open)  # type: ignore\n\n        if lt_min or gt_max:\n            self.fail(\n                _(\"{value} is not in the range {range}.\").format(\n                    value=rv, range=self._describe_range()\n                ),\n                param,\n                ctx,\n            )\n\n        return rv\n\n    def _clamp(self, bound: float, dir: \"te.Literal[1, -1]\", open: bool) -> float:\n        \"\"\"Find the valid value to clamp to bound in the given\n        direction.\n\n        :param bound: The boundary value.\n        :param dir: 1 or -1 indicating the direction to move.\n        :param open: If true, the range does not include the bound.\n        \"\"\"\n        raise NotImplementedError\n\n    def _describe_range(self) -> str:\n        \"\"\"Describe the range for use in help text.\"\"\"\n        if self.min is None:\n            op = \"<\" if self.max_open else \"<=\"\n            return f\"x{op}{self.max}\"\n\n        if self.max is None:\n            op = \">\" if self.min_open else \">=\"\n            return f\"x{op}{self.min}\"\n\n        lop = \"<\" if self.min_open else \"<=\"\n        rop = \"<\" if self.max_open else \"<=\"\n        return f\"{self.min}{lop}x{rop}{self.max}\"\n\n    def __repr__(self) -> str:\n        clamp = \" clamped\" if self.clamp else \"\"\n        return f\"<{type(self).__name__} {self._describe_range()}{clamp}>\"\n\n\nclass IntParamType(_NumberParamTypeBase):\n    name = \"integer\"\n    _number_class = int\n\n    def __repr__(self) -> str:\n        return \"INT\"\n\n\nclass IntRange(_NumberRangeBase, IntParamType):\n    \"\"\"Restrict an :data:`click.INT` value to a range of accepted\n    values. See :ref:`ranges`.\n\n    If ``min`` or ``max`` are not passed, any value is accepted in that\n    direction. If ``min_open`` or ``max_open`` are enabled, the\n    corresponding boundary is not included in the range.\n\n    If ``clamp`` is enabled, a value outside the range is clamped to the\n    boundary instead of failing.\n\n    .. versionchanged:: 8.0\n        Added the ``min_open`` and ``max_open`` parameters.\n    \"\"\"\n\n    name = \"integer range\"\n\n    def _clamp(  # type: ignore\n        self, bound: int, dir: \"te.Literal[1, -1]\", open: bool\n    ) -> int:\n        if not open:\n            return bound\n\n        return bound + dir\n\n\nclass FloatParamType(_NumberParamTypeBase):\n    name = \"float\"\n    _number_class = float\n\n    def __repr__(self) -> str:\n        return \"FLOAT\"\n\n\nclass FloatRange(_NumberRangeBase, FloatParamType):\n    \"\"\"Restrict a :data:`click.FLOAT` value to a range of accepted\n    values. See :ref:`ranges`.\n\n    If ``min`` or ``max`` are not passed, any value is accepted in that\n    direction. If ``min_open`` or ``max_open`` are enabled, the\n    corresponding boundary is not included in the range.\n\n    If ``clamp`` is enabled, a value outside the range is clamped to the\n    boundary instead of failing. This is not supported if either\n    boundary is marked ``open``.\n\n    .. versionchanged:: 8.0\n        Added the ``min_open`` and ``max_open`` parameters.\n    \"\"\"\n\n    name = \"float range\"\n\n    def __init__(\n        self,\n        min: t.Optional[float] = None,\n        max: t.Optional[float] = None,\n        min_open: bool = False,\n        max_open: bool = False,\n        clamp: bool = False,\n    ) -> None:\n        super().__init__(\n            min=min, max=max, min_open=min_open, max_open=max_open, clamp=clamp\n        )\n\n        if (min_open or max_open) and clamp:\n            raise TypeError(\"Clamping is not supported for open bounds.\")\n\n    def _clamp(self, bound: float, dir: \"te.Literal[1, -1]\", open: bool) -> float:\n        if not open:\n            return bound\n\n        # Could use Python 3.9's math.nextafter here, but clamping an\n        # open float range doesn't seem to be particularly useful. It's\n        # left up to the user to write a callback to do it if needed.\n        raise RuntimeError(\"Clamping is not supported for open bounds.\")\n\n\nclass BoolParamType(ParamType):\n    name = \"boolean\"\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        if value in {False, True}:\n            return bool(value)\n\n        norm = value.strip().lower()\n\n        if norm in {\"1\", \"true\", \"t\", \"yes\", \"y\", \"on\"}:\n            return True\n\n        if norm in {\"0\", \"false\", \"f\", \"no\", \"n\", \"off\"}:\n            return False\n\n        self.fail(\n            _(\"{value!r} is not a valid boolean.\").format(value=value), param, ctx\n        )\n\n    def __repr__(self) -> str:\n        return \"BOOL\"\n\n\nclass UUIDParameterType(ParamType):\n    name = \"uuid\"\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        import uuid\n\n        if isinstance(value, uuid.UUID):\n            return value\n\n        value = value.strip()\n\n        try:\n            return uuid.UUID(value)\n        except ValueError:\n            self.fail(\n                _(\"{value!r} is not a valid UUID.\").format(value=value), param, ctx\n            )\n\n    def __repr__(self) -> str:\n        return \"UUID\"\n\n\nclass File(ParamType):\n    \"\"\"Declares a parameter to be a file for reading or writing.  The file\n    is automatically closed once the context tears down (after the command\n    finished working).\n\n    Files can be opened for reading or writing.  The special value ``-``\n    indicates stdin or stdout depending on the mode.\n\n    By default, the file is opened for reading text data, but it can also be\n    opened in binary mode or for writing.  The encoding parameter can be used\n    to force a specific encoding.\n\n    The `lazy` flag controls if the file should be opened immediately or upon\n    first IO. The default is to be non-lazy for standard input and output\n    streams as well as files opened for reading, `lazy` otherwise. When opening a\n    file lazily for reading, it is still opened temporarily for validation, but\n    will not be held open until first IO. lazy is mainly useful when opening\n    for writing to avoid creating the file until it is needed.\n\n    Files can also be opened atomically in which case all writes go into a\n    separate file in the same folder and upon completion the file will\n    be moved over to the original location.  This is useful if a file\n    regularly read by other users is modified.\n\n    See :ref:`file-args` for more information.\n\n    .. versionchanged:: 2.0\n        Added the ``atomic`` parameter.\n    \"\"\"\n\n    name = \"filename\"\n    envvar_list_splitter: t.ClassVar[str] = os.path.pathsep\n\n    def __init__(\n        self,\n        mode: str = \"r\",\n        encoding: t.Optional[str] = None,\n        errors: t.Optional[str] = \"strict\",\n        lazy: t.Optional[bool] = None,\n        atomic: bool = False,\n    ) -> None:\n        self.mode = mode\n        self.encoding = encoding\n        self.errors = errors\n        self.lazy = lazy\n        self.atomic = atomic\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict()\n        info_dict.update(mode=self.mode, encoding=self.encoding)\n        return info_dict\n\n    def resolve_lazy_flag(self, value: \"t.Union[str, os.PathLike[str]]\") -> bool:\n        if self.lazy is not None:\n            return self.lazy\n        if os.fspath(value) == \"-\":\n            return False\n        elif \"w\" in self.mode:\n            return True\n        return False\n\n    def convert(\n        self,\n        value: t.Union[str, \"os.PathLike[str]\", t.IO[t.Any]],\n        param: t.Optional[\"Parameter\"],\n        ctx: t.Optional[\"Context\"],\n    ) -> t.IO[t.Any]:\n        if _is_file_like(value):\n            return value\n\n        value = t.cast(\"t.Union[str, os.PathLike[str]]\", value)\n\n        try:\n            lazy = self.resolve_lazy_flag(value)\n\n            if lazy:\n                lf = LazyFile(\n                    value, self.mode, self.encoding, self.errors, atomic=self.atomic\n                )\n\n                if ctx is not None:\n                    ctx.call_on_close(lf.close_intelligently)\n\n                return t.cast(t.IO[t.Any], lf)\n\n            f, should_close = open_stream(\n                value, self.mode, self.encoding, self.errors, atomic=self.atomic\n            )\n\n            # If a context is provided, we automatically close the file\n            # at the end of the context execution (or flush out).  If a\n            # context does not exist, it's the caller's responsibility to\n            # properly close the file.  This for instance happens when the\n            # type is used with prompts.\n            if ctx is not None:\n                if should_close:\n                    ctx.call_on_close(safecall(f.close))\n                else:\n                    ctx.call_on_close(safecall(f.flush))\n\n            return f\n        except OSError as e:\n            self.fail(f\"'{format_filename(value)}': {e.strerror}\", param, ctx)\n\n    def shell_complete(\n        self, ctx: \"Context\", param: \"Parameter\", incomplete: str\n    ) -> t.List[\"CompletionItem\"]:\n        \"\"\"Return a special completion marker that tells the completion\n        system to use the shell to provide file path completions.\n\n        :param ctx: Invocation context for this command.\n        :param param: The parameter that is requesting completion.\n        :param incomplete: Value being completed. May be empty.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        from click.shell_completion import CompletionItem\n\n        return [CompletionItem(incomplete, type=\"file\")]\n\n\ndef _is_file_like(value: t.Any) -> \"te.TypeGuard[t.IO[t.Any]]\":\n    return hasattr(value, \"read\") or hasattr(value, \"write\")\n\n\nclass Path(ParamType):\n    \"\"\"The ``Path`` type is similar to the :class:`File` type, but\n    returns the filename instead of an open file. Various checks can be\n    enabled to validate the type of file and permissions.\n\n    :param exists: The file or directory needs to exist for the value to\n        be valid. If this is not set to ``True``, and the file does not\n        exist, then all further checks are silently skipped.\n    :param file_okay: Allow a file as a value.\n    :param dir_okay: Allow a directory as a value.\n    :param readable: if true, a readable check is performed.\n    :param writable: if true, a writable check is performed.\n    :param executable: if true, an executable check is performed.\n    :param resolve_path: Make the value absolute and resolve any\n        symlinks. A ``~`` is not expanded, as this is supposed to be\n        done by the shell only.\n    :param allow_dash: Allow a single dash as a value, which indicates\n        a standard stream (but does not open it). Use\n        :func:`~click.open_file` to handle opening this value.\n    :param path_type: Convert the incoming path value to this type. If\n        ``None``, keep Python's default, which is ``str``. Useful to\n        convert to :class:`pathlib.Path`.\n\n    .. versionchanged:: 8.1\n        Added the ``executable`` parameter.\n\n    .. versionchanged:: 8.0\n        Allow passing ``path_type=pathlib.Path``.\n\n    .. versionchanged:: 6.0\n        Added the ``allow_dash`` parameter.\n    \"\"\"\n\n    envvar_list_splitter: t.ClassVar[str] = os.path.pathsep\n\n    def __init__(\n        self,\n        exists: bool = False,\n        file_okay: bool = True,\n        dir_okay: bool = True,\n        writable: bool = False,\n        readable: bool = True,\n        resolve_path: bool = False,\n        allow_dash: bool = False,\n        path_type: t.Optional[t.Type[t.Any]] = None,\n        executable: bool = False,\n    ):\n        self.exists = exists\n        self.file_okay = file_okay\n        self.dir_okay = dir_okay\n        self.readable = readable\n        self.writable = writable\n        self.executable = executable\n        self.resolve_path = resolve_path\n        self.allow_dash = allow_dash\n        self.type = path_type\n\n        if self.file_okay and not self.dir_okay:\n            self.name: str = _(\"file\")\n        elif self.dir_okay and not self.file_okay:\n            self.name = _(\"directory\")\n        else:\n            self.name = _(\"path\")\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict()\n        info_dict.update(\n            exists=self.exists,\n            file_okay=self.file_okay,\n            dir_okay=self.dir_okay,\n            writable=self.writable,\n            readable=self.readable,\n            allow_dash=self.allow_dash,\n        )\n        return info_dict\n\n    def coerce_path_result(\n        self, value: \"t.Union[str, os.PathLike[str]]\"\n    ) -> \"t.Union[str, bytes, os.PathLike[str]]\":\n        if self.type is not None and not isinstance(value, self.type):\n            if self.type is str:\n                return os.fsdecode(value)\n            elif self.type is bytes:\n                return os.fsencode(value)\n            else:\n                return t.cast(\"os.PathLike[str]\", self.type(value))\n\n        return value\n\n    def convert(\n        self,\n        value: \"t.Union[str, os.PathLike[str]]\",\n        param: t.Optional[\"Parameter\"],\n        ctx: t.Optional[\"Context\"],\n    ) -> \"t.Union[str, bytes, os.PathLike[str]]\":\n        rv = value\n\n        is_dash = self.file_okay and self.allow_dash and rv in (b\"-\", \"-\")\n\n        if not is_dash:\n            if self.resolve_path:\n                # os.path.realpath doesn't resolve symlinks on Windows\n                # until Python 3.8. Use pathlib for now.\n                import pathlib\n\n                rv = os.fsdecode(pathlib.Path(rv).resolve())\n\n            try:\n                st = os.stat(rv)\n            except OSError:\n                if not self.exists:\n                    return self.coerce_path_result(rv)\n                self.fail(\n                    _(\"{name} {filename!r} does not exist.\").format(\n                        name=self.name.title(), filename=format_filename(value)\n                    ),\n                    param,\n                    ctx,\n                )\n\n            if not self.file_okay and stat.S_ISREG(st.st_mode):\n                self.fail(\n                    _(\"{name} {filename!r} is a file.\").format(\n                        name=self.name.title(), filename=format_filename(value)\n                    ),\n                    param,\n                    ctx,\n                )\n            if not self.dir_okay and stat.S_ISDIR(st.st_mode):\n                self.fail(\n                    _(\"{name} {filename!r} is a directory.\").format(\n                        name=self.name.title(), filename=format_filename(value)\n                    ),\n                    param,\n                    ctx,\n                )\n\n            if self.readable and not os.access(rv, os.R_OK):\n                self.fail(\n                    _(\"{name} {filename!r} is not readable.\").format(\n                        name=self.name.title(), filename=format_filename(value)\n                    ),\n                    param,\n                    ctx,\n                )\n\n            if self.writable and not os.access(rv, os.W_OK):\n                self.fail(\n                    _(\"{name} {filename!r} is not writable.\").format(\n                        name=self.name.title(), filename=format_filename(value)\n                    ),\n                    param,\n                    ctx,\n                )\n\n            if self.executable and not os.access(value, os.X_OK):\n                self.fail(\n                    _(\"{name} {filename!r} is not executable.\").format(\n                        name=self.name.title(), filename=format_filename(value)\n                    ),\n                    param,\n                    ctx,\n                )\n\n        return self.coerce_path_result(rv)\n\n    def shell_complete(\n        self, ctx: \"Context\", param: \"Parameter\", incomplete: str\n    ) -> t.List[\"CompletionItem\"]:\n        \"\"\"Return a special completion marker that tells the completion\n        system to use the shell to provide path completions for only\n        directories or any paths.\n\n        :param ctx: Invocation context for this command.\n        :param param: The parameter that is requesting completion.\n        :param incomplete: Value being completed. May be empty.\n\n        .. versionadded:: 8.0\n        \"\"\"\n        from click.shell_completion import CompletionItem\n\n        type = \"dir\" if self.dir_okay and not self.file_okay else \"file\"\n        return [CompletionItem(incomplete, type=type)]\n\n\nclass Tuple(CompositeParamType):\n    \"\"\"The default behavior of Click is to apply a type on a value directly.\n    This works well in most cases, except for when `nargs` is set to a fixed\n    count and different types should be used for different items.  In this\n    case the :class:`Tuple` type can be used.  This type can only be used\n    if `nargs` is set to a fixed number.\n\n    For more information see :ref:`tuple-type`.\n\n    This can be selected by using a Python tuple literal as a type.\n\n    :param types: a list of types that should be used for the tuple items.\n    \"\"\"\n\n    def __init__(self, types: t.Sequence[t.Union[t.Type[t.Any], ParamType]]) -> None:\n        self.types: t.Sequence[ParamType] = [convert_type(ty) for ty in types]\n\n    def to_info_dict(self) -> t.Dict[str, t.Any]:\n        info_dict = super().to_info_dict()\n        info_dict[\"types\"] = [t.to_info_dict() for t in self.types]\n        return info_dict\n\n    @property\n    def name(self) -> str:  # type: ignore\n        return f\"<{' '.join(ty.name for ty in self.types)}>\"\n\n    @property\n    def arity(self) -> int:  # type: ignore\n        return len(self.types)\n\n    def convert(\n        self, value: t.Any, param: t.Optional[\"Parameter\"], ctx: t.Optional[\"Context\"]\n    ) -> t.Any:\n        len_type = len(self.types)\n        len_value = len(value)\n\n        if len_value != len_type:\n            self.fail(\n                ngettext(\n                    \"{len_type} values are required, but {len_value} was given.\",\n                    \"{len_type} values are required, but {len_value} were given.\",\n                    len_value,\n                ).format(len_type=len_type, len_value=len_value),\n                param=param,\n                ctx=ctx,\n            )\n\n        return tuple(ty(x, param, ctx) for ty, x in zip(self.types, value))\n\n\ndef convert_type(ty: t.Optional[t.Any], default: t.Optional[t.Any] = None) -> ParamType:\n    \"\"\"Find the most appropriate :class:`ParamType` for the given Python\n    type. If the type isn't provided, it can be inferred from a default\n    value.\n    \"\"\"\n    guessed_type = False\n\n    if ty is None and default is not None:\n        if isinstance(default, (tuple, list)):\n            # If the default is empty, ty will remain None and will\n            # return STRING.\n            if default:\n                item = default[0]\n\n                # A tuple of tuples needs to detect the inner types.\n                # Can't call convert recursively because that would\n                # incorrectly unwind the tuple to a single type.\n                if isinstance(item, (tuple, list)):\n                    ty = tuple(map(type, item))\n                else:\n                    ty = type(item)\n        else:\n            ty = type(default)\n\n        guessed_type = True\n\n    if isinstance(ty, tuple):\n        return Tuple(ty)\n\n    if isinstance(ty, ParamType):\n        return ty\n\n    if ty is str or ty is None:\n        return STRING\n\n    if ty is int:\n        return INT\n\n    if ty is float:\n        return FLOAT\n\n    if ty is bool:\n        return BOOL\n\n    if guessed_type:\n        return STRING\n\n    if __debug__:\n        try:\n            if issubclass(ty, ParamType):\n                raise AssertionError(\n                    f\"Attempted to use an uninstantiated parameter type ({ty}).\"\n                )\n        except TypeError:\n            # ty is an instance (correct), so issubclass fails.\n            pass\n\n    return FuncParamType(ty)\n\n\n#: A dummy parameter type that just does nothing.  From a user's\n#: perspective this appears to just be the same as `STRING` but\n#: internally no string conversion takes place if the input was bytes.\n#: This is usually useful when working with file paths as they can\n#: appear in bytes and unicode.\n#:\n#: For path related uses the :class:`Path` type is a better choice but\n#: there are situations where an unprocessed type is useful which is why\n#: it is is provided.\n#:\n#: .. versionadded:: 4.0\nUNPROCESSED = UnprocessedParamType()\n\n#: A unicode string parameter type which is the implicit default.  This\n#: can also be selected by using ``str`` as type.\nSTRING = StringParamType()\n\n#: An integer parameter.  This can also be selected by using ``int`` as\n#: type.\nINT = IntParamType()\n\n#: A floating point value parameter.  This can also be selected by using\n#: ``float`` as type.\nFLOAT = FloatParamType()\n\n#: A boolean parameter.  This is the default for boolean flags.  This can\n#: also be selected by using ``bool`` as a type.\nBOOL = BoolParamType()\n\n#: A UUID parameter.\nUUID = UUIDParameterType()\n"
  },
  {
    "path": "libs/click/utils.py",
    "content": "import os\nimport re\nimport sys\nimport typing as t\nfrom functools import update_wrapper\nfrom types import ModuleType\nfrom types import TracebackType\n\nfrom ._compat import _default_text_stderr\nfrom ._compat import _default_text_stdout\nfrom ._compat import _find_binary_writer\nfrom ._compat import auto_wrap_for_ansi\nfrom ._compat import binary_streams\nfrom ._compat import open_stream\nfrom ._compat import should_strip_ansi\nfrom ._compat import strip_ansi\nfrom ._compat import text_streams\nfrom ._compat import WIN\nfrom .globals import resolve_color_default\n\nif t.TYPE_CHECKING:\n    import typing_extensions as te\n\n    P = te.ParamSpec(\"P\")\n\nR = t.TypeVar(\"R\")\n\n\ndef _posixify(name: str) -> str:\n    return \"-\".join(name.split()).lower()\n\n\ndef safecall(func: \"t.Callable[P, R]\") -> \"t.Callable[P, t.Optional[R]]\":\n    \"\"\"Wraps a function so that it swallows exceptions.\"\"\"\n\n    def wrapper(*args: \"P.args\", **kwargs: \"P.kwargs\") -> t.Optional[R]:\n        try:\n            return func(*args, **kwargs)\n        except Exception:\n            pass\n        return None\n\n    return update_wrapper(wrapper, func)\n\n\ndef make_str(value: t.Any) -> str:\n    \"\"\"Converts a value into a valid string.\"\"\"\n    if isinstance(value, bytes):\n        try:\n            return value.decode(sys.getfilesystemencoding())\n        except UnicodeError:\n            return value.decode(\"utf-8\", \"replace\")\n    return str(value)\n\n\ndef make_default_short_help(help: str, max_length: int = 45) -> str:\n    \"\"\"Returns a condensed version of help string.\"\"\"\n    # Consider only the first paragraph.\n    paragraph_end = help.find(\"\\n\\n\")\n\n    if paragraph_end != -1:\n        help = help[:paragraph_end]\n\n    # Collapse newlines, tabs, and spaces.\n    words = help.split()\n\n    if not words:\n        return \"\"\n\n    # The first paragraph started with a \"no rewrap\" marker, ignore it.\n    if words[0] == \"\\b\":\n        words = words[1:]\n\n    total_length = 0\n    last_index = len(words) - 1\n\n    for i, word in enumerate(words):\n        total_length += len(word) + (i > 0)\n\n        if total_length > max_length:  # too long, truncate\n            break\n\n        if word[-1] == \".\":  # sentence end, truncate without \"...\"\n            return \" \".join(words[: i + 1])\n\n        if total_length == max_length and i != last_index:\n            break  # not at sentence end, truncate with \"...\"\n    else:\n        return \" \".join(words)  # no truncation needed\n\n    # Account for the length of the suffix.\n    total_length += len(\"...\")\n\n    # remove words until the length is short enough\n    while i > 0:\n        total_length -= len(words[i]) + (i > 0)\n\n        if total_length <= max_length:\n            break\n\n        i -= 1\n\n    return \" \".join(words[:i]) + \"...\"\n\n\nclass LazyFile:\n    \"\"\"A lazy file works like a regular file but it does not fully open\n    the file but it does perform some basic checks early to see if the\n    filename parameter does make sense.  This is useful for safely opening\n    files for writing.\n    \"\"\"\n\n    def __init__(\n        self,\n        filename: t.Union[str, \"os.PathLike[str]\"],\n        mode: str = \"r\",\n        encoding: t.Optional[str] = None,\n        errors: t.Optional[str] = \"strict\",\n        atomic: bool = False,\n    ):\n        self.name: str = os.fspath(filename)\n        self.mode = mode\n        self.encoding = encoding\n        self.errors = errors\n        self.atomic = atomic\n        self._f: t.Optional[t.IO[t.Any]]\n        self.should_close: bool\n\n        if self.name == \"-\":\n            self._f, self.should_close = open_stream(filename, mode, encoding, errors)\n        else:\n            if \"r\" in mode:\n                # Open and close the file in case we're opening it for\n                # reading so that we can catch at least some errors in\n                # some cases early.\n                open(filename, mode).close()\n            self._f = None\n            self.should_close = True\n\n    def __getattr__(self, name: str) -> t.Any:\n        return getattr(self.open(), name)\n\n    def __repr__(self) -> str:\n        if self._f is not None:\n            return repr(self._f)\n        return f\"<unopened file '{format_filename(self.name)}' {self.mode}>\"\n\n    def open(self) -> t.IO[t.Any]:\n        \"\"\"Opens the file if it's not yet open.  This call might fail with\n        a :exc:`FileError`.  Not handling this error will produce an error\n        that Click shows.\n        \"\"\"\n        if self._f is not None:\n            return self._f\n        try:\n            rv, self.should_close = open_stream(\n                self.name, self.mode, self.encoding, self.errors, atomic=self.atomic\n            )\n        except OSError as e:\n            from .exceptions import FileError\n\n            raise FileError(self.name, hint=e.strerror) from e\n        self._f = rv\n        return rv\n\n    def close(self) -> None:\n        \"\"\"Closes the underlying file, no matter what.\"\"\"\n        if self._f is not None:\n            self._f.close()\n\n    def close_intelligently(self) -> None:\n        \"\"\"This function only closes the file if it was opened by the lazy\n        file wrapper.  For instance this will never close stdin.\n        \"\"\"\n        if self.should_close:\n            self.close()\n\n    def __enter__(self) -> \"LazyFile\":\n        return self\n\n    def __exit__(\n        self,\n        exc_type: t.Optional[t.Type[BaseException]],\n        exc_value: t.Optional[BaseException],\n        tb: t.Optional[TracebackType],\n    ) -> None:\n        self.close_intelligently()\n\n    def __iter__(self) -> t.Iterator[t.AnyStr]:\n        self.open()\n        return iter(self._f)  # type: ignore\n\n\nclass KeepOpenFile:\n    def __init__(self, file: t.IO[t.Any]) -> None:\n        self._file: t.IO[t.Any] = file\n\n    def __getattr__(self, name: str) -> t.Any:\n        return getattr(self._file, name)\n\n    def __enter__(self) -> \"KeepOpenFile\":\n        return self\n\n    def __exit__(\n        self,\n        exc_type: t.Optional[t.Type[BaseException]],\n        exc_value: t.Optional[BaseException],\n        tb: t.Optional[TracebackType],\n    ) -> None:\n        pass\n\n    def __repr__(self) -> str:\n        return repr(self._file)\n\n    def __iter__(self) -> t.Iterator[t.AnyStr]:\n        return iter(self._file)\n\n\ndef echo(\n    message: t.Optional[t.Any] = None,\n    file: t.Optional[t.IO[t.Any]] = None,\n    nl: bool = True,\n    err: bool = False,\n    color: t.Optional[bool] = None,\n) -> None:\n    \"\"\"Print a message and newline to stdout or a file. This should be\n    used instead of :func:`print` because it provides better support\n    for different data, files, and environments.\n\n    Compared to :func:`print`, this does the following:\n\n    -   Ensures that the output encoding is not misconfigured on Linux.\n    -   Supports Unicode in the Windows console.\n    -   Supports writing to binary outputs, and supports writing bytes\n        to text outputs.\n    -   Supports colors and styles on Windows.\n    -   Removes ANSI color and style codes if the output does not look\n        like an interactive terminal.\n    -   Always flushes the output.\n\n    :param message: The string or bytes to output. Other objects are\n        converted to strings.\n    :param file: The file to write to. Defaults to ``stdout``.\n    :param err: Write to ``stderr`` instead of ``stdout``.\n    :param nl: Print a newline after the message. Enabled by default.\n    :param color: Force showing or hiding colors and other styles. By\n        default Click will remove color if the output does not look like\n        an interactive terminal.\n\n    .. versionchanged:: 6.0\n        Support Unicode output on the Windows console. Click does not\n        modify ``sys.stdout``, so ``sys.stdout.write()`` and ``print()``\n        will still not support Unicode.\n\n    .. versionchanged:: 4.0\n        Added the ``color`` parameter.\n\n    .. versionadded:: 3.0\n        Added the ``err`` parameter.\n\n    .. versionchanged:: 2.0\n        Support colors on Windows if colorama is installed.\n    \"\"\"\n    if file is None:\n        if err:\n            file = _default_text_stderr()\n        else:\n            file = _default_text_stdout()\n\n        # There are no standard streams attached to write to. For example,\n        # pythonw on Windows.\n        if file is None:\n            return\n\n    # Convert non bytes/text into the native string type.\n    if message is not None and not isinstance(message, (str, bytes, bytearray)):\n        out: t.Optional[t.Union[str, bytes]] = str(message)\n    else:\n        out = message\n\n    if nl:\n        out = out or \"\"\n        if isinstance(out, str):\n            out += \"\\n\"\n        else:\n            out += b\"\\n\"\n\n    if not out:\n        file.flush()\n        return\n\n    # If there is a message and the value looks like bytes, we manually\n    # need to find the binary stream and write the message in there.\n    # This is done separately so that most stream types will work as you\n    # would expect. Eg: you can write to StringIO for other cases.\n    if isinstance(out, (bytes, bytearray)):\n        binary_file = _find_binary_writer(file)\n\n        if binary_file is not None:\n            file.flush()\n            binary_file.write(out)\n            binary_file.flush()\n            return\n\n    # ANSI style code support. For no message or bytes, nothing happens.\n    # When outputting to a file instead of a terminal, strip codes.\n    else:\n        color = resolve_color_default(color)\n\n        if should_strip_ansi(file, color):\n            out = strip_ansi(out)\n        elif WIN:\n            if auto_wrap_for_ansi is not None:\n                file = auto_wrap_for_ansi(file, color)  # type: ignore\n            elif not color:\n                out = strip_ansi(out)\n\n    file.write(out)  # type: ignore\n    file.flush()\n\n\ndef get_binary_stream(name: \"te.Literal['stdin', 'stdout', 'stderr']\") -> t.BinaryIO:\n    \"\"\"Returns a system stream for byte processing.\n\n    :param name: the name of the stream to open.  Valid names are ``'stdin'``,\n                 ``'stdout'`` and ``'stderr'``\n    \"\"\"\n    opener = binary_streams.get(name)\n    if opener is None:\n        raise TypeError(f\"Unknown standard stream '{name}'\")\n    return opener()\n\n\ndef get_text_stream(\n    name: \"te.Literal['stdin', 'stdout', 'stderr']\",\n    encoding: t.Optional[str] = None,\n    errors: t.Optional[str] = \"strict\",\n) -> t.TextIO:\n    \"\"\"Returns a system stream for text processing.  This usually returns\n    a wrapped stream around a binary stream returned from\n    :func:`get_binary_stream` but it also can take shortcuts for already\n    correctly configured streams.\n\n    :param name: the name of the stream to open.  Valid names are ``'stdin'``,\n                 ``'stdout'`` and ``'stderr'``\n    :param encoding: overrides the detected default encoding.\n    :param errors: overrides the default error mode.\n    \"\"\"\n    opener = text_streams.get(name)\n    if opener is None:\n        raise TypeError(f\"Unknown standard stream '{name}'\")\n    return opener(encoding, errors)\n\n\ndef open_file(\n    filename: t.Union[str, \"os.PathLike[str]\"],\n    mode: str = \"r\",\n    encoding: t.Optional[str] = None,\n    errors: t.Optional[str] = \"strict\",\n    lazy: bool = False,\n    atomic: bool = False,\n) -> t.IO[t.Any]:\n    \"\"\"Open a file, with extra behavior to handle ``'-'`` to indicate\n    a standard stream, lazy open on write, and atomic write. Similar to\n    the behavior of the :class:`~click.File` param type.\n\n    If ``'-'`` is given to open ``stdout`` or ``stdin``, the stream is\n    wrapped so that using it in a context manager will not close it.\n    This makes it possible to use the function without accidentally\n    closing a standard stream:\n\n    .. code-block:: python\n\n        with open_file(filename) as f:\n            ...\n\n    :param filename: The name or Path of the file to open, or ``'-'`` for\n        ``stdin``/``stdout``.\n    :param mode: The mode in which to open the file.\n    :param encoding: The encoding to decode or encode a file opened in\n        text mode.\n    :param errors: The error handling mode.\n    :param lazy: Wait to open the file until it is accessed. For read\n        mode, the file is temporarily opened to raise access errors\n        early, then closed until it is read again.\n    :param atomic: Write to a temporary file and replace the given file\n        on close.\n\n    .. versionadded:: 3.0\n    \"\"\"\n    if lazy:\n        return t.cast(\n            t.IO[t.Any], LazyFile(filename, mode, encoding, errors, atomic=atomic)\n        )\n\n    f, should_close = open_stream(filename, mode, encoding, errors, atomic=atomic)\n\n    if not should_close:\n        f = t.cast(t.IO[t.Any], KeepOpenFile(f))\n\n    return f\n\n\ndef format_filename(\n    filename: \"t.Union[str, bytes, os.PathLike[str], os.PathLike[bytes]]\",\n    shorten: bool = False,\n) -> str:\n    \"\"\"Format a filename as a string for display. Ensures the filename can be\n    displayed by replacing any invalid bytes or surrogate escapes in the name\n    with the replacement character ``�``.\n\n    Invalid bytes or surrogate escapes will raise an error when written to a\n    stream with ``errors=\"strict\"``. This will typically happen with ``stdout``\n    when the locale is something like ``en_GB.UTF-8``.\n\n    Many scenarios *are* safe to write surrogates though, due to PEP 538 and\n    PEP 540, including:\n\n    -   Writing to ``stderr``, which uses ``errors=\"backslashreplace\"``.\n    -   The system has ``LANG=C.UTF-8``, ``C``, or ``POSIX``. Python opens\n        stdout and stderr with ``errors=\"surrogateescape\"``.\n    -   None of ``LANG/LC_*`` are set. Python assumes ``LANG=C.UTF-8``.\n    -   Python is started in UTF-8 mode  with  ``PYTHONUTF8=1`` or ``-X utf8``.\n        Python opens stdout and stderr with ``errors=\"surrogateescape\"``.\n\n    :param filename: formats a filename for UI display.  This will also convert\n                     the filename into unicode without failing.\n    :param shorten: this optionally shortens the filename to strip of the\n                    path that leads up to it.\n    \"\"\"\n    if shorten:\n        filename = os.path.basename(filename)\n    else:\n        filename = os.fspath(filename)\n\n    if isinstance(filename, bytes):\n        filename = filename.decode(sys.getfilesystemencoding(), \"replace\")\n    else:\n        filename = filename.encode(\"utf-8\", \"surrogateescape\").decode(\n            \"utf-8\", \"replace\"\n        )\n\n    return filename\n\n\ndef get_app_dir(app_name: str, roaming: bool = True, force_posix: bool = False) -> str:\n    r\"\"\"Returns the config folder for the application.  The default behavior\n    is to return whatever is most appropriate for the operating system.\n\n    To give you an idea, for an app called ``\"Foo Bar\"``, something like\n    the following folders could be returned:\n\n    Mac OS X:\n      ``~/Library/Application Support/Foo Bar``\n    Mac OS X (POSIX):\n      ``~/.foo-bar``\n    Unix:\n      ``~/.config/foo-bar``\n    Unix (POSIX):\n      ``~/.foo-bar``\n    Windows (roaming):\n      ``C:\\Users\\<user>\\AppData\\Roaming\\Foo Bar``\n    Windows (not roaming):\n      ``C:\\Users\\<user>\\AppData\\Local\\Foo Bar``\n\n    .. versionadded:: 2.0\n\n    :param app_name: the application name.  This should be properly capitalized\n                     and can contain whitespace.\n    :param roaming: controls if the folder should be roaming or not on Windows.\n                    Has no effect otherwise.\n    :param force_posix: if this is set to `True` then on any POSIX system the\n                        folder will be stored in the home folder with a leading\n                        dot instead of the XDG config home or darwin's\n                        application support folder.\n    \"\"\"\n    if WIN:\n        key = \"APPDATA\" if roaming else \"LOCALAPPDATA\"\n        folder = os.environ.get(key)\n        if folder is None:\n            folder = os.path.expanduser(\"~\")\n        return os.path.join(folder, app_name)\n    if force_posix:\n        return os.path.join(os.path.expanduser(f\"~/.{_posixify(app_name)}\"))\n    if sys.platform == \"darwin\":\n        return os.path.join(\n            os.path.expanduser(\"~/Library/Application Support\"), app_name\n        )\n    return os.path.join(\n        os.environ.get(\"XDG_CONFIG_HOME\", os.path.expanduser(\"~/.config\")),\n        _posixify(app_name),\n    )\n\n\nclass PacifyFlushWrapper:\n    \"\"\"This wrapper is used to catch and suppress BrokenPipeErrors resulting\n    from ``.flush()`` being called on broken pipe during the shutdown/final-GC\n    of the Python interpreter. Notably ``.flush()`` is always called on\n    ``sys.stdout`` and ``sys.stderr``. So as to have minimal impact on any\n    other cleanup code, and the case where the underlying file is not a broken\n    pipe, all calls and attributes are proxied.\n    \"\"\"\n\n    def __init__(self, wrapped: t.IO[t.Any]) -> None:\n        self.wrapped = wrapped\n\n    def flush(self) -> None:\n        try:\n            self.wrapped.flush()\n        except OSError as e:\n            import errno\n\n            if e.errno != errno.EPIPE:\n                raise\n\n    def __getattr__(self, attr: str) -> t.Any:\n        return getattr(self.wrapped, attr)\n\n\ndef _detect_program_name(\n    path: t.Optional[str] = None, _main: t.Optional[ModuleType] = None\n) -> str:\n    \"\"\"Determine the command used to run the program, for use in help\n    text. If a file or entry point was executed, the file name is\n    returned. If ``python -m`` was used to execute a module or package,\n    ``python -m name`` is returned.\n\n    This doesn't try to be too precise, the goal is to give a concise\n    name for help text. Files are only shown as their name without the\n    path. ``python`` is only shown for modules, and the full path to\n    ``sys.executable`` is not shown.\n\n    :param path: The Python file being executed. Python puts this in\n        ``sys.argv[0]``, which is used by default.\n    :param _main: The ``__main__`` module. This should only be passed\n        during internal testing.\n\n    .. versionadded:: 8.0\n        Based on command args detection in the Werkzeug reloader.\n\n    :meta private:\n    \"\"\"\n    if _main is None:\n        _main = sys.modules[\"__main__\"]\n\n    if not path:\n        path = sys.argv[0]\n\n    # The value of __package__ indicates how Python was called. It may\n    # not exist if a setuptools script is installed as an egg. It may be\n    # set incorrectly for entry points created with pip on Windows.\n    # It is set to \"\" inside a Shiv or PEX zipapp.\n    if getattr(_main, \"__package__\", None) in {None, \"\"} or (\n        os.name == \"nt\"\n        and _main.__package__ == \"\"\n        and not os.path.exists(path)\n        and os.path.exists(f\"{path}.exe\")\n    ):\n        # Executed a file, like \"python app.py\".\n        return os.path.basename(path)\n\n    # Executed a module, like \"python -m example\".\n    # Rewritten by Python from \"-m script\" to \"/path/to/script.py\".\n    # Need to look at main module to determine how it was executed.\n    py_module = t.cast(str, _main.__package__)\n    name = os.path.splitext(os.path.basename(path))[0]\n\n    # A submodule like \"example.cli\".\n    if name != \"__main__\":\n        py_module = f\"{py_module}.{name}\"\n\n    return f\"python -m {py_module.lstrip('.')}\"\n\n\ndef _expand_args(\n    args: t.Iterable[str],\n    *,\n    user: bool = True,\n    env: bool = True,\n    glob_recursive: bool = True,\n) -> t.List[str]:\n    \"\"\"Simulate Unix shell expansion with Python functions.\n\n    See :func:`glob.glob`, :func:`os.path.expanduser`, and\n    :func:`os.path.expandvars`.\n\n    This is intended for use on Windows, where the shell does not do any\n    expansion. It may not exactly match what a Unix shell would do.\n\n    :param args: List of command line arguments to expand.\n    :param user: Expand user home directory.\n    :param env: Expand environment variables.\n    :param glob_recursive: ``**`` matches directories recursively.\n\n    .. versionchanged:: 8.1\n        Invalid glob patterns are treated as empty expansions rather\n        than raising an error.\n\n    .. versionadded:: 8.0\n\n    :meta private:\n    \"\"\"\n    from glob import glob\n\n    out = []\n\n    for arg in args:\n        if user:\n            arg = os.path.expanduser(arg)\n\n        if env:\n            arg = os.path.expandvars(arg)\n\n        try:\n            matches = glob(arg, recursive=glob_recursive)\n        except re.error:\n            matches = []\n\n        if not matches:\n            out.append(arg)\n        else:\n            out.extend(matches)\n\n    return out\n"
  },
  {
    "path": "libs/click-8.1.8.dist-info/LICENSE.txt",
    "content": "Copyright 2014 Pallets\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1.  Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n2.  Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\n3.  Neither the name of the copyright holder nor the names of its\n    contributors may be used to endorse or promote products derived from\n    this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "libs/click-8.1.8.dist-info/METADATA",
    "content": "Metadata-Version: 2.3\nName: click\nVersion: 8.1.8\nSummary: Composable command line interface toolkit\nMaintainer-email: Pallets <contact@palletsprojects.com>\nRequires-Python: >=3.7\nDescription-Content-Type: text/markdown\nClassifier: Development Status :: 5 - Production/Stable\nClassifier: Intended Audience :: Developers\nClassifier: License :: OSI Approved :: BSD License\nClassifier: Operating System :: OS Independent\nClassifier: Programming Language :: Python\nClassifier: Typing :: Typed\nRequires-Dist: colorama; platform_system == 'Windows'\nRequires-Dist: importlib-metadata; python_version < '3.8'\nProject-URL: Changes, https://click.palletsprojects.com/changes/\nProject-URL: Chat, https://discord.gg/pallets\nProject-URL: Documentation, https://click.palletsprojects.com/\nProject-URL: Donate, https://palletsprojects.com/donate\nProject-URL: Source, https://github.com/pallets/click/\n\n# $ click_\n\nClick is a Python package for creating beautiful command line interfaces\nin a composable way with as little code as necessary. It's the \"Command\nLine Interface Creation Kit\". It's highly configurable but comes with\nsensible defaults out of the box.\n\nIt aims to make the process of writing command line tools quick and fun\nwhile also preventing any frustration caused by the inability to\nimplement an intended CLI API.\n\nClick in three points:\n\n-   Arbitrary nesting of commands\n-   Automatic help page generation\n-   Supports lazy loading of subcommands at runtime\n\n\n## A Simple Example\n\n```python\nimport click\n\n@click.command()\n@click.option(\"--count\", default=1, help=\"Number of greetings.\")\n@click.option(\"--name\", prompt=\"Your name\", help=\"The person to greet.\")\ndef hello(count, name):\n    \"\"\"Simple program that greets NAME for a total of COUNT times.\"\"\"\n    for _ in range(count):\n        click.echo(f\"Hello, {name}!\")\n\nif __name__ == '__main__':\n    hello()\n```\n\n```\n$ python hello.py --count=3\nYour name: Click\nHello, Click!\nHello, Click!\nHello, Click!\n```\n\n\n## Donate\n\nThe Pallets organization develops and supports Click and other popular\npackages. In order to grow the community of contributors and users, and\nallow the maintainers to devote more time to the projects, [please\ndonate today][].\n\n[please donate today]: https://palletsprojects.com/donate\n\n"
  },
  {
    "path": "libs/click-8.1.8.dist-info/RECORD",
    "content": "click/__init__.py,sha256=j1DJeCbga4ribkv5uyvIAzI0oFN13fW9mevDKShFelo,3188\nclick/_compat.py,sha256=IGKh_J5QdfKELitnRfTGHneejWxoCw_NX9tfMbdcg3w,18730\nclick/_termui_impl.py,sha256=a5z7I9gOFeMmu7Gb6_RPyQ8GPuVP1EeblixcWSPSQPk,24783\nclick/_textwrap.py,sha256=10fQ64OcBUMuK7mFvh8363_uoOxPlRItZBmKzRJDgoY,1353\nclick/_winconsole.py,sha256=5ju3jQkcZD0W27WEMGqmEP4y_crUVzPCqsX_FYb7BO0,7860\nclick/core.py,sha256=Q1nEVdctZwvIPOlt4vfHko0TYnHCeE40UEEul8Wpyvs,114748\nclick/decorators.py,sha256=7t6F-QWowtLh6F_6l-4YV4Y4yNTcqFQEu9i37zIz68s,18925\nclick/exceptions.py,sha256=V7zDT6emqJ8iNl0kF1P5kpFmLMWQ1T1L7aNNKM4YR0w,9600\nclick/formatting.py,sha256=Frf0-5W33-loyY_i9qrwXR8-STnW3m5gvyxLVUdyxyk,9706\nclick/globals.py,sha256=cuJ6Bbo073lgEEmhjr394PeM-QFmXM-Ci-wmfsd7H5g,1954\nclick/parser.py,sha256=h4sndcpF5OHrZQN8vD8IWb5OByvW7ABbhRToxovrqS8,19067\nclick/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0\nclick/shell_completion.py,sha256=TR0dXEGcvWb9Eo3aaQEXGhnvNS3FF4H4QcuLnvAvYo4,18636\nclick/termui.py,sha256=dLxiS70UOvIYBda_nEEZaPAFOVDVmRs1sEPMuLDowQo,28310\nclick/testing.py,sha256=3RA8anCf7TZ8-5RAF5it2Te-aWXBAL5VLasQnMiC2ZQ,16282\nclick/types.py,sha256=BD5Qqq4h-8kawBmOIzJlmq4xzThAf4wCvaOLZSBDNx0,36422\nclick/utils.py,sha256=ce-IrO9ilII76LGkU354pOdHbepM8UftfNH7SfMU_28,20330\nclick-8.1.8.dist-info/LICENSE.txt,sha256=morRBqOU6FO_4h9C9OctWSgZoigF2ZG18ydQKSkrZY0,1475\nclick-8.1.8.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82\nclick-8.1.8.dist-info/METADATA,sha256=WJtQ6uGS2ybLfvUE4vC0XIhIBr4yFGwjrMBR2fiCQ-Q,2263\nclick-8.1.8.dist-info/RECORD,,\n"
  },
  {
    "path": "libs/click-8.1.8.dist-info/WHEEL",
    "content": "Wheel-Version: 1.0\nGenerator: flit 3.10.1\nRoot-Is-Purelib: true\nTag: py3-none-any\n"
  },
  {
    "path": "libs/colorama/__init__.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nfrom .initialise import init, deinit, reinit, colorama_text, just_fix_windows_console\nfrom .ansi import Fore, Back, Style, Cursor\nfrom .ansitowin32 import AnsiToWin32\n\n__version__ = '0.4.6'\n\n"
  },
  {
    "path": "libs/colorama/ansi.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\n'''\nThis module generates ANSI character codes to printing colors to terminals.\nSee: http://en.wikipedia.org/wiki/ANSI_escape_code\n'''\n\nCSI = '\\033['\nOSC = '\\033]'\nBEL = '\\a'\n\n\ndef code_to_chars(code):\n    return CSI + str(code) + 'm'\n\ndef set_title(title):\n    return OSC + '2;' + title + BEL\n\ndef clear_screen(mode=2):\n    return CSI + str(mode) + 'J'\n\ndef clear_line(mode=2):\n    return CSI + str(mode) + 'K'\n\n\nclass AnsiCodes(object):\n    def __init__(self):\n        # the subclasses declare class attributes which are numbers.\n        # Upon instantiation we define instance attributes, which are the same\n        # as the class attributes but wrapped with the ANSI escape sequence\n        for name in dir(self):\n            if not name.startswith('_'):\n                value = getattr(self, name)\n                setattr(self, name, code_to_chars(value))\n\n\nclass AnsiCursor(object):\n    def UP(self, n=1):\n        return CSI + str(n) + 'A'\n    def DOWN(self, n=1):\n        return CSI + str(n) + 'B'\n    def FORWARD(self, n=1):\n        return CSI + str(n) + 'C'\n    def BACK(self, n=1):\n        return CSI + str(n) + 'D'\n    def POS(self, x=1, y=1):\n        return CSI + str(y) + ';' + str(x) + 'H'\n\n\nclass AnsiFore(AnsiCodes):\n    BLACK           = 30\n    RED             = 31\n    GREEN           = 32\n    YELLOW          = 33\n    BLUE            = 34\n    MAGENTA         = 35\n    CYAN            = 36\n    WHITE           = 37\n    RESET           = 39\n\n    # These are fairly well supported, but not part of the standard.\n    LIGHTBLACK_EX   = 90\n    LIGHTRED_EX     = 91\n    LIGHTGREEN_EX   = 92\n    LIGHTYELLOW_EX  = 93\n    LIGHTBLUE_EX    = 94\n    LIGHTMAGENTA_EX = 95\n    LIGHTCYAN_EX    = 96\n    LIGHTWHITE_EX   = 97\n\n\nclass AnsiBack(AnsiCodes):\n    BLACK           = 40\n    RED             = 41\n    GREEN           = 42\n    YELLOW          = 43\n    BLUE            = 44\n    MAGENTA         = 45\n    CYAN            = 46\n    WHITE           = 47\n    RESET           = 49\n\n    # These are fairly well supported, but not part of the standard.\n    LIGHTBLACK_EX   = 100\n    LIGHTRED_EX     = 101\n    LIGHTGREEN_EX   = 102\n    LIGHTYELLOW_EX  = 103\n    LIGHTBLUE_EX    = 104\n    LIGHTMAGENTA_EX = 105\n    LIGHTCYAN_EX    = 106\n    LIGHTWHITE_EX   = 107\n\n\nclass AnsiStyle(AnsiCodes):\n    BRIGHT    = 1\n    DIM       = 2\n    NORMAL    = 22\n    RESET_ALL = 0\n\nFore   = AnsiFore()\nBack   = AnsiBack()\nStyle  = AnsiStyle()\nCursor = AnsiCursor()\n"
  },
  {
    "path": "libs/colorama/ansitowin32.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nimport re\nimport sys\nimport os\n\nfrom .ansi import AnsiFore, AnsiBack, AnsiStyle, Style, BEL\nfrom .winterm import enable_vt_processing, WinTerm, WinColor, WinStyle\nfrom .win32 import windll, winapi_test\n\n\nwinterm = None\nif windll is not None:\n    winterm = WinTerm()\n\n\nclass StreamWrapper(object):\n    '''\n    Wraps a stream (such as stdout), acting as a transparent proxy for all\n    attribute access apart from method 'write()', which is delegated to our\n    Converter instance.\n    '''\n    def __init__(self, wrapped, converter):\n        # double-underscore everything to prevent clashes with names of\n        # attributes on the wrapped stream object.\n        self.__wrapped = wrapped\n        self.__convertor = converter\n\n    def __getattr__(self, name):\n        return getattr(self.__wrapped, name)\n\n    def __enter__(self, *args, **kwargs):\n        # special method lookup bypasses __getattr__/__getattribute__, see\n        # https://stackoverflow.com/questions/12632894/why-doesnt-getattr-work-with-exit\n        # thus, contextlib magic methods are not proxied via __getattr__\n        return self.__wrapped.__enter__(*args, **kwargs)\n\n    def __exit__(self, *args, **kwargs):\n        return self.__wrapped.__exit__(*args, **kwargs)\n\n    def __setstate__(self, state):\n        self.__dict__ = state\n\n    def __getstate__(self):\n        return self.__dict__\n\n    def write(self, text):\n        self.__convertor.write(text)\n\n    def isatty(self):\n        stream = self.__wrapped\n        if 'PYCHARM_HOSTED' in os.environ:\n            if stream is not None and (stream is sys.__stdout__ or stream is sys.__stderr__):\n                return True\n        try:\n            stream_isatty = stream.isatty\n        except AttributeError:\n            return False\n        else:\n            return stream_isatty()\n\n    @property\n    def closed(self):\n        stream = self.__wrapped\n        try:\n            return stream.closed\n        # AttributeError in the case that the stream doesn't support being closed\n        # ValueError for the case that the stream has already been detached when atexit runs\n        except (AttributeError, ValueError):\n            return True\n\n\nclass AnsiToWin32(object):\n    '''\n    Implements a 'write()' method which, on Windows, will strip ANSI character\n    sequences from the text, and if outputting to a tty, will convert them into\n    win32 function calls.\n    '''\n    ANSI_CSI_RE = re.compile('\\001?\\033\\\\[((?:\\\\d|;)*)([a-zA-Z])\\002?')   # Control Sequence Introducer\n    ANSI_OSC_RE = re.compile('\\001?\\033\\\\]([^\\a]*)(\\a)\\002?')             # Operating System Command\n\n    def __init__(self, wrapped, convert=None, strip=None, autoreset=False):\n        # The wrapped stream (normally sys.stdout or sys.stderr)\n        self.wrapped = wrapped\n\n        # should we reset colors to defaults after every .write()\n        self.autoreset = autoreset\n\n        # create the proxy wrapping our output stream\n        self.stream = StreamWrapper(wrapped, self)\n\n        on_windows = os.name == 'nt'\n        # We test if the WinAPI works, because even if we are on Windows\n        # we may be using a terminal that doesn't support the WinAPI\n        # (e.g. Cygwin Terminal). In this case it's up to the terminal\n        # to support the ANSI codes.\n        conversion_supported = on_windows and winapi_test()\n        try:\n            fd = wrapped.fileno()\n        except Exception:\n            fd = -1\n        system_has_native_ansi = not on_windows or enable_vt_processing(fd)\n        have_tty = not self.stream.closed and self.stream.isatty()\n        need_conversion = conversion_supported and not system_has_native_ansi\n\n        # should we strip ANSI sequences from our output?\n        if strip is None:\n            strip = need_conversion or not have_tty\n        self.strip = strip\n\n        # should we should convert ANSI sequences into win32 calls?\n        if convert is None:\n            convert = need_conversion and have_tty\n        self.convert = convert\n\n        # dict of ansi codes to win32 functions and parameters\n        self.win32_calls = self.get_win32_calls()\n\n        # are we wrapping stderr?\n        self.on_stderr = self.wrapped is sys.stderr\n\n    def should_wrap(self):\n        '''\n        True if this class is actually needed. If false, then the output\n        stream will not be affected, nor will win32 calls be issued, so\n        wrapping stdout is not actually required. This will generally be\n        False on non-Windows platforms, unless optional functionality like\n        autoreset has been requested using kwargs to init()\n        '''\n        return self.convert or self.strip or self.autoreset\n\n    def get_win32_calls(self):\n        if self.convert and winterm:\n            return {\n                AnsiStyle.RESET_ALL: (winterm.reset_all, ),\n                AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT),\n                AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL),\n                AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL),\n                AnsiFore.BLACK: (winterm.fore, WinColor.BLACK),\n                AnsiFore.RED: (winterm.fore, WinColor.RED),\n                AnsiFore.GREEN: (winterm.fore, WinColor.GREEN),\n                AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW),\n                AnsiFore.BLUE: (winterm.fore, WinColor.BLUE),\n                AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA),\n                AnsiFore.CYAN: (winterm.fore, WinColor.CYAN),\n                AnsiFore.WHITE: (winterm.fore, WinColor.GREY),\n                AnsiFore.RESET: (winterm.fore, ),\n                AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True),\n                AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True),\n                AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True),\n                AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True),\n                AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True),\n                AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True),\n                AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True),\n                AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True),\n                AnsiBack.BLACK: (winterm.back, WinColor.BLACK),\n                AnsiBack.RED: (winterm.back, WinColor.RED),\n                AnsiBack.GREEN: (winterm.back, WinColor.GREEN),\n                AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW),\n                AnsiBack.BLUE: (winterm.back, WinColor.BLUE),\n                AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA),\n                AnsiBack.CYAN: (winterm.back, WinColor.CYAN),\n                AnsiBack.WHITE: (winterm.back, WinColor.GREY),\n                AnsiBack.RESET: (winterm.back, ),\n                AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True),\n                AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True),\n                AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True),\n                AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True),\n                AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True),\n                AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True),\n                AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True),\n                AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True),\n            }\n        return dict()\n\n    def write(self, text):\n        if self.strip or self.convert:\n            self.write_and_convert(text)\n        else:\n            self.wrapped.write(text)\n            self.wrapped.flush()\n        if self.autoreset:\n            self.reset_all()\n\n\n    def reset_all(self):\n        if self.convert:\n            self.call_win32('m', (0,))\n        elif not self.strip and not self.stream.closed:\n            self.wrapped.write(Style.RESET_ALL)\n\n\n    def write_and_convert(self, text):\n        '''\n        Write the given text to our wrapped stream, stripping any ANSI\n        sequences from the text, and optionally converting them into win32\n        calls.\n        '''\n        cursor = 0\n        text = self.convert_osc(text)\n        for match in self.ANSI_CSI_RE.finditer(text):\n            start, end = match.span()\n            self.write_plain_text(text, cursor, start)\n            self.convert_ansi(*match.groups())\n            cursor = end\n        self.write_plain_text(text, cursor, len(text))\n\n\n    def write_plain_text(self, text, start, end):\n        if start < end:\n            self.wrapped.write(text[start:end])\n            self.wrapped.flush()\n\n\n    def convert_ansi(self, paramstring, command):\n        if self.convert:\n            params = self.extract_params(command, paramstring)\n            self.call_win32(command, params)\n\n\n    def extract_params(self, command, paramstring):\n        if command in 'Hf':\n            params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';'))\n            while len(params) < 2:\n                # defaults:\n                params = params + (1,)\n        else:\n            params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0)\n            if len(params) == 0:\n                # defaults:\n                if command in 'JKm':\n                    params = (0,)\n                elif command in 'ABCD':\n                    params = (1,)\n\n        return params\n\n\n    def call_win32(self, command, params):\n        if command == 'm':\n            for param in params:\n                if param in self.win32_calls:\n                    func_args = self.win32_calls[param]\n                    func = func_args[0]\n                    args = func_args[1:]\n                    kwargs = dict(on_stderr=self.on_stderr)\n                    func(*args, **kwargs)\n        elif command in 'J':\n            winterm.erase_screen(params[0], on_stderr=self.on_stderr)\n        elif command in 'K':\n            winterm.erase_line(params[0], on_stderr=self.on_stderr)\n        elif command in 'Hf':     # cursor position - absolute\n            winterm.set_cursor_position(params, on_stderr=self.on_stderr)\n        elif command in 'ABCD':   # cursor position - relative\n            n = params[0]\n            # A - up, B - down, C - forward, D - back\n            x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command]\n            winterm.cursor_adjust(x, y, on_stderr=self.on_stderr)\n\n\n    def convert_osc(self, text):\n        for match in self.ANSI_OSC_RE.finditer(text):\n            start, end = match.span()\n            text = text[:start] + text[end:]\n            paramstring, command = match.groups()\n            if command == BEL:\n                if paramstring.count(\";\") == 1:\n                    params = paramstring.split(\";\")\n                    # 0 - change title and icon (we will only change title)\n                    # 1 - change icon (we don't support this)\n                    # 2 - change title\n                    if params[0] in '02':\n                        winterm.set_title(params[1])\n        return text\n\n\n    def flush(self):\n        self.wrapped.flush()\n"
  },
  {
    "path": "libs/colorama/initialise.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nimport atexit\nimport contextlib\nimport sys\n\nfrom .ansitowin32 import AnsiToWin32\n\n\ndef _wipe_internal_state_for_tests():\n    global orig_stdout, orig_stderr\n    orig_stdout = None\n    orig_stderr = None\n\n    global wrapped_stdout, wrapped_stderr\n    wrapped_stdout = None\n    wrapped_stderr = None\n\n    global atexit_done\n    atexit_done = False\n\n    global fixed_windows_console\n    fixed_windows_console = False\n\n    try:\n        # no-op if it wasn't registered\n        atexit.unregister(reset_all)\n    except AttributeError:\n        # python 2: no atexit.unregister. Oh well, we did our best.\n        pass\n\n\ndef reset_all():\n    if AnsiToWin32 is not None:    # Issue #74: objects might become None at exit\n        AnsiToWin32(orig_stdout).reset_all()\n\n\ndef init(autoreset=False, convert=None, strip=None, wrap=True):\n\n    if not wrap and any([autoreset, convert, strip]):\n        raise ValueError('wrap=False conflicts with any other arg=True')\n\n    global wrapped_stdout, wrapped_stderr\n    global orig_stdout, orig_stderr\n\n    orig_stdout = sys.stdout\n    orig_stderr = sys.stderr\n\n    if sys.stdout is None:\n        wrapped_stdout = None\n    else:\n        sys.stdout = wrapped_stdout = \\\n            wrap_stream(orig_stdout, convert, strip, autoreset, wrap)\n    if sys.stderr is None:\n        wrapped_stderr = None\n    else:\n        sys.stderr = wrapped_stderr = \\\n            wrap_stream(orig_stderr, convert, strip, autoreset, wrap)\n\n    global atexit_done\n    if not atexit_done:\n        atexit.register(reset_all)\n        atexit_done = True\n\n\ndef deinit():\n    if orig_stdout is not None:\n        sys.stdout = orig_stdout\n    if orig_stderr is not None:\n        sys.stderr = orig_stderr\n\n\ndef just_fix_windows_console():\n    global fixed_windows_console\n\n    if sys.platform != \"win32\":\n        return\n    if fixed_windows_console:\n        return\n    if wrapped_stdout is not None or wrapped_stderr is not None:\n        # Someone already ran init() and it did stuff, so we won't second-guess them\n        return\n\n    # On newer versions of Windows, AnsiToWin32.__init__ will implicitly enable the\n    # native ANSI support in the console as a side-effect. We only need to actually\n    # replace sys.stdout/stderr if we're in the old-style conversion mode.\n    new_stdout = AnsiToWin32(sys.stdout, convert=None, strip=None, autoreset=False)\n    if new_stdout.convert:\n        sys.stdout = new_stdout\n    new_stderr = AnsiToWin32(sys.stderr, convert=None, strip=None, autoreset=False)\n    if new_stderr.convert:\n        sys.stderr = new_stderr\n\n    fixed_windows_console = True\n\n@contextlib.contextmanager\ndef colorama_text(*args, **kwargs):\n    init(*args, **kwargs)\n    try:\n        yield\n    finally:\n        deinit()\n\n\ndef reinit():\n    if wrapped_stdout is not None:\n        sys.stdout = wrapped_stdout\n    if wrapped_stderr is not None:\n        sys.stderr = wrapped_stderr\n\n\ndef wrap_stream(stream, convert, strip, autoreset, wrap):\n    if wrap:\n        wrapper = AnsiToWin32(stream,\n            convert=convert, strip=strip, autoreset=autoreset)\n        if wrapper.should_wrap():\n            stream = wrapper.stream\n    return stream\n\n\n# Use this for initial setup as well, to reduce code duplication\n_wipe_internal_state_for_tests()\n"
  },
  {
    "path": "libs/colorama/tests/__init__.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\n"
  },
  {
    "path": "libs/colorama/tests/ansi_test.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nimport sys\nfrom unittest import TestCase, main\n\nfrom ..ansi import Back, Fore, Style\nfrom ..ansitowin32 import AnsiToWin32\n\nstdout_orig = sys.stdout\nstderr_orig = sys.stderr\n\n\nclass AnsiTest(TestCase):\n\n    def setUp(self):\n        # sanity check: stdout should be a file or StringIO object.\n        # It will only be AnsiToWin32 if init() has previously wrapped it\n        self.assertNotEqual(type(sys.stdout), AnsiToWin32)\n        self.assertNotEqual(type(sys.stderr), AnsiToWin32)\n\n    def tearDown(self):\n        sys.stdout = stdout_orig\n        sys.stderr = stderr_orig\n\n\n    def testForeAttributes(self):\n        self.assertEqual(Fore.BLACK, '\\033[30m')\n        self.assertEqual(Fore.RED, '\\033[31m')\n        self.assertEqual(Fore.GREEN, '\\033[32m')\n        self.assertEqual(Fore.YELLOW, '\\033[33m')\n        self.assertEqual(Fore.BLUE, '\\033[34m')\n        self.assertEqual(Fore.MAGENTA, '\\033[35m')\n        self.assertEqual(Fore.CYAN, '\\033[36m')\n        self.assertEqual(Fore.WHITE, '\\033[37m')\n        self.assertEqual(Fore.RESET, '\\033[39m')\n\n        # Check the light, extended versions.\n        self.assertEqual(Fore.LIGHTBLACK_EX, '\\033[90m')\n        self.assertEqual(Fore.LIGHTRED_EX, '\\033[91m')\n        self.assertEqual(Fore.LIGHTGREEN_EX, '\\033[92m')\n        self.assertEqual(Fore.LIGHTYELLOW_EX, '\\033[93m')\n        self.assertEqual(Fore.LIGHTBLUE_EX, '\\033[94m')\n        self.assertEqual(Fore.LIGHTMAGENTA_EX, '\\033[95m')\n        self.assertEqual(Fore.LIGHTCYAN_EX, '\\033[96m')\n        self.assertEqual(Fore.LIGHTWHITE_EX, '\\033[97m')\n\n\n    def testBackAttributes(self):\n        self.assertEqual(Back.BLACK, '\\033[40m')\n        self.assertEqual(Back.RED, '\\033[41m')\n        self.assertEqual(Back.GREEN, '\\033[42m')\n        self.assertEqual(Back.YELLOW, '\\033[43m')\n        self.assertEqual(Back.BLUE, '\\033[44m')\n        self.assertEqual(Back.MAGENTA, '\\033[45m')\n        self.assertEqual(Back.CYAN, '\\033[46m')\n        self.assertEqual(Back.WHITE, '\\033[47m')\n        self.assertEqual(Back.RESET, '\\033[49m')\n\n        # Check the light, extended versions.\n        self.assertEqual(Back.LIGHTBLACK_EX, '\\033[100m')\n        self.assertEqual(Back.LIGHTRED_EX, '\\033[101m')\n        self.assertEqual(Back.LIGHTGREEN_EX, '\\033[102m')\n        self.assertEqual(Back.LIGHTYELLOW_EX, '\\033[103m')\n        self.assertEqual(Back.LIGHTBLUE_EX, '\\033[104m')\n        self.assertEqual(Back.LIGHTMAGENTA_EX, '\\033[105m')\n        self.assertEqual(Back.LIGHTCYAN_EX, '\\033[106m')\n        self.assertEqual(Back.LIGHTWHITE_EX, '\\033[107m')\n\n\n    def testStyleAttributes(self):\n        self.assertEqual(Style.DIM, '\\033[2m')\n        self.assertEqual(Style.NORMAL, '\\033[22m')\n        self.assertEqual(Style.BRIGHT, '\\033[1m')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "libs/colorama/tests/ansitowin32_test.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nfrom io import StringIO, TextIOWrapper\nfrom unittest import TestCase, main\ntry:\n    from contextlib import ExitStack\nexcept ImportError:\n    # python 2\n    from contextlib2 import ExitStack\n\ntry:\n    from unittest.mock import MagicMock, Mock, patch\nexcept ImportError:\n    from mock import MagicMock, Mock, patch\n\nfrom ..ansitowin32 import AnsiToWin32, StreamWrapper\nfrom ..win32 import ENABLE_VIRTUAL_TERMINAL_PROCESSING\nfrom .utils import osname\n\n\nclass StreamWrapperTest(TestCase):\n\n    def testIsAProxy(self):\n        mockStream = Mock()\n        wrapper = StreamWrapper(mockStream, None)\n        self.assertTrue( wrapper.random_attr is mockStream.random_attr )\n\n    def testDelegatesWrite(self):\n        mockStream = Mock()\n        mockConverter = Mock()\n        wrapper = StreamWrapper(mockStream, mockConverter)\n        wrapper.write('hello')\n        self.assertTrue(mockConverter.write.call_args, (('hello',), {}))\n\n    def testDelegatesContext(self):\n        mockConverter = Mock()\n        s = StringIO()\n        with StreamWrapper(s, mockConverter) as fp:\n            fp.write(u'hello')\n        self.assertTrue(s.closed)\n\n    def testProxyNoContextManager(self):\n        mockStream = MagicMock()\n        mockStream.__enter__.side_effect = AttributeError()\n        mockConverter = Mock()\n        with self.assertRaises(AttributeError) as excinfo:\n            with StreamWrapper(mockStream, mockConverter) as wrapper:\n                wrapper.write('hello')\n\n    def test_closed_shouldnt_raise_on_closed_stream(self):\n        stream = StringIO()\n        stream.close()\n        wrapper = StreamWrapper(stream, None)\n        self.assertEqual(wrapper.closed, True)\n\n    def test_closed_shouldnt_raise_on_detached_stream(self):\n        stream = TextIOWrapper(StringIO())\n        stream.detach()\n        wrapper = StreamWrapper(stream, None)\n        self.assertEqual(wrapper.closed, True)\n\nclass AnsiToWin32Test(TestCase):\n\n    def testInit(self):\n        mockStdout = Mock()\n        auto = Mock()\n        stream = AnsiToWin32(mockStdout, autoreset=auto)\n        self.assertEqual(stream.wrapped, mockStdout)\n        self.assertEqual(stream.autoreset, auto)\n\n    @patch('colorama.ansitowin32.winterm', None)\n    @patch('colorama.ansitowin32.winapi_test', lambda *_: True)\n    def testStripIsTrueOnWindows(self):\n        with osname('nt'):\n            mockStdout = Mock()\n            stream = AnsiToWin32(mockStdout)\n            self.assertTrue(stream.strip)\n\n    def testStripIsFalseOffWindows(self):\n        with osname('posix'):\n            mockStdout = Mock(closed=False)\n            stream = AnsiToWin32(mockStdout)\n            self.assertFalse(stream.strip)\n\n    def testWriteStripsAnsi(self):\n        mockStdout = Mock()\n        stream = AnsiToWin32(mockStdout)\n        stream.wrapped = Mock()\n        stream.write_and_convert = Mock()\n        stream.strip = True\n\n        stream.write('abc')\n\n        self.assertFalse(stream.wrapped.write.called)\n        self.assertEqual(stream.write_and_convert.call_args, (('abc',), {}))\n\n    def testWriteDoesNotStripAnsi(self):\n        mockStdout = Mock()\n        stream = AnsiToWin32(mockStdout)\n        stream.wrapped = Mock()\n        stream.write_and_convert = Mock()\n        stream.strip = False\n        stream.convert = False\n\n        stream.write('abc')\n\n        self.assertFalse(stream.write_and_convert.called)\n        self.assertEqual(stream.wrapped.write.call_args, (('abc',), {}))\n\n    def assert_autoresets(self, convert, autoreset=True):\n        stream = AnsiToWin32(Mock())\n        stream.convert = convert\n        stream.reset_all = Mock()\n        stream.autoreset = autoreset\n        stream.winterm = Mock()\n\n        stream.write('abc')\n\n        self.assertEqual(stream.reset_all.called, autoreset)\n\n    def testWriteAutoresets(self):\n        self.assert_autoresets(convert=True)\n        self.assert_autoresets(convert=False)\n        self.assert_autoresets(convert=True, autoreset=False)\n        self.assert_autoresets(convert=False, autoreset=False)\n\n    def testWriteAndConvertWritesPlainText(self):\n        stream = AnsiToWin32(Mock())\n        stream.write_and_convert( 'abc' )\n        self.assertEqual( stream.wrapped.write.call_args, (('abc',), {}) )\n\n    def testWriteAndConvertStripsAllValidAnsi(self):\n        stream = AnsiToWin32(Mock())\n        stream.call_win32 = Mock()\n        data = [\n            'abc\\033[mdef',\n            'abc\\033[0mdef',\n            'abc\\033[2mdef',\n            'abc\\033[02mdef',\n            'abc\\033[002mdef',\n            'abc\\033[40mdef',\n            'abc\\033[040mdef',\n            'abc\\033[0;1mdef',\n            'abc\\033[40;50mdef',\n            'abc\\033[50;30;40mdef',\n            'abc\\033[Adef',\n            'abc\\033[0Gdef',\n            'abc\\033[1;20;128Hdef',\n        ]\n        for datum in data:\n            stream.wrapped.write.reset_mock()\n            stream.write_and_convert( datum )\n            self.assertEqual(\n               [args[0] for args in stream.wrapped.write.call_args_list],\n               [ ('abc',), ('def',) ]\n            )\n\n    def testWriteAndConvertSkipsEmptySnippets(self):\n        stream = AnsiToWin32(Mock())\n        stream.call_win32 = Mock()\n        stream.write_and_convert( '\\033[40m\\033[41m' )\n        self.assertFalse( stream.wrapped.write.called )\n\n    def testWriteAndConvertCallsWin32WithParamsAndCommand(self):\n        stream = AnsiToWin32(Mock())\n        stream.convert = True\n        stream.call_win32 = Mock()\n        stream.extract_params = Mock(return_value='params')\n        data = {\n            'abc\\033[adef':         ('a', 'params'),\n            'abc\\033[;;bdef':       ('b', 'params'),\n            'abc\\033[0cdef':        ('c', 'params'),\n            'abc\\033[;;0;;Gdef':    ('G', 'params'),\n            'abc\\033[1;20;128Hdef': ('H', 'params'),\n        }\n        for datum, expected in data.items():\n            stream.call_win32.reset_mock()\n            stream.write_and_convert( datum )\n            self.assertEqual( stream.call_win32.call_args[0], expected )\n\n    def test_reset_all_shouldnt_raise_on_closed_orig_stdout(self):\n        stream = StringIO()\n        converter = AnsiToWin32(stream)\n        stream.close()\n\n        converter.reset_all()\n\n    def test_wrap_shouldnt_raise_on_closed_orig_stdout(self):\n        stream = StringIO()\n        stream.close()\n        with \\\n            patch(\"colorama.ansitowin32.os.name\", \"nt\"), \\\n            patch(\"colorama.ansitowin32.winapi_test\", lambda: True):\n                converter = AnsiToWin32(stream)\n        self.assertTrue(converter.strip)\n        self.assertFalse(converter.convert)\n\n    def test_wrap_shouldnt_raise_on_missing_closed_attr(self):\n        with \\\n            patch(\"colorama.ansitowin32.os.name\", \"nt\"), \\\n            patch(\"colorama.ansitowin32.winapi_test\", lambda: True):\n                converter = AnsiToWin32(object())\n        self.assertTrue(converter.strip)\n        self.assertFalse(converter.convert)\n\n    def testExtractParams(self):\n        stream = AnsiToWin32(Mock())\n        data = {\n            '':               (0,),\n            ';;':             (0,),\n            '2':              (2,),\n            ';;002;;':        (2,),\n            '0;1':            (0, 1),\n            ';;003;;456;;':   (3, 456),\n            '11;22;33;44;55': (11, 22, 33, 44, 55),\n        }\n        for datum, expected in data.items():\n            self.assertEqual(stream.extract_params('m', datum), expected)\n\n    def testCallWin32UsesLookup(self):\n        listener = Mock()\n        stream = AnsiToWin32(listener)\n        stream.win32_calls = {\n            1: (lambda *_, **__: listener(11),),\n            2: (lambda *_, **__: listener(22),),\n            3: (lambda *_, **__: listener(33),),\n        }\n        stream.call_win32('m', (3, 1, 99, 2))\n        self.assertEqual(\n            [a[0][0] for a in listener.call_args_list],\n            [33, 11, 22] )\n\n    def test_osc_codes(self):\n        mockStdout = Mock()\n        stream = AnsiToWin32(mockStdout, convert=True)\n        with patch('colorama.ansitowin32.winterm') as winterm:\n            data = [\n                '\\033]0\\x07',                      # missing arguments\n                '\\033]0;foo\\x08',                  # wrong OSC command\n                '\\033]0;colorama_test_title\\x07',  # should work\n                '\\033]1;colorama_test_title\\x07',  # wrong set command\n                '\\033]2;colorama_test_title\\x07',  # should work\n                '\\033]' + ';' * 64 + '\\x08',       # see issue #247\n            ]\n            for code in data:\n                stream.write(code)\n            self.assertEqual(winterm.set_title.call_count, 2)\n\n    def test_native_windows_ansi(self):\n        with ExitStack() as stack:\n            def p(a, b):\n                stack.enter_context(patch(a, b, create=True))\n            # Pretend to be on Windows\n            p(\"colorama.ansitowin32.os.name\", \"nt\")\n            p(\"colorama.ansitowin32.winapi_test\", lambda: True)\n            p(\"colorama.win32.winapi_test\", lambda: True)\n            p(\"colorama.winterm.win32.windll\", \"non-None\")\n            p(\"colorama.winterm.get_osfhandle\", lambda _: 1234)\n\n            # Pretend that our mock stream has native ANSI support\n            p(\n                \"colorama.winterm.win32.GetConsoleMode\",\n                lambda _: ENABLE_VIRTUAL_TERMINAL_PROCESSING,\n            )\n            SetConsoleMode = Mock()\n            p(\"colorama.winterm.win32.SetConsoleMode\", SetConsoleMode)\n\n            stdout = Mock()\n            stdout.closed = False\n            stdout.isatty.return_value = True\n            stdout.fileno.return_value = 1\n\n            # Our fake console says it has native vt support, so AnsiToWin32 should\n            # enable that support and do nothing else.\n            stream = AnsiToWin32(stdout)\n            SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING)\n            self.assertFalse(stream.strip)\n            self.assertFalse(stream.convert)\n            self.assertFalse(stream.should_wrap())\n\n            # Now let's pretend we're on an old Windows console, that doesn't have\n            # native ANSI support.\n            p(\"colorama.winterm.win32.GetConsoleMode\", lambda _: 0)\n            SetConsoleMode = Mock()\n            p(\"colorama.winterm.win32.SetConsoleMode\", SetConsoleMode)\n\n            stream = AnsiToWin32(stdout)\n            SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING)\n            self.assertTrue(stream.strip)\n            self.assertTrue(stream.convert)\n            self.assertTrue(stream.should_wrap())\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "libs/colorama/tests/initialise_test.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nimport sys\nfrom unittest import TestCase, main, skipUnless\n\ntry:\n    from unittest.mock import patch, Mock\nexcept ImportError:\n    from mock import patch, Mock\n\nfrom ..ansitowin32 import StreamWrapper\nfrom ..initialise import init, just_fix_windows_console, _wipe_internal_state_for_tests\nfrom .utils import osname, replace_by\n\norig_stdout = sys.stdout\norig_stderr = sys.stderr\n\n\nclass InitTest(TestCase):\n\n    @skipUnless(sys.stdout.isatty(), \"sys.stdout is not a tty\")\n    def setUp(self):\n        # sanity check\n        self.assertNotWrapped()\n\n    def tearDown(self):\n        _wipe_internal_state_for_tests()\n        sys.stdout = orig_stdout\n        sys.stderr = orig_stderr\n\n    def assertWrapped(self):\n        self.assertIsNot(sys.stdout, orig_stdout, 'stdout should be wrapped')\n        self.assertIsNot(sys.stderr, orig_stderr, 'stderr should be wrapped')\n        self.assertTrue(isinstance(sys.stdout, StreamWrapper),\n            'bad stdout wrapper')\n        self.assertTrue(isinstance(sys.stderr, StreamWrapper),\n            'bad stderr wrapper')\n\n    def assertNotWrapped(self):\n        self.assertIs(sys.stdout, orig_stdout, 'stdout should not be wrapped')\n        self.assertIs(sys.stderr, orig_stderr, 'stderr should not be wrapped')\n\n    @patch('colorama.initialise.reset_all')\n    @patch('colorama.ansitowin32.winapi_test', lambda *_: True)\n    @patch('colorama.ansitowin32.enable_vt_processing', lambda *_: False)\n    def testInitWrapsOnWindows(self, _):\n        with osname(\"nt\"):\n            init()\n            self.assertWrapped()\n\n    @patch('colorama.initialise.reset_all')\n    @patch('colorama.ansitowin32.winapi_test', lambda *_: False)\n    def testInitDoesntWrapOnEmulatedWindows(self, _):\n        with osname(\"nt\"):\n            init()\n            self.assertNotWrapped()\n\n    def testInitDoesntWrapOnNonWindows(self):\n        with osname(\"posix\"):\n            init()\n            self.assertNotWrapped()\n\n    def testInitDoesntWrapIfNone(self):\n        with replace_by(None):\n            init()\n            # We can't use assertNotWrapped here because replace_by(None)\n            # changes stdout/stderr already.\n            self.assertIsNone(sys.stdout)\n            self.assertIsNone(sys.stderr)\n\n    def testInitAutoresetOnWrapsOnAllPlatforms(self):\n        with osname(\"posix\"):\n            init(autoreset=True)\n            self.assertWrapped()\n\n    def testInitWrapOffDoesntWrapOnWindows(self):\n        with osname(\"nt\"):\n            init(wrap=False)\n            self.assertNotWrapped()\n\n    def testInitWrapOffIncompatibleWithAutoresetOn(self):\n        self.assertRaises(ValueError, lambda: init(autoreset=True, wrap=False))\n\n    @patch('colorama.win32.SetConsoleTextAttribute')\n    @patch('colorama.initialise.AnsiToWin32')\n    def testAutoResetPassedOn(self, mockATW32, _):\n        with osname(\"nt\"):\n            init(autoreset=True)\n            self.assertEqual(len(mockATW32.call_args_list), 2)\n            self.assertEqual(mockATW32.call_args_list[1][1]['autoreset'], True)\n            self.assertEqual(mockATW32.call_args_list[0][1]['autoreset'], True)\n\n    @patch('colorama.initialise.AnsiToWin32')\n    def testAutoResetChangeable(self, mockATW32):\n        with osname(\"nt\"):\n            init()\n\n            init(autoreset=True)\n            self.assertEqual(len(mockATW32.call_args_list), 4)\n            self.assertEqual(mockATW32.call_args_list[2][1]['autoreset'], True)\n            self.assertEqual(mockATW32.call_args_list[3][1]['autoreset'], True)\n\n            init()\n            self.assertEqual(len(mockATW32.call_args_list), 6)\n            self.assertEqual(\n                mockATW32.call_args_list[4][1]['autoreset'], False)\n            self.assertEqual(\n                mockATW32.call_args_list[5][1]['autoreset'], False)\n\n\n    @patch('colorama.initialise.atexit.register')\n    def testAtexitRegisteredOnlyOnce(self, mockRegister):\n        init()\n        self.assertTrue(mockRegister.called)\n        mockRegister.reset_mock()\n        init()\n        self.assertFalse(mockRegister.called)\n\n\nclass JustFixWindowsConsoleTest(TestCase):\n    def _reset(self):\n        _wipe_internal_state_for_tests()\n        sys.stdout = orig_stdout\n        sys.stderr = orig_stderr\n\n    def tearDown(self):\n        self._reset()\n\n    @patch(\"colorama.ansitowin32.winapi_test\", lambda: True)\n    def testJustFixWindowsConsole(self):\n        if sys.platform != \"win32\":\n            # just_fix_windows_console should be a no-op\n            just_fix_windows_console()\n            self.assertIs(sys.stdout, orig_stdout)\n            self.assertIs(sys.stderr, orig_stderr)\n        else:\n            def fake_std():\n                # Emulate stdout=not a tty, stderr=tty\n                # to check that we handle both cases correctly\n                stdout = Mock()\n                stdout.closed = False\n                stdout.isatty.return_value = False\n                stdout.fileno.return_value = 1\n                sys.stdout = stdout\n\n                stderr = Mock()\n                stderr.closed = False\n                stderr.isatty.return_value = True\n                stderr.fileno.return_value = 2\n                sys.stderr = stderr\n\n            for native_ansi in [False, True]:\n                with patch(\n                    'colorama.ansitowin32.enable_vt_processing',\n                    lambda *_: native_ansi\n                ):\n                    self._reset()\n                    fake_std()\n\n                    # Regular single-call test\n                    prev_stdout = sys.stdout\n                    prev_stderr = sys.stderr\n                    just_fix_windows_console()\n                    self.assertIs(sys.stdout, prev_stdout)\n                    if native_ansi:\n                        self.assertIs(sys.stderr, prev_stderr)\n                    else:\n                        self.assertIsNot(sys.stderr, prev_stderr)\n\n                    # second call without resetting is always a no-op\n                    prev_stdout = sys.stdout\n                    prev_stderr = sys.stderr\n                    just_fix_windows_console()\n                    self.assertIs(sys.stdout, prev_stdout)\n                    self.assertIs(sys.stderr, prev_stderr)\n\n                    self._reset()\n                    fake_std()\n\n                    # If init() runs first, just_fix_windows_console should be a no-op\n                    init()\n                    prev_stdout = sys.stdout\n                    prev_stderr = sys.stderr\n                    just_fix_windows_console()\n                    self.assertIs(prev_stdout, sys.stdout)\n                    self.assertIs(prev_stderr, sys.stderr)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "libs/colorama/tests/isatty_test.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nimport sys\nfrom unittest import TestCase, main\n\nfrom ..ansitowin32 import StreamWrapper, AnsiToWin32\nfrom .utils import pycharm, replace_by, replace_original_by, StreamTTY, StreamNonTTY\n\n\ndef is_a_tty(stream):\n    return StreamWrapper(stream, None).isatty()\n\nclass IsattyTest(TestCase):\n\n    def test_TTY(self):\n        tty = StreamTTY()\n        self.assertTrue(is_a_tty(tty))\n        with pycharm():\n            self.assertTrue(is_a_tty(tty))\n\n    def test_nonTTY(self):\n        non_tty = StreamNonTTY()\n        self.assertFalse(is_a_tty(non_tty))\n        with pycharm():\n            self.assertFalse(is_a_tty(non_tty))\n\n    def test_withPycharm(self):\n        with pycharm():\n            self.assertTrue(is_a_tty(sys.stderr))\n            self.assertTrue(is_a_tty(sys.stdout))\n\n    def test_withPycharmTTYOverride(self):\n        tty = StreamTTY()\n        with pycharm(), replace_by(tty):\n            self.assertTrue(is_a_tty(tty))\n\n    def test_withPycharmNonTTYOverride(self):\n        non_tty = StreamNonTTY()\n        with pycharm(), replace_by(non_tty):\n            self.assertFalse(is_a_tty(non_tty))\n\n    def test_withPycharmNoneOverride(self):\n        with pycharm():\n            with replace_by(None), replace_original_by(None):\n                self.assertFalse(is_a_tty(None))\n                self.assertFalse(is_a_tty(StreamNonTTY()))\n                self.assertTrue(is_a_tty(StreamTTY()))\n\n    def test_withPycharmStreamWrapped(self):\n        with pycharm():\n            self.assertTrue(AnsiToWin32(StreamTTY()).stream.isatty())\n            self.assertFalse(AnsiToWin32(StreamNonTTY()).stream.isatty())\n            self.assertTrue(AnsiToWin32(sys.stdout).stream.isatty())\n            self.assertTrue(AnsiToWin32(sys.stderr).stream.isatty())\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "libs/colorama/tests/utils.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nfrom contextlib import contextmanager\nfrom io import StringIO\nimport sys\nimport os\n\n\nclass StreamTTY(StringIO):\n    def isatty(self):\n        return True\n\nclass StreamNonTTY(StringIO):\n    def isatty(self):\n        return False\n\n@contextmanager\ndef osname(name):\n    orig = os.name\n    os.name = name\n    yield\n    os.name = orig\n\n@contextmanager\ndef replace_by(stream):\n    orig_stdout = sys.stdout\n    orig_stderr = sys.stderr\n    sys.stdout = stream\n    sys.stderr = stream\n    yield\n    sys.stdout = orig_stdout\n    sys.stderr = orig_stderr\n\n@contextmanager\ndef replace_original_by(stream):\n    orig_stdout = sys.__stdout__\n    orig_stderr = sys.__stderr__\n    sys.__stdout__ = stream\n    sys.__stderr__ = stream\n    yield\n    sys.__stdout__ = orig_stdout\n    sys.__stderr__ = orig_stderr\n\n@contextmanager\ndef pycharm():\n    os.environ[\"PYCHARM_HOSTED\"] = \"1\"\n    non_tty = StreamNonTTY()\n    with replace_by(non_tty), replace_original_by(non_tty):\n        yield\n    del os.environ[\"PYCHARM_HOSTED\"]\n"
  },
  {
    "path": "libs/colorama/tests/winterm_test.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nimport sys\nfrom unittest import TestCase, main, skipUnless\n\ntry:\n    from unittest.mock import Mock, patch\nexcept ImportError:\n    from mock import Mock, patch\n\nfrom ..winterm import WinColor, WinStyle, WinTerm\n\n\nclass WinTermTest(TestCase):\n\n    @patch('colorama.winterm.win32')\n    def testInit(self, mockWin32):\n        mockAttr = Mock()\n        mockAttr.wAttributes = 7 + 6 * 16 + 8\n        mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr\n        term = WinTerm()\n        self.assertEqual(term._fore, 7)\n        self.assertEqual(term._back, 6)\n        self.assertEqual(term._style, 8)\n\n    @skipUnless(sys.platform.startswith(\"win\"), \"requires Windows\")\n    def testGetAttrs(self):\n        term = WinTerm()\n\n        term._fore = 0\n        term._back = 0\n        term._style = 0\n        self.assertEqual(term.get_attrs(), 0)\n\n        term._fore = WinColor.YELLOW\n        self.assertEqual(term.get_attrs(), WinColor.YELLOW)\n\n        term._back = WinColor.MAGENTA\n        self.assertEqual(\n            term.get_attrs(),\n            WinColor.YELLOW + WinColor.MAGENTA * 16)\n\n        term._style = WinStyle.BRIGHT\n        self.assertEqual(\n            term.get_attrs(),\n            WinColor.YELLOW + WinColor.MAGENTA * 16 + WinStyle.BRIGHT)\n\n    @patch('colorama.winterm.win32')\n    def testResetAll(self, mockWin32):\n        mockAttr = Mock()\n        mockAttr.wAttributes = 1 + 2 * 16 + 8\n        mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr\n        term = WinTerm()\n\n        term.set_console = Mock()\n        term._fore = -1\n        term._back = -1\n        term._style = -1\n\n        term.reset_all()\n\n        self.assertEqual(term._fore, 1)\n        self.assertEqual(term._back, 2)\n        self.assertEqual(term._style, 8)\n        self.assertEqual(term.set_console.called, True)\n\n    @skipUnless(sys.platform.startswith(\"win\"), \"requires Windows\")\n    def testFore(self):\n        term = WinTerm()\n        term.set_console = Mock()\n        term._fore = 0\n\n        term.fore(5)\n\n        self.assertEqual(term._fore, 5)\n        self.assertEqual(term.set_console.called, True)\n\n    @skipUnless(sys.platform.startswith(\"win\"), \"requires Windows\")\n    def testBack(self):\n        term = WinTerm()\n        term.set_console = Mock()\n        term._back = 0\n\n        term.back(5)\n\n        self.assertEqual(term._back, 5)\n        self.assertEqual(term.set_console.called, True)\n\n    @skipUnless(sys.platform.startswith(\"win\"), \"requires Windows\")\n    def testStyle(self):\n        term = WinTerm()\n        term.set_console = Mock()\n        term._style = 0\n\n        term.style(22)\n\n        self.assertEqual(term._style, 22)\n        self.assertEqual(term.set_console.called, True)\n\n    @patch('colorama.winterm.win32')\n    def testSetConsole(self, mockWin32):\n        mockAttr = Mock()\n        mockAttr.wAttributes = 0\n        mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr\n        term = WinTerm()\n        term.windll = Mock()\n\n        term.set_console()\n\n        self.assertEqual(\n            mockWin32.SetConsoleTextAttribute.call_args,\n            ((mockWin32.STDOUT, term.get_attrs()), {})\n        )\n\n    @patch('colorama.winterm.win32')\n    def testSetConsoleOnStderr(self, mockWin32):\n        mockAttr = Mock()\n        mockAttr.wAttributes = 0\n        mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr\n        term = WinTerm()\n        term.windll = Mock()\n\n        term.set_console(on_stderr=True)\n\n        self.assertEqual(\n            mockWin32.SetConsoleTextAttribute.call_args,\n            ((mockWin32.STDERR, term.get_attrs()), {})\n        )\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "libs/colorama/win32.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\n\n# from winbase.h\nSTDOUT = -11\nSTDERR = -12\n\nENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004\n\ntry:\n    import ctypes\n    from ctypes import LibraryLoader\n    windll = LibraryLoader(ctypes.WinDLL)\n    from ctypes import wintypes\nexcept (AttributeError, ImportError):\n    windll = None\n    SetConsoleTextAttribute = lambda *_: None\n    winapi_test = lambda *_: None\nelse:\n    from ctypes import byref, Structure, c_char, POINTER\n\n    COORD = wintypes._COORD\n\n    class CONSOLE_SCREEN_BUFFER_INFO(Structure):\n        \"\"\"struct in wincon.h.\"\"\"\n        _fields_ = [\n            (\"dwSize\", COORD),\n            (\"dwCursorPosition\", COORD),\n            (\"wAttributes\", wintypes.WORD),\n            (\"srWindow\", wintypes.SMALL_RECT),\n            (\"dwMaximumWindowSize\", COORD),\n        ]\n        def __str__(self):\n            return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % (\n                self.dwSize.Y, self.dwSize.X\n                , self.dwCursorPosition.Y, self.dwCursorPosition.X\n                , self.wAttributes\n                , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right\n                , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X\n            )\n\n    _GetStdHandle = windll.kernel32.GetStdHandle\n    _GetStdHandle.argtypes = [\n        wintypes.DWORD,\n    ]\n    _GetStdHandle.restype = wintypes.HANDLE\n\n    _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo\n    _GetConsoleScreenBufferInfo.argtypes = [\n        wintypes.HANDLE,\n        POINTER(CONSOLE_SCREEN_BUFFER_INFO),\n    ]\n    _GetConsoleScreenBufferInfo.restype = wintypes.BOOL\n\n    _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute\n    _SetConsoleTextAttribute.argtypes = [\n        wintypes.HANDLE,\n        wintypes.WORD,\n    ]\n    _SetConsoleTextAttribute.restype = wintypes.BOOL\n\n    _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition\n    _SetConsoleCursorPosition.argtypes = [\n        wintypes.HANDLE,\n        COORD,\n    ]\n    _SetConsoleCursorPosition.restype = wintypes.BOOL\n\n    _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA\n    _FillConsoleOutputCharacterA.argtypes = [\n        wintypes.HANDLE,\n        c_char,\n        wintypes.DWORD,\n        COORD,\n        POINTER(wintypes.DWORD),\n    ]\n    _FillConsoleOutputCharacterA.restype = wintypes.BOOL\n\n    _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute\n    _FillConsoleOutputAttribute.argtypes = [\n        wintypes.HANDLE,\n        wintypes.WORD,\n        wintypes.DWORD,\n        COORD,\n        POINTER(wintypes.DWORD),\n    ]\n    _FillConsoleOutputAttribute.restype = wintypes.BOOL\n\n    _SetConsoleTitleW = windll.kernel32.SetConsoleTitleW\n    _SetConsoleTitleW.argtypes = [\n        wintypes.LPCWSTR\n    ]\n    _SetConsoleTitleW.restype = wintypes.BOOL\n\n    _GetConsoleMode = windll.kernel32.GetConsoleMode\n    _GetConsoleMode.argtypes = [\n        wintypes.HANDLE,\n        POINTER(wintypes.DWORD)\n    ]\n    _GetConsoleMode.restype = wintypes.BOOL\n\n    _SetConsoleMode = windll.kernel32.SetConsoleMode\n    _SetConsoleMode.argtypes = [\n        wintypes.HANDLE,\n        wintypes.DWORD\n    ]\n    _SetConsoleMode.restype = wintypes.BOOL\n\n    def _winapi_test(handle):\n        csbi = CONSOLE_SCREEN_BUFFER_INFO()\n        success = _GetConsoleScreenBufferInfo(\n            handle, byref(csbi))\n        return bool(success)\n\n    def winapi_test():\n        return any(_winapi_test(h) for h in\n                   (_GetStdHandle(STDOUT), _GetStdHandle(STDERR)))\n\n    def GetConsoleScreenBufferInfo(stream_id=STDOUT):\n        handle = _GetStdHandle(stream_id)\n        csbi = CONSOLE_SCREEN_BUFFER_INFO()\n        success = _GetConsoleScreenBufferInfo(\n            handle, byref(csbi))\n        return csbi\n\n    def SetConsoleTextAttribute(stream_id, attrs):\n        handle = _GetStdHandle(stream_id)\n        return _SetConsoleTextAttribute(handle, attrs)\n\n    def SetConsoleCursorPosition(stream_id, position, adjust=True):\n        position = COORD(*position)\n        # If the position is out of range, do nothing.\n        if position.Y <= 0 or position.X <= 0:\n            return\n        # Adjust for Windows' SetConsoleCursorPosition:\n        #    1. being 0-based, while ANSI is 1-based.\n        #    2. expecting (x,y), while ANSI uses (y,x).\n        adjusted_position = COORD(position.Y - 1, position.X - 1)\n        if adjust:\n            # Adjust for viewport's scroll position\n            sr = GetConsoleScreenBufferInfo(STDOUT).srWindow\n            adjusted_position.Y += sr.Top\n            adjusted_position.X += sr.Left\n        # Resume normal processing\n        handle = _GetStdHandle(stream_id)\n        return _SetConsoleCursorPosition(handle, adjusted_position)\n\n    def FillConsoleOutputCharacter(stream_id, char, length, start):\n        handle = _GetStdHandle(stream_id)\n        char = c_char(char.encode())\n        length = wintypes.DWORD(length)\n        num_written = wintypes.DWORD(0)\n        # Note that this is hard-coded for ANSI (vs wide) bytes.\n        success = _FillConsoleOutputCharacterA(\n            handle, char, length, start, byref(num_written))\n        return num_written.value\n\n    def FillConsoleOutputAttribute(stream_id, attr, length, start):\n        ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )'''\n        handle = _GetStdHandle(stream_id)\n        attribute = wintypes.WORD(attr)\n        length = wintypes.DWORD(length)\n        num_written = wintypes.DWORD(0)\n        # Note that this is hard-coded for ANSI (vs wide) bytes.\n        return _FillConsoleOutputAttribute(\n            handle, attribute, length, start, byref(num_written))\n\n    def SetConsoleTitle(title):\n        return _SetConsoleTitleW(title)\n\n    def GetConsoleMode(handle):\n        mode = wintypes.DWORD()\n        success = _GetConsoleMode(handle, byref(mode))\n        if not success:\n            raise ctypes.WinError()\n        return mode.value\n\n    def SetConsoleMode(handle, mode):\n        success = _SetConsoleMode(handle, mode)\n        if not success:\n            raise ctypes.WinError()\n"
  },
  {
    "path": "libs/colorama/winterm.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\ntry:\n    from msvcrt import get_osfhandle\nexcept ImportError:\n    def get_osfhandle(_):\n        raise OSError(\"This isn't windows!\")\n\n\nfrom . import win32\n\n# from wincon.h\nclass WinColor(object):\n    BLACK   = 0\n    BLUE    = 1\n    GREEN   = 2\n    CYAN    = 3\n    RED     = 4\n    MAGENTA = 5\n    YELLOW  = 6\n    GREY    = 7\n\n# from wincon.h\nclass WinStyle(object):\n    NORMAL              = 0x00 # dim text, dim background\n    BRIGHT              = 0x08 # bright text, dim background\n    BRIGHT_BACKGROUND   = 0x80 # dim text, bright background\n\nclass WinTerm(object):\n\n    def __init__(self):\n        self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes\n        self.set_attrs(self._default)\n        self._default_fore = self._fore\n        self._default_back = self._back\n        self._default_style = self._style\n        # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style.\n        # So that LIGHT_EX colors and BRIGHT style do not clobber each other,\n        # we track them separately, since LIGHT_EX is overwritten by Fore/Back\n        # and BRIGHT is overwritten by Style codes.\n        self._light = 0\n\n    def get_attrs(self):\n        return self._fore + self._back * 16 + (self._style | self._light)\n\n    def set_attrs(self, value):\n        self._fore = value & 7\n        self._back = (value >> 4) & 7\n        self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND)\n\n    def reset_all(self, on_stderr=None):\n        self.set_attrs(self._default)\n        self.set_console(attrs=self._default)\n        self._light = 0\n\n    def fore(self, fore=None, light=False, on_stderr=False):\n        if fore is None:\n            fore = self._default_fore\n        self._fore = fore\n        # Emulate LIGHT_EX with BRIGHT Style\n        if light:\n            self._light |= WinStyle.BRIGHT\n        else:\n            self._light &= ~WinStyle.BRIGHT\n        self.set_console(on_stderr=on_stderr)\n\n    def back(self, back=None, light=False, on_stderr=False):\n        if back is None:\n            back = self._default_back\n        self._back = back\n        # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style\n        if light:\n            self._light |= WinStyle.BRIGHT_BACKGROUND\n        else:\n            self._light &= ~WinStyle.BRIGHT_BACKGROUND\n        self.set_console(on_stderr=on_stderr)\n\n    def style(self, style=None, on_stderr=False):\n        if style is None:\n            style = self._default_style\n        self._style = style\n        self.set_console(on_stderr=on_stderr)\n\n    def set_console(self, attrs=None, on_stderr=False):\n        if attrs is None:\n            attrs = self.get_attrs()\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        win32.SetConsoleTextAttribute(handle, attrs)\n\n    def get_position(self, handle):\n        position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition\n        # Because Windows coordinates are 0-based,\n        # and win32.SetConsoleCursorPosition expects 1-based.\n        position.X += 1\n        position.Y += 1\n        return position\n\n    def set_cursor_position(self, position=None, on_stderr=False):\n        if position is None:\n            # I'm not currently tracking the position, so there is no default.\n            # position = self.get_position()\n            return\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        win32.SetConsoleCursorPosition(handle, position)\n\n    def cursor_adjust(self, x, y, on_stderr=False):\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        position = self.get_position(handle)\n        adjusted_position = (position.Y + y, position.X + x)\n        win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False)\n\n    def erase_screen(self, mode=0, on_stderr=False):\n        # 0 should clear from the cursor to the end of the screen.\n        # 1 should clear from the cursor to the beginning of the screen.\n        # 2 should clear the entire screen, and move cursor to (1,1)\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        csbi = win32.GetConsoleScreenBufferInfo(handle)\n        # get the number of character cells in the current buffer\n        cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y\n        # get number of character cells before current cursor position\n        cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X\n        if mode == 0:\n            from_coord = csbi.dwCursorPosition\n            cells_to_erase = cells_in_screen - cells_before_cursor\n        elif mode == 1:\n            from_coord = win32.COORD(0, 0)\n            cells_to_erase = cells_before_cursor\n        elif mode == 2:\n            from_coord = win32.COORD(0, 0)\n            cells_to_erase = cells_in_screen\n        else:\n            # invalid mode\n            return\n        # fill the entire screen with blanks\n        win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord)\n        # now set the buffer's attributes accordingly\n        win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord)\n        if mode == 2:\n            # put the cursor where needed\n            win32.SetConsoleCursorPosition(handle, (1, 1))\n\n    def erase_line(self, mode=0, on_stderr=False):\n        # 0 should clear from the cursor to the end of the line.\n        # 1 should clear from the cursor to the beginning of the line.\n        # 2 should clear the entire line.\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        csbi = win32.GetConsoleScreenBufferInfo(handle)\n        if mode == 0:\n            from_coord = csbi.dwCursorPosition\n            cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X\n        elif mode == 1:\n            from_coord = win32.COORD(0, csbi.dwCursorPosition.Y)\n            cells_to_erase = csbi.dwCursorPosition.X\n        elif mode == 2:\n            from_coord = win32.COORD(0, csbi.dwCursorPosition.Y)\n            cells_to_erase = csbi.dwSize.X\n        else:\n            # invalid mode\n            return\n        # fill the entire screen with blanks\n        win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord)\n        # now set the buffer's attributes accordingly\n        win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord)\n\n    def set_title(self, title):\n        win32.SetConsoleTitle(title)\n\n\ndef enable_vt_processing(fd):\n    if win32.windll is None or not win32.winapi_test():\n        return False\n\n    try:\n        handle = get_osfhandle(fd)\n        mode = win32.GetConsoleMode(handle)\n        win32.SetConsoleMode(\n            handle,\n            mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING,\n        )\n\n        mode = win32.GetConsoleMode(handle)\n        if mode & win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING:\n            return True\n    # Can get TypeError in testsuite where 'fd' is a Mock()\n    except (OSError, TypeError):\n        return False\n"
  },
  {
    "path": "libs/colorama-0.4.6.dist-info/METADATA",
    "content": "Metadata-Version: 2.1\nName: colorama\nVersion: 0.4.6\nSummary: Cross-platform colored terminal text.\nProject-URL: Homepage, https://github.com/tartley/colorama\nAuthor-email: Jonathan Hartley <tartley@tartley.com>\nLicense-File: LICENSE.txt\nKeywords: ansi,color,colour,crossplatform,terminal,text,windows,xplatform\nClassifier: Development Status :: 5 - Production/Stable\nClassifier: Environment :: Console\nClassifier: Intended Audience :: Developers\nClassifier: License :: OSI Approved :: BSD License\nClassifier: Operating System :: OS Independent\nClassifier: Programming Language :: Python\nClassifier: Programming Language :: Python :: 2\nClassifier: Programming Language :: Python :: 2.7\nClassifier: Programming Language :: Python :: 3\nClassifier: Programming Language :: Python :: 3.7\nClassifier: Programming Language :: Python :: 3.8\nClassifier: Programming Language :: Python :: 3.9\nClassifier: Programming Language :: Python :: 3.10\nClassifier: Programming Language :: Python :: Implementation :: CPython\nClassifier: Programming Language :: Python :: Implementation :: PyPy\nClassifier: Topic :: Terminals\nRequires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7\nDescription-Content-Type: text/x-rst\n\n.. image:: https://img.shields.io/pypi/v/colorama.svg\n    :target: https://pypi.org/project/colorama/\n    :alt: Latest Version\n\n.. image:: https://img.shields.io/pypi/pyversions/colorama.svg\n    :target: https://pypi.org/project/colorama/\n    :alt: Supported Python versions\n\n.. image:: https://github.com/tartley/colorama/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/tartley/colorama/actions/workflows/test.yml\n    :alt: Build Status\n\nColorama\n========\n\nMakes ANSI escape character sequences (for producing colored terminal text and\ncursor positioning) work under MS Windows.\n\n.. |donate| image:: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif\n  :target: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=2MZ9D2GMLYCUJ&item_name=Colorama&currency_code=USD\n  :alt: Donate with Paypal\n\n`PyPI for releases <https://pypi.org/project/colorama/>`_ |\n`Github for source <https://github.com/tartley/colorama>`_ |\n`Colorama for enterprise on Tidelift <https://github.com/tartley/colorama/blob/master/ENTERPRISE.md>`_\n\nIf you find Colorama useful, please |donate| to the authors. Thank you!\n\nInstallation\n------------\n\nTested on CPython 2.7, 3.7, 3.8, 3.9 and 3.10 and Pypy 2.7 and 3.8.\n\nNo requirements other than the standard library.\n\n.. code-block:: bash\n\n    pip install colorama\n    # or\n    conda install -c anaconda colorama\n\nDescription\n-----------\n\nANSI escape character sequences have long been used to produce colored terminal\ntext and cursor positioning on Unix and Macs. Colorama makes this work on\nWindows, too, by wrapping ``stdout``, stripping ANSI sequences it finds (which\nwould appear as gobbledygook in the output), and converting them into the\nappropriate win32 calls to modify the state of the terminal. On other platforms,\nColorama does nothing.\n\nThis has the upshot of providing a simple cross-platform API for printing\ncolored terminal text from Python, and has the happy side-effect that existing\napplications or libraries which use ANSI sequences to produce colored output on\nLinux or Macs can now also work on Windows, simply by calling\n``colorama.just_fix_windows_console()`` (since v0.4.6) or ``colorama.init()``\n(all versions, but may have other side-effects – see below).\n\nAn alternative approach is to install ``ansi.sys`` on Windows machines, which\nprovides the same behaviour for all applications running in terminals. Colorama\nis intended for situations where that isn't easy (e.g., maybe your app doesn't\nhave an installer.)\n\nDemo scripts in the source code repository print some colored text using\nANSI sequences. Compare their output under Gnome-terminal's built in ANSI\nhandling, versus on Windows Command-Prompt using Colorama:\n\n.. image:: https://github.com/tartley/colorama/raw/master/screenshots/ubuntu-demo.png\n    :width: 661\n    :height: 357\n    :alt: ANSI sequences on Ubuntu under gnome-terminal.\n\n.. image:: https://github.com/tartley/colorama/raw/master/screenshots/windows-demo.png\n    :width: 668\n    :height: 325\n    :alt: Same ANSI sequences on Windows, using Colorama.\n\nThese screenshots show that, on Windows, Colorama does not support ANSI 'dim\ntext'; it looks the same as 'normal text'.\n\nUsage\n-----\n\nInitialisation\n..............\n\nIf the only thing you want from Colorama is to get ANSI escapes to work on\nWindows, then run:\n\n.. code-block:: python\n\n    from colorama import just_fix_windows_console\n    just_fix_windows_console()\n\nIf you're on a recent version of Windows 10 or better, and your stdout/stderr\nare pointing to a Windows console, then this will flip the magic configuration\nswitch to enable Windows' built-in ANSI support.\n\nIf you're on an older version of Windows, and your stdout/stderr are pointing to\na Windows console, then this will wrap ``sys.stdout`` and/or ``sys.stderr`` in a\nmagic file object that intercepts ANSI escape sequences and issues the\nappropriate Win32 calls to emulate them.\n\nIn all other circumstances, it does nothing whatsoever. Basically the idea is\nthat this makes Windows act like Unix with respect to ANSI escape handling.\n\nIt's safe to call this function multiple times. It's safe to call this function\non non-Windows platforms, but it won't do anything. It's safe to call this\nfunction when one or both of your stdout/stderr are redirected to a file – it\nwon't do anything to those streams.\n\nAlternatively, you can use the older interface with more features (but also more\npotential footguns):\n\n.. code-block:: python\n\n    from colorama import init\n    init()\n\nThis does the same thing as ``just_fix_windows_console``, except for the\nfollowing differences:\n\n- It's not safe to call ``init`` multiple times; you can end up with multiple\n  layers of wrapping and broken ANSI support.\n\n- Colorama will apply a heuristic to guess whether stdout/stderr support ANSI,\n  and if it thinks they don't, then it will wrap ``sys.stdout`` and\n  ``sys.stderr`` in a magic file object that strips out ANSI escape sequences\n  before printing them. This happens on all platforms, and can be convenient if\n  you want to write your code to emit ANSI escape sequences unconditionally, and\n  let Colorama decide whether they should actually be output. But note that\n  Colorama's heuristic is not particularly clever.\n\n- ``init`` also accepts explicit keyword args to enable/disable various\n  functionality – see below.\n\nTo stop using Colorama before your program exits, simply call ``deinit()``.\nThis will restore ``stdout`` and ``stderr`` to their original values, so that\nColorama is disabled. To resume using Colorama again, call ``reinit()``; it is\ncheaper than calling ``init()`` again (but does the same thing).\n\nMost users should depend on ``colorama >= 0.4.6``, and use\n``just_fix_windows_console``. The old ``init`` interface will be supported\nindefinitely for backwards compatibility, but we don't plan to fix any issues\nwith it, also for backwards compatibility.\n\nColored Output\n..............\n\nCross-platform printing of colored text can then be done using Colorama's\nconstant shorthand for ANSI escape sequences. These are deliberately\nrudimentary, see below.\n\n.. code-block:: python\n\n    from colorama import Fore, Back, Style\n    print(Fore.RED + 'some red text')\n    print(Back.GREEN + 'and with a green background')\n    print(Style.DIM + 'and in dim text')\n    print(Style.RESET_ALL)\n    print('back to normal now')\n\n...or simply by manually printing ANSI sequences from your own code:\n\n.. code-block:: python\n\n    print('\\033[31m' + 'some red text')\n    print('\\033[39m') # and reset to default color\n\n...or, Colorama can be used in conjunction with existing ANSI libraries\nsuch as the venerable `Termcolor <https://pypi.org/project/termcolor/>`_\nthe fabulous `Blessings <https://pypi.org/project/blessings/>`_,\nor the incredible `_Rich <https://pypi.org/project/rich/>`_.\n\nIf you wish Colorama's Fore, Back and Style constants were more capable,\nthen consider using one of the above highly capable libraries to generate\ncolors, etc, and use Colorama just for its primary purpose: to convert\nthose ANSI sequences to also work on Windows:\n\nSIMILARLY, do not send PRs adding the generation of new ANSI types to Colorama.\nWe are only interested in converting ANSI codes to win32 API calls, not\nshortcuts like the above to generate ANSI characters.\n\n.. code-block:: python\n\n    from colorama import just_fix_windows_console\n    from termcolor import colored\n\n    # use Colorama to make Termcolor work on Windows too\n    just_fix_windows_console()\n\n    # then use Termcolor for all colored text output\n    print(colored('Hello, World!', 'green', 'on_red'))\n\nAvailable formatting constants are::\n\n    Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.\n    Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.\n    Style: DIM, NORMAL, BRIGHT, RESET_ALL\n\n``Style.RESET_ALL`` resets foreground, background, and brightness. Colorama will\nperform this reset automatically on program exit.\n\nThese are fairly well supported, but not part of the standard::\n\n    Fore: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX\n    Back: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX\n\nCursor Positioning\n..................\n\nANSI codes to reposition the cursor are supported. See ``demos/demo06.py`` for\nan example of how to generate them.\n\nInit Keyword Args\n.................\n\n``init()`` accepts some ``**kwargs`` to override default behaviour.\n\ninit(autoreset=False):\n    If you find yourself repeatedly sending reset sequences to turn off color\n    changes at the end of every print, then ``init(autoreset=True)`` will\n    automate that:\n\n    .. code-block:: python\n\n        from colorama import init\n        init(autoreset=True)\n        print(Fore.RED + 'some red text')\n        print('automatically back to default color again')\n\ninit(strip=None):\n    Pass ``True`` or ``False`` to override whether ANSI codes should be\n    stripped from the output. The default behaviour is to strip if on Windows\n    or if output is redirected (not a tty).\n\ninit(convert=None):\n    Pass ``True`` or ``False`` to override whether to convert ANSI codes in the\n    output into win32 calls. The default behaviour is to convert if on Windows\n    and output is to a tty (terminal).\n\ninit(wrap=True):\n    On Windows, Colorama works by replacing ``sys.stdout`` and ``sys.stderr``\n    with proxy objects, which override the ``.write()`` method to do their work.\n    If this wrapping causes you problems, then this can be disabled by passing\n    ``init(wrap=False)``. The default behaviour is to wrap if ``autoreset`` or\n    ``strip`` or ``convert`` are True.\n\n    When wrapping is disabled, colored printing on non-Windows platforms will\n    continue to work as normal. To do cross-platform colored output, you can\n    use Colorama's ``AnsiToWin32`` proxy directly:\n\n    .. code-block:: python\n\n        import sys\n        from colorama import init, AnsiToWin32\n        init(wrap=False)\n        stream = AnsiToWin32(sys.stderr).stream\n\n        # Python 2\n        print >>stream, Fore.BLUE + 'blue text on stderr'\n\n        # Python 3\n        print(Fore.BLUE + 'blue text on stderr', file=stream)\n\nRecognised ANSI Sequences\n.........................\n\nANSI sequences generally take the form::\n\n    ESC [ <param> ; <param> ... <command>\n\nWhere ``<param>`` is an integer, and ``<command>`` is a single letter. Zero or\nmore params are passed to a ``<command>``. If no params are passed, it is\ngenerally synonymous with passing a single zero. No spaces exist in the\nsequence; they have been inserted here simply to read more easily.\n\nThe only ANSI sequences that Colorama converts into win32 calls are::\n\n    ESC [ 0 m       # reset all (colors and brightness)\n    ESC [ 1 m       # bright\n    ESC [ 2 m       # dim (looks same as normal brightness)\n    ESC [ 22 m      # normal brightness\n\n    # FOREGROUND:\n    ESC [ 30 m      # black\n    ESC [ 31 m      # red\n    ESC [ 32 m      # green\n    ESC [ 33 m      # yellow\n    ESC [ 34 m      # blue\n    ESC [ 35 m      # magenta\n    ESC [ 36 m      # cyan\n    ESC [ 37 m      # white\n    ESC [ 39 m      # reset\n\n    # BACKGROUND\n    ESC [ 40 m      # black\n    ESC [ 41 m      # red\n    ESC [ 42 m      # green\n    ESC [ 43 m      # yellow\n    ESC [ 44 m      # blue\n    ESC [ 45 m      # magenta\n    ESC [ 46 m      # cyan\n    ESC [ 47 m      # white\n    ESC [ 49 m      # reset\n\n    # cursor positioning\n    ESC [ y;x H     # position cursor at x across, y down\n    ESC [ y;x f     # position cursor at x across, y down\n    ESC [ n A       # move cursor n lines up\n    ESC [ n B       # move cursor n lines down\n    ESC [ n C       # move cursor n characters forward\n    ESC [ n D       # move cursor n characters backward\n\n    # clear the screen\n    ESC [ mode J    # clear the screen\n\n    # clear the line\n    ESC [ mode K    # clear the line\n\nMultiple numeric params to the ``'m'`` command can be combined into a single\nsequence::\n\n    ESC [ 36 ; 45 ; 1 m     # bright cyan text on magenta background\n\nAll other ANSI sequences of the form ``ESC [ <param> ; <param> ... <command>``\nare silently stripped from the output on Windows.\n\nAny other form of ANSI sequence, such as single-character codes or alternative\ninitial characters, are not recognised or stripped. It would be cool to add\nthem though. Let me know if it would be useful for you, via the Issues on\nGitHub.\n\nStatus & Known Problems\n-----------------------\n\nI've personally only tested it on Windows XP (CMD, Console2), Ubuntu\n(gnome-terminal, xterm), and OS X.\n\nSome valid ANSI sequences aren't recognised.\n\nIf you're hacking on the code, see `README-hacking.md`_. ESPECIALLY, see the\nexplanation there of why we do not want PRs that allow Colorama to generate new\ntypes of ANSI codes.\n\nSee outstanding issues and wish-list:\nhttps://github.com/tartley/colorama/issues\n\nIf anything doesn't work for you, or doesn't do what you expected or hoped for,\nI'd love to hear about it on that issues list, would be delighted by patches,\nand would be happy to grant commit access to anyone who submits a working patch\nor two.\n\n.. _README-hacking.md: README-hacking.md\n\nLicense\n-------\n\nCopyright Jonathan Hartley & Arnon Yaari, 2013-2020. BSD 3-Clause license; see\nLICENSE file.\n\nProfessional support\n--------------------\n\n.. |tideliftlogo| image:: https://cdn2.hubspot.net/hubfs/4008838/website/logos/logos_for_download/Tidelift_primary-shorthand-logo.png\n   :alt: Tidelift\n   :target: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme\n\n.. list-table::\n   :widths: 10 100\n\n   * - |tideliftlogo|\n     - Professional support for colorama is available as part of the\n       `Tidelift Subscription`_.\n       Tidelift gives software development teams a single source for purchasing\n       and maintaining their software, with professional grade assurances from\n       the experts who know it best, while seamlessly integrating with existing\n       tools.\n\n.. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme\n\nThanks\n------\n\nSee the CHANGELOG for more thanks!\n\n* Marc Schlaich (schlamar) for a ``setup.py`` fix for Python2.5.\n* Marc Abramowitz, reported & fixed a crash on exit with closed ``stdout``,\n  providing a solution to issue #7's setuptools/distutils debate,\n  and other fixes.\n* User 'eryksun', for guidance on correctly instantiating ``ctypes.windll``.\n* Matthew McCormick for politely pointing out a longstanding crash on non-Win.\n* Ben Hoyt, for a magnificent fix under 64-bit Windows.\n* Jesse at Empty Square for submitting a fix for examples in the README.\n* User 'jamessp', an observant documentation fix for cursor positioning.\n* User 'vaal1239', Dave Mckee & Lackner Kristof for a tiny but much-needed Win7\n  fix.\n* Julien Stuyck, for wisely suggesting Python3 compatible updates to README.\n* Daniel Griffith for multiple fabulous patches.\n* Oscar Lesta for a valuable fix to stop ANSI chars being sent to non-tty\n  output.\n* Roger Binns, for many suggestions, valuable feedback, & bug reports.\n* Tim Golden for thought and much appreciated feedback on the initial idea.\n* User 'Zearin' for updates to the README file.\n* John Szakmeister for adding support for light colors\n* Charles Merriam for adding documentation to demos\n* Jurko for a fix on 64-bit Windows CPython2.5 w/o ctypes\n* Florian Bruhin for a fix when stdout or stderr are None\n* Thomas Weininger for fixing ValueError on Windows\n* Remi Rampin for better Github integration and fixes to the README file\n* Simeon Visser for closing a file handle using 'with' and updating classifiers\n  to include Python 3.3 and 3.4\n* Andy Neff for fixing RESET of LIGHT_EX colors.\n* Jonathan Hartley for the initial idea and implementation.\n"
  },
  {
    "path": "libs/colorama-0.4.6.dist-info/RECORD",
    "content": "colorama/__init__.py,sha256=wePQA4U20tKgYARySLEC047ucNX-g8pRLpYBuiHlLb8,266\ncolorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522\ncolorama/ansitowin32.py,sha256=vPNYa3OZbxjbuFyaVo0Tmhmy1FZ1lKMWCnT7odXpItk,11128\ncolorama/initialise.py,sha256=-hIny86ClXo39ixh5iSCfUIa2f_h_bgKRDW7gqs-KLU,3325\ncolorama/win32.py,sha256=YQOKwMTwtGBbsY4dL5HYTvwTeP9wIQra5MvPNddpxZs,6181\ncolorama/winterm.py,sha256=XCQFDHjPi6AHYNdZwy0tA02H-Jh48Jp-HvCjeLeLp3U,7134\ncolorama/tests/__init__.py,sha256=MkgPAEzGQd-Rq0w0PZXSX2LadRWhUECcisJY8lSrm4Q,75\ncolorama/tests/ansi_test.py,sha256=FeViDrUINIZcr505PAxvU4AjXz1asEiALs9GXMhwRaE,2839\ncolorama/tests/ansitowin32_test.py,sha256=RN7AIhMJ5EqDsYaCjVo-o4u8JzDD4ukJbmevWKS70rY,10678\ncolorama/tests/initialise_test.py,sha256=BbPy-XfyHwJ6zKozuQOvNvQZzsx9vdb_0bYXn7hsBTc,6741\ncolorama/tests/isatty_test.py,sha256=Pg26LRpv0yQDB5Ac-sxgVXG7hsA1NYvapFgApZfYzZg,1866\ncolorama/tests/utils.py,sha256=1IIRylG39z5-dzq09R_ngufxyPZxgldNbrxKxUGwGKE,1079\ncolorama/tests/winterm_test.py,sha256=qoWFPEjym5gm2RuMwpf3pOis3a5r_PJZFCzK254JL8A,3709\ncolorama-0.4.6.dist-info/METADATA,sha256=e67SnrUMOym9sz_4TjF3vxvAV4T3aF7NyqRHHH3YEMw,17158\ncolorama-0.4.6.dist-info/WHEEL,sha256=cdcF4Fbd0FPtw2EMIOwH-3rSOTUdTCeOSXRMD1iLUb8,105\ncolorama-0.4.6.dist-info/licenses/LICENSE.txt,sha256=ysNcAmhuXQSlpxQL-zs25zrtSWZW6JEQLkKIhteTAxg,1491\ncolorama-0.4.6.dist-info/RECORD,,\n"
  },
  {
    "path": "libs/colorama-0.4.6.dist-info/WHEEL",
    "content": "Wheel-Version: 1.0\nGenerator: hatchling 1.11.1\nRoot-Is-Purelib: true\nTag: py2-none-any\nTag: py3-none-any\n"
  },
  {
    "path": "libs/colorama-0.4.6.dist-info/licenses/LICENSE.txt",
    "content": "Copyright (c) 2010 Jonathan Hartley\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holders, nor those of its contributors\n  may be used to endorse or promote products derived from this software without\n  specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "libs/loguru/__init__.py",
    "content": "\"\"\"\nThe Loguru library provides a pre-instanced logger to facilitate dealing with logging in Python.\n\nJust ``from loguru import logger``.\n\"\"\"\n\nimport atexit as _atexit\nimport sys as _sys\n\nfrom . import _defaults\nfrom ._logger import Core as _Core\nfrom ._logger import Logger as _Logger\n\n__version__ = \"0.7.3\"\n\n__all__ = [\"logger\"]\n\nlogger = _Logger(\n    core=_Core(),\n    exception=None,\n    depth=0,\n    record=False,\n    lazy=False,\n    colors=False,\n    raw=False,\n    capture=True,\n    patchers=[],\n    extra={},\n)\n\nif _defaults.LOGURU_AUTOINIT and _sys.stderr:\n    logger.add(_sys.stderr)\n\n_atexit.register(logger.remove)\n"
  },
  {
    "path": "libs/loguru/__init__.pyi",
    "content": "import sys\nfrom asyncio import AbstractEventLoop\nfrom datetime import datetime, time, timedelta\nfrom logging import Handler\nfrom multiprocessing.context import BaseContext\nfrom types import TracebackType\nfrom typing import (\n    Any,\n    BinaryIO,\n    Callable,\n    Dict,\n    Generator,\n    Generic,\n    List,\n    NamedTuple,\n    NewType,\n    Optional,\n    Pattern,\n    Sequence,\n    TextIO,\n    Tuple,\n    Type,\n    TypeVar,\n    Union,\n    overload,\n)\n\nif sys.version_info >= (3, 6):\n    from typing import Awaitable\nelse:\n    from typing_extensions import Awaitable\n\nif sys.version_info >= (3, 6):\n    from os import PathLike\n    from typing import ContextManager\n\n    PathLikeStr = PathLike[str]\nelse:\n    from pathlib import PurePath as PathLikeStr\n\n    from typing_extensions import ContextManager\n\nif sys.version_info >= (3, 8):\n    from typing import Protocol, TypedDict\nelse:\n    from typing_extensions import Protocol, TypedDict\n\n_T = TypeVar(\"_T\")\n_F = TypeVar(\"_F\", bound=Callable[..., Any])\nExcInfo = Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]]\n\nclass _GeneratorContextManager(ContextManager[_T], Generic[_T]):\n    def __call__(self, func: _F) -> _F: ...\n    def __exit__(\n        self,\n        typ: Optional[Type[BaseException]],\n        value: Optional[BaseException],\n        traceback: Optional[TracebackType],\n    ) -> Optional[bool]: ...\n\nCatcher = NewType(\"Catcher\", _GeneratorContextManager[None])\nContextualizer = NewType(\"Contextualizer\", _GeneratorContextManager[None])\nAwaitableCompleter = Awaitable[None]\n\nclass Level(NamedTuple):\n    name: str\n    no: int\n    color: str\n    icon: str\n\nclass _RecordAttribute:\n    def __format__(self, spec: str) -> str: ...\n\nclass RecordFile(_RecordAttribute):\n    name: str\n    path: str\n\nclass RecordLevel(_RecordAttribute):\n    name: str\n    no: int\n    icon: str\n\nclass RecordThread(_RecordAttribute):\n    id: int\n    name: str\n\nclass RecordProcess(_RecordAttribute):\n    id: int\n    name: str\n\nclass RecordException(NamedTuple):\n    type: Optional[Type[BaseException]]\n    value: Optional[BaseException]\n    traceback: Optional[TracebackType]\n\nclass Record(TypedDict):\n    elapsed: timedelta\n    exception: Optional[RecordException]\n    extra: Dict[Any, Any]\n    file: RecordFile\n    function: str\n    level: RecordLevel\n    line: int\n    message: str\n    module: str\n    name: Optional[str]\n    process: RecordProcess\n    thread: RecordThread\n    time: datetime\n\nclass Message(str):\n    record: Record\n\nclass Writable(Protocol):\n    def write(self, message: Message) -> None: ...\n\nFilterDict = Dict[Optional[str], Union[str, int, bool]]\nFilterFunction = Callable[[Record], bool]\nFormatFunction = Callable[[Record], str]\nPatcherFunction = Callable[[Record], None]\nRotationFunction = Callable[[Message, TextIO], bool]\nRetentionFunction = Callable[[List[str]], None]\nCompressionFunction = Callable[[str], None]\n\nStandardOpener = Callable[[str, int], int]\n\nclass BasicHandlerConfig(TypedDict, total=False):\n    sink: Union[TextIO, Writable, Callable[[Message], None], Handler]\n    level: Union[str, int]\n    format: Union[str, FormatFunction]\n    filter: Optional[Union[str, FilterFunction, FilterDict]]\n    colorize: Optional[bool]\n    serialize: bool\n    backtrace: bool\n    diagnose: bool\n    enqueue: bool\n    catch: bool\n\nclass FileHandlerConfig(TypedDict, total=False):\n    sink: Union[str, PathLikeStr]\n    level: Union[str, int]\n    format: Union[str, FormatFunction]\n    filter: Optional[Union[str, FilterFunction, FilterDict]]\n    colorize: Optional[bool]\n    serialize: bool\n    backtrace: bool\n    diagnose: bool\n    enqueue: bool\n    catch: bool\n    rotation: Optional[Union[str, int, time, timedelta, RotationFunction]]\n    retention: Optional[Union[str, int, timedelta, RetentionFunction]]\n    compression: Optional[Union[str, CompressionFunction]]\n    delay: bool\n    watch: bool\n    mode: str\n    buffering: int\n    encoding: str\n    errors: Optional[str]\n    newline: Optional[str]\n    closefd: bool\n    opener: Optional[StandardOpener]\n\nclass AsyncHandlerConfig(TypedDict, total=False):\n    sink: Callable[[Message], Awaitable[None]]\n    level: Union[str, int]\n    format: Union[str, FormatFunction]\n    filter: Optional[Union[str, FilterFunction, FilterDict]]\n    colorize: Optional[bool]\n    serialize: bool\n    backtrace: bool\n    diagnose: bool\n    enqueue: bool\n    catch: bool\n    context: Optional[Union[str, BaseContext]]\n    loop: Optional[AbstractEventLoop]\n\nHandlerConfig = Union[BasicHandlerConfig, FileHandlerConfig, AsyncHandlerConfig]\n\nclass LevelConfig(TypedDict, total=False):\n    name: str\n    no: int\n    color: str\n    icon: str\n\nActivationConfig = Tuple[Optional[str], bool]\n\nclass Logger:\n    @overload\n    def add(\n        self,\n        sink: Union[TextIO, Writable, Callable[[Message], None], Handler],\n        *,\n        level: Union[str, int] = ...,\n        format: Union[str, FormatFunction] = ...,\n        filter: Optional[Union[str, FilterFunction, FilterDict]] = ...,\n        colorize: Optional[bool] = ...,\n        serialize: bool = ...,\n        backtrace: bool = ...,\n        diagnose: bool = ...,\n        enqueue: bool = ...,\n        context: Optional[Union[str, BaseContext]] = ...,\n        catch: bool = ...\n    ) -> int: ...\n    @overload\n    def add(\n        self,\n        sink: Callable[[Message], Awaitable[None]],\n        *,\n        level: Union[str, int] = ...,\n        format: Union[str, FormatFunction] = ...,\n        filter: Optional[Union[str, FilterFunction, FilterDict]] = ...,\n        colorize: Optional[bool] = ...,\n        serialize: bool = ...,\n        backtrace: bool = ...,\n        diagnose: bool = ...,\n        enqueue: bool = ...,\n        catch: bool = ...,\n        context: Optional[Union[str, BaseContext]] = ...,\n        loop: Optional[AbstractEventLoop] = ...\n    ) -> int: ...\n    @overload\n    def add(\n        self,\n        sink: Union[str, PathLikeStr],\n        *,\n        level: Union[str, int] = ...,\n        format: Union[str, FormatFunction] = ...,\n        filter: Optional[Union[str, FilterFunction, FilterDict]] = ...,\n        colorize: Optional[bool] = ...,\n        serialize: bool = ...,\n        backtrace: bool = ...,\n        diagnose: bool = ...,\n        enqueue: bool = ...,\n        context: Optional[Union[str, BaseContext]] = ...,\n        catch: bool = ...,\n        rotation: Optional[Union[str, int, time, timedelta, RotationFunction]] = ...,\n        retention: Optional[Union[str, int, timedelta, RetentionFunction]] = ...,\n        compression: Optional[Union[str, CompressionFunction]] = ...,\n        delay: bool = ...,\n        watch: bool = ...,\n        mode: str = ...,\n        buffering: int = ...,\n        encoding: str = ...,\n        errors: Optional[str] = ...,\n        newline: Optional[str] = ...,\n        closefd: bool = ...,\n        opener: Optional[StandardOpener] = ...,\n    ) -> int: ...\n    def remove(self, handler_id: Optional[int] = ...) -> None: ...\n    def complete(self) -> AwaitableCompleter: ...\n    @overload\n    def catch(\n        self,\n        exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]] = ...,\n        *,\n        level: Union[str, int] = ...,\n        reraise: bool = ...,\n        onerror: Optional[Callable[[BaseException], None]] = ...,\n        exclude: Optional[Union[Type[BaseException], Tuple[Type[BaseException], ...]]] = ...,\n        default: Any = ...,\n        message: str = ...\n    ) -> Catcher: ...\n    @overload\n    def catch(self, function: _F) -> _F: ...\n    def opt(\n        self,\n        *,\n        exception: Optional[Union[bool, ExcInfo, BaseException]] = ...,\n        record: bool = ...,\n        lazy: bool = ...,\n        colors: bool = ...,\n        raw: bool = ...,\n        capture: bool = ...,\n        depth: int = ...,\n        ansi: bool = ...\n    ) -> Logger: ...\n    def bind(__self, **kwargs: Any) -> Logger: ...  # noqa: N805\n    def contextualize(__self, **kwargs: Any) -> Contextualizer: ...  # noqa: N805\n    def patch(self, patcher: PatcherFunction) -> Logger: ...\n    @overload\n    def level(self, name: str) -> Level: ...\n    @overload\n    def level(\n        self, name: str, no: int = ..., color: Optional[str] = ..., icon: Optional[str] = ...\n    ) -> Level: ...\n    @overload\n    def level(\n        self,\n        name: str,\n        no: Optional[int] = ...,\n        color: Optional[str] = ...,\n        icon: Optional[str] = ...,\n    ) -> Level: ...\n    def disable(self, name: Optional[str]) -> None: ...\n    def enable(self, name: Optional[str]) -> None: ...\n    def configure(\n        self,\n        *,\n        handlers: Optional[Sequence[HandlerConfig]] = ...,\n        levels: Optional[Sequence[LevelConfig]] = ...,\n        extra: Optional[Dict[Any, Any]] = ...,\n        patcher: Optional[PatcherFunction] = ...,\n        activation: Optional[Sequence[ActivationConfig]] = ...\n    ) -> List[int]: ...\n    # @staticmethod cannot be used with @overload in mypy (python/mypy#7781).\n    # However Logger is not exposed and logger is an instance of Logger\n    # so for type checkers it is all the same whether it is defined here\n    # as a static method or an instance method.\n    @overload\n    def parse(\n        self,\n        file: Union[str, PathLikeStr, TextIO],\n        pattern: Union[str, Pattern[str]],\n        *,\n        cast: Union[Dict[str, Callable[[str], Any]], Callable[[Dict[str, str]], None]] = ...,\n        chunk: int = ...\n    ) -> Generator[Dict[str, Any], None, None]: ...\n    @overload\n    def parse(\n        self,\n        file: BinaryIO,\n        pattern: Union[bytes, Pattern[bytes]],\n        *,\n        cast: Union[Dict[str, Callable[[bytes], Any]], Callable[[Dict[str, bytes]], None]] = ...,\n        chunk: int = ...\n    ) -> Generator[Dict[str, Any], None, None]: ...\n    @overload\n    def trace(__self, __message: str, *args: Any, **kwargs: Any) -> None: ...  # noqa: N805\n    @overload\n    def trace(__self, __message: Any) -> None: ...  # noqa: N805\n    @overload\n    def debug(__self, __message: str, *args: Any, **kwargs: Any) -> None: ...  # noqa: N805\n    @overload\n    def debug(__self, __message: Any) -> None: ...  # noqa: N805\n    @overload\n    def info(__self, __message: str, *args: Any, **kwargs: Any) -> None: ...  # noqa: N805\n    @overload\n    def info(__self, __message: Any) -> None: ...  # noqa: N805\n    @overload\n    def success(__self, __message: str, *args: Any, **kwargs: Any) -> None: ...  # noqa: N805\n    @overload\n    def success(__self, __message: Any) -> None: ...  # noqa: N805\n    @overload\n    def warning(__self, __message: str, *args: Any, **kwargs: Any) -> None: ...  # noqa: N805\n    @overload\n    def warning(__self, __message: Any) -> None: ...  # noqa: N805\n    @overload\n    def error(__self, __message: str, *args: Any, **kwargs: Any) -> None: ...  # noqa: N805\n    @overload\n    def error(__self, __message: Any) -> None: ...  # noqa: N805\n    @overload\n    def critical(__self, __message: str, *args: Any, **kwargs: Any) -> None: ...  # noqa: N805\n    @overload\n    def critical(__self, __message: Any) -> None: ...  # noqa: N805\n    @overload\n    def exception(__self, __message: str, *args: Any, **kwargs: Any) -> None: ...  # noqa: N805\n    @overload\n    def exception(__self, __message: Any) -> None: ...  # noqa: N805\n    @overload\n    def log(\n        __self, __level: Union[int, str], __message: str, *args: Any, **kwargs: Any  # noqa: N805\n    ) -> None: ...\n    @overload\n    def log(__self, __level: Union[int, str], __message: Any) -> None: ...  # noqa: N805\n    def start(self, *args: Any, **kwargs: Any) -> int: ...\n    def stop(self, *args: Any, **kwargs: Any) -> None: ...\n\nlogger: Logger\n"
  },
  {
    "path": "libs/loguru/_asyncio_loop.py",
    "content": "import asyncio\nimport sys\n\n\ndef load_loop_functions():\n    if sys.version_info >= (3, 7):\n\n        def get_task_loop(task):\n            return task.get_loop()\n\n        get_running_loop = asyncio.get_running_loop\n\n    else:\n\n        def get_task_loop(task):\n            return task._loop\n\n        def get_running_loop():\n            loop = asyncio.get_event_loop()\n            if not loop.is_running():\n                raise RuntimeError(\"There is no running event loop\")\n            return loop\n\n    return get_task_loop, get_running_loop\n\n\nget_task_loop, get_running_loop = load_loop_functions()\n"
  },
  {
    "path": "libs/loguru/_better_exceptions.py",
    "content": "import builtins\nimport inspect\nimport io\nimport keyword\nimport linecache\nimport os\nimport re\nimport sys\nimport sysconfig\nimport tokenize\nimport traceback\n\nif sys.version_info >= (3, 11):\n\n    def is_exception_group(exc):\n        return isinstance(exc, ExceptionGroup)\n\nelse:\n    try:\n        from exceptiongroup import ExceptionGroup\n    except ImportError:\n\n        def is_exception_group(exc):\n            return False\n\n    else:\n\n        def is_exception_group(exc):\n            return isinstance(exc, ExceptionGroup)\n\n\nclass SyntaxHighlighter:\n    _default_style = frozenset(\n        {\n            \"comment\": \"\\x1b[30m\\x1b[1m{}\\x1b[0m\",\n            \"keyword\": \"\\x1b[35m\\x1b[1m{}\\x1b[0m\",\n            \"builtin\": \"\\x1b[1m{}\\x1b[0m\",\n            \"string\": \"\\x1b[36m{}\\x1b[0m\",\n            \"number\": \"\\x1b[34m\\x1b[1m{}\\x1b[0m\",\n            \"operator\": \"\\x1b[35m\\x1b[1m{}\\x1b[0m\",\n            \"punctuation\": \"\\x1b[1m{}\\x1b[0m\",\n            \"constant\": \"\\x1b[36m\\x1b[1m{}\\x1b[0m\",\n            \"identifier\": \"\\x1b[1m{}\\x1b[0m\",\n            \"other\": \"{}\",\n        }.items()\n    )\n\n    _builtins = frozenset(dir(builtins))\n    _constants = frozenset({\"True\", \"False\", \"None\"})\n    _punctuation = frozenset({\"(\", \")\", \"[\", \"]\", \"{\", \"}\", \":\", \",\", \";\"})\n\n    if sys.version_info >= (3, 12):\n        _strings = frozenset(\n            {tokenize.STRING, tokenize.FSTRING_START, tokenize.FSTRING_MIDDLE, tokenize.FSTRING_END}\n        )\n        _fstring_middle = tokenize.FSTRING_MIDDLE\n    else:\n        _strings = frozenset({tokenize.STRING})\n        _fstring_middle = None\n\n    def __init__(self, style=None):\n        self._style = style or dict(self._default_style)\n\n    def highlight(self, source):\n        style = self._style\n        row, column = 0, 0\n        output = \"\"\n\n        for token in self.tokenize(source):\n            type_, string, (start_row, start_column), (_, end_column), line = token\n\n            if type_ == self._fstring_middle:\n                # When an f-string contains \"{{\" or \"}}\", they appear as \"{\" or \"}\" in the \"string\"\n                # attribute of the token. However, they do not count in the column position.\n                end_column += string.count(\"{\") + string.count(\"}\")\n\n            if type_ == tokenize.NAME:\n                if string in self._constants:\n                    color = style[\"constant\"]\n                elif keyword.iskeyword(string):\n                    color = style[\"keyword\"]\n                elif string in self._builtins:\n                    color = style[\"builtin\"]\n                else:\n                    color = style[\"identifier\"]\n            elif type_ == tokenize.OP:\n                if string in self._punctuation:\n                    color = style[\"punctuation\"]\n                else:\n                    color = style[\"operator\"]\n            elif type_ == tokenize.NUMBER:\n                color = style[\"number\"]\n            elif type_ in self._strings:\n                color = style[\"string\"]\n            elif type_ == tokenize.COMMENT:\n                color = style[\"comment\"]\n            else:\n                color = style[\"other\"]\n\n            if start_row != row:\n                source = source[column:]\n                row, column = start_row, 0\n\n            if type_ != tokenize.ENCODING:\n                output += line[column:start_column]\n                output += color.format(line[start_column:end_column])\n\n            column = end_column\n\n        output += source[column:]\n\n        return output\n\n    @staticmethod\n    def tokenize(source):\n        # Worth reading: https://www.asmeurer.com/brown-water-python/\n        source = source.encode(\"utf-8\")\n        source = io.BytesIO(source)\n\n        try:\n            yield from tokenize.tokenize(source.readline)\n        except tokenize.TokenError:\n            return\n\n\nclass ExceptionFormatter:\n    _default_theme = frozenset(\n        {\n            \"introduction\": \"\\x1b[33m\\x1b[1m{}\\x1b[0m\",\n            \"cause\": \"\\x1b[1m{}\\x1b[0m\",\n            \"context\": \"\\x1b[1m{}\\x1b[0m\",\n            \"dirname\": \"\\x1b[32m{}\\x1b[0m\",\n            \"basename\": \"\\x1b[32m\\x1b[1m{}\\x1b[0m\",\n            \"line\": \"\\x1b[33m{}\\x1b[0m\",\n            \"function\": \"\\x1b[35m{}\\x1b[0m\",\n            \"exception_type\": \"\\x1b[31m\\x1b[1m{}\\x1b[0m\",\n            \"exception_value\": \"\\x1b[1m{}\\x1b[0m\",\n            \"arrows\": \"\\x1b[36m{}\\x1b[0m\",\n            \"value\": \"\\x1b[36m\\x1b[1m{}\\x1b[0m\",\n        }.items()\n    )\n\n    def __init__(\n        self,\n        colorize=False,\n        backtrace=False,\n        diagnose=True,\n        theme=None,\n        style=None,\n        max_length=128,\n        encoding=\"ascii\",\n        hidden_frames_filename=None,\n        prefix=\"\",\n    ):\n        self._colorize = colorize\n        self._diagnose = diagnose\n        self._theme = theme or dict(self._default_theme)\n        self._backtrace = backtrace\n        self._syntax_highlighter = SyntaxHighlighter(style)\n        self._max_length = max_length\n        self._encoding = encoding\n        self._hidden_frames_filename = hidden_frames_filename\n        self._prefix = prefix\n        self._lib_dirs = self._get_lib_dirs()\n        self._pipe_char = self._get_char(\"\\u2502\", \"|\")\n        self._cap_char = self._get_char(\"\\u2514\", \"->\")\n        self._catch_point_identifier = \" <Loguru catch point here>\"\n\n    @staticmethod\n    def _get_lib_dirs():\n        schemes = sysconfig.get_scheme_names()\n        names = [\"stdlib\", \"platstdlib\", \"platlib\", \"purelib\"]\n        paths = {sysconfig.get_path(name, scheme) for scheme in schemes for name in names}\n        return [os.path.abspath(path).lower() + os.sep for path in paths if path in sys.path]\n\n    @staticmethod\n    def _indent(text, count, *, prefix=\"| \"):\n        if count == 0:\n            yield text\n            return\n        for line in text.splitlines(True):\n            indented = \"  \" * count + prefix + line\n            yield indented.rstrip() + \"\\n\"\n\n    def _get_char(self, char, default):\n        try:\n            char.encode(self._encoding)\n        except (UnicodeEncodeError, LookupError):\n            return default\n        else:\n            return char\n\n    def _is_file_mine(self, file):\n        filepath = os.path.abspath(file).lower()\n        if not filepath.endswith(\".py\"):\n            return False\n        return not any(filepath.startswith(d) for d in self._lib_dirs)\n\n    def _extract_frames(self, tb, is_first, *, limit=None, from_decorator=False):\n        frames, final_source = [], None\n\n        if tb is None or (limit is not None and limit <= 0):\n            return frames, final_source\n\n        def is_valid(frame):\n            return frame.f_code.co_filename != self._hidden_frames_filename\n\n        def get_info(frame, lineno):\n            filename = frame.f_code.co_filename\n            function = frame.f_code.co_name\n            source = linecache.getline(filename, lineno).strip()\n            return filename, lineno, function, source\n\n        infos = []\n\n        if is_valid(tb.tb_frame):\n            infos.append((get_info(tb.tb_frame, tb.tb_lineno), tb.tb_frame))\n\n        get_parent_only = from_decorator and not self._backtrace\n\n        if (self._backtrace and is_first) or get_parent_only:\n            frame = tb.tb_frame.f_back\n            while frame:\n                if is_valid(frame):\n                    infos.insert(0, (get_info(frame, frame.f_lineno), frame))\n                    if get_parent_only:\n                        break\n                frame = frame.f_back\n\n            if infos and not get_parent_only:\n                (filename, lineno, function, source), frame = infos[-1]\n                function += self._catch_point_identifier\n                infos[-1] = ((filename, lineno, function, source), frame)\n\n        tb = tb.tb_next\n\n        while tb:\n            if is_valid(tb.tb_frame):\n                infos.append((get_info(tb.tb_frame, tb.tb_lineno), tb.tb_frame))\n            tb = tb.tb_next\n\n        if limit is not None:\n            infos = infos[-limit:]\n\n        for (filename, lineno, function, source), frame in infos:\n            final_source = source\n            if source:\n                colorize = self._colorize and self._is_file_mine(filename)\n                lines = []\n                if colorize:\n                    lines.append(self._syntax_highlighter.highlight(source))\n                else:\n                    lines.append(source)\n                if self._diagnose:\n                    relevant_values = self._get_relevant_values(source, frame)\n                    values = self._format_relevant_values(list(relevant_values), colorize)\n                    lines += list(values)\n                source = \"\\n    \".join(lines)\n            frames.append((filename, lineno, function, source))\n\n        return frames, final_source\n\n    def _get_relevant_values(self, source, frame):\n        value = None\n        pending = None\n        is_attribute = False\n        is_valid_value = False\n        is_assignment = True\n\n        for token in self._syntax_highlighter.tokenize(source):\n            type_, string, (_, col), *_ = token\n\n            if pending is not None:\n                # Keyword arguments are ignored\n                if type_ != tokenize.OP or string != \"=\" or is_assignment:\n                    yield pending\n                pending = None\n\n            if type_ == tokenize.NAME and not keyword.iskeyword(string):\n                if not is_attribute:\n                    for variables in (frame.f_locals, frame.f_globals):\n                        try:\n                            value = variables[string]\n                        except KeyError:\n                            continue\n                        else:\n                            is_valid_value = True\n                            pending = (col, self._format_value(value))\n                            break\n                elif is_valid_value:\n                    try:\n                        value = inspect.getattr_static(value, string)\n                    except AttributeError:\n                        is_valid_value = False\n                    else:\n                        yield (col, self._format_value(value))\n            elif type_ == tokenize.OP and string == \".\":\n                is_attribute = True\n                is_assignment = False\n            elif type_ == tokenize.OP and string == \";\":\n                is_assignment = True\n                is_attribute = False\n                is_valid_value = False\n            else:\n                is_attribute = False\n                is_valid_value = False\n                is_assignment = False\n\n        if pending is not None:\n            yield pending\n\n    def _format_relevant_values(self, relevant_values, colorize):\n        for i in reversed(range(len(relevant_values))):\n            col, value = relevant_values[i]\n            pipe_cols = [pcol for pcol, _ in relevant_values[:i]]\n            pre_line = \"\"\n            index = 0\n\n            for pc in pipe_cols:\n                pre_line += (\" \" * (pc - index)) + self._pipe_char\n                index = pc + 1\n\n            pre_line += \" \" * (col - index)\n            value_lines = value.split(\"\\n\")\n\n            for n, value_line in enumerate(value_lines):\n                if n == 0:\n                    arrows = pre_line + self._cap_char + \" \"\n                else:\n                    arrows = pre_line + \" \" * (len(self._cap_char) + 1)\n\n                if colorize:\n                    arrows = self._theme[\"arrows\"].format(arrows)\n                    value_line = self._theme[\"value\"].format(value_line)\n\n                yield arrows + value_line\n\n    def _format_value(self, v):\n        try:\n            v = repr(v)\n        except Exception:\n            v = \"<unprintable %s object>\" % type(v).__name__\n\n        max_length = self._max_length\n        if max_length is not None and len(v) > max_length:\n            v = v[: max_length - 3] + \"...\"\n        return v\n\n    def _format_locations(self, frames_lines, *, has_introduction):\n        prepend_with_new_line = has_introduction\n        regex = r'^  File \"(?P<file>.*?)\", line (?P<line>[^,]+)(?:, in (?P<function>.*))?\\n'\n\n        for frame in frames_lines:\n            match = re.match(regex, frame)\n\n            if match:\n                file, line, function = match.group(\"file\", \"line\", \"function\")\n\n                is_mine = self._is_file_mine(file)\n\n                if function is not None:\n                    pattern = '  File \"{}\", line {}, in {}\\n'\n                else:\n                    pattern = '  File \"{}\", line {}\\n'\n\n                if self._backtrace and function and function.endswith(self._catch_point_identifier):\n                    function = function[: -len(self._catch_point_identifier)]\n                    pattern = \">\" + pattern[1:]\n\n                if self._colorize and is_mine:\n                    dirname, basename = os.path.split(file)\n                    if dirname:\n                        dirname += os.sep\n                    dirname = self._theme[\"dirname\"].format(dirname)\n                    basename = self._theme[\"basename\"].format(basename)\n                    file = dirname + basename\n                    line = self._theme[\"line\"].format(line)\n                    function = self._theme[\"function\"].format(function)\n\n                if self._diagnose and (is_mine or prepend_with_new_line):\n                    pattern = \"\\n\" + pattern\n\n                location = pattern.format(file, line, function)\n                frame = location + frame[match.end() :]\n                prepend_with_new_line = is_mine\n\n            yield frame\n\n    def _format_exception(\n        self, value, tb, *, seen=None, is_first=False, from_decorator=False, group_nesting=0\n    ):\n        # Implemented from built-in traceback module:\n        # https://github.com/python/cpython/blob/a5b76167/Lib/traceback.py#L468\n        exc_type, exc_value, exc_traceback = type(value), value, tb\n\n        if seen is None:\n            seen = set()\n\n        seen.add(id(exc_value))\n\n        if exc_value:\n            if exc_value.__cause__ is not None and id(exc_value.__cause__) not in seen:\n                yield from self._format_exception(\n                    exc_value.__cause__,\n                    exc_value.__cause__.__traceback__,\n                    seen=seen,\n                    group_nesting=group_nesting,\n                )\n                cause = \"The above exception was the direct cause of the following exception:\"\n                if self._colorize:\n                    cause = self._theme[\"cause\"].format(cause)\n                if self._diagnose:\n                    yield from self._indent(\"\\n\\n\" + cause + \"\\n\\n\\n\", group_nesting)\n                else:\n                    yield from self._indent(\"\\n\" + cause + \"\\n\\n\", group_nesting)\n\n            elif (\n                exc_value.__context__ is not None\n                and id(exc_value.__context__) not in seen\n                and not exc_value.__suppress_context__\n            ):\n                yield from self._format_exception(\n                    exc_value.__context__,\n                    exc_value.__context__.__traceback__,\n                    seen=seen,\n                    group_nesting=group_nesting,\n                )\n                context = \"During handling of the above exception, another exception occurred:\"\n                if self._colorize:\n                    context = self._theme[\"context\"].format(context)\n                if self._diagnose:\n                    yield from self._indent(\"\\n\\n\" + context + \"\\n\\n\\n\", group_nesting)\n                else:\n                    yield from self._indent(\"\\n\" + context + \"\\n\\n\", group_nesting)\n\n        is_grouped = is_exception_group(value)\n\n        if is_grouped and group_nesting == 0:\n            yield from self._format_exception(\n                value,\n                tb,\n                seen=seen,\n                group_nesting=1,\n                is_first=is_first,\n                from_decorator=from_decorator,\n            )\n            return\n\n        try:\n            traceback_limit = sys.tracebacklimit\n        except AttributeError:\n            traceback_limit = None\n\n        frames, final_source = self._extract_frames(\n            exc_traceback, is_first, limit=traceback_limit, from_decorator=from_decorator\n        )\n        exception_only = traceback.format_exception_only(exc_type, exc_value)\n\n        # Determining the correct index for the \"Exception: message\" part in the formatted exception\n        # is challenging. This is because it might be preceded by multiple lines specific to\n        # \"SyntaxError\" or followed by various notes. However, we can make an educated guess based\n        # on the indentation; the preliminary context for \"SyntaxError\" is always indented, while\n        # the Exception itself is not. This allows us to identify the correct index for the\n        # exception message.\n        no_indented_indexes = (i for i, p in enumerate(exception_only) if not p.startswith(\" \"))\n        error_message_index = next(no_indented_indexes, None)\n\n        if error_message_index is not None:\n            # Remove final new line temporarily.\n            error_message = exception_only[error_message_index][:-1]\n\n            if self._colorize:\n                if \":\" in error_message:\n                    exception_type, exception_value = error_message.split(\":\", 1)\n                    exception_type = self._theme[\"exception_type\"].format(exception_type)\n                    exception_value = self._theme[\"exception_value\"].format(exception_value)\n                    error_message = exception_type + \":\" + exception_value\n                else:\n                    error_message = self._theme[\"exception_type\"].format(error_message)\n\n            if self._diagnose and frames:\n                if issubclass(exc_type, AssertionError) and not str(exc_value) and final_source:\n                    if self._colorize:\n                        final_source = self._syntax_highlighter.highlight(final_source)\n                    error_message += \": \" + final_source\n\n                error_message = \"\\n\" + error_message\n\n            exception_only[error_message_index] = error_message + \"\\n\"\n\n        if is_first:\n            yield self._prefix\n\n        has_introduction = bool(frames)\n\n        if has_introduction:\n            if is_grouped:\n                introduction = \"Exception Group Traceback (most recent call last):\"\n            else:\n                introduction = \"Traceback (most recent call last):\"\n            if self._colorize:\n                introduction = self._theme[\"introduction\"].format(introduction)\n            if group_nesting == 1:  # Implies we're processing the root ExceptionGroup.\n                yield from self._indent(introduction + \"\\n\", group_nesting, prefix=\"+ \")\n            else:\n                yield from self._indent(introduction + \"\\n\", group_nesting)\n\n        frames_lines = self._format_list(frames) + exception_only\n        if self._colorize or self._backtrace or self._diagnose:\n            frames_lines = self._format_locations(frames_lines, has_introduction=has_introduction)\n\n        yield from self._indent(\"\".join(frames_lines), group_nesting)\n\n        if is_grouped:\n            exc = None\n            for n, exc in enumerate(value.exceptions, start=1):\n                ruler = \"+\" + (\" %s \" % (\"...\" if n > 15 else n)).center(35, \"-\")\n                yield from self._indent(ruler, group_nesting, prefix=\"+-\" if n == 1 else \"  \")\n                if n > 15:\n                    message = \"and %d more exceptions\\n\" % (len(value.exceptions) - 15)\n                    yield from self._indent(message, group_nesting + 1)\n                    break\n                elif group_nesting == 10 and is_exception_group(exc):\n                    message = \"... (max_group_depth is 10)\\n\"\n                    yield from self._indent(message, group_nesting + 1)\n                else:\n                    yield from self._format_exception(\n                        exc,\n                        exc.__traceback__,\n                        seen=seen,\n                        group_nesting=group_nesting + 1,\n                    )\n            if not is_exception_group(exc) or group_nesting == 10:\n                yield from self._indent(\"-\" * 35, group_nesting + 1, prefix=\"+-\")\n\n    def _format_list(self, frames):\n\n        def source_message(filename, lineno, name, line):\n            message = '  File \"%s\", line %d, in %s\\n' % (filename, lineno, name)\n            if line:\n                message += \"    %s\\n\" % line.strip()\n            return message\n\n        def skip_message(count):\n            plural = \"s\" if count > 1 else \"\"\n            return \"  [Previous line repeated %d more time%s]\\n\" % (count, plural)\n\n        result = []\n        count = 0\n        last_source = None\n\n        for *source, line in frames:\n            if source != last_source and count > 3:\n                result.append(skip_message(count - 3))\n\n            if source == last_source:\n                count += 1\n                if count > 3:\n                    continue\n            else:\n                count = 1\n\n            result.append(source_message(*source, line))\n            last_source = source\n\n        # Add a final skip message if the iteration of frames ended mid-repetition.\n        if count > 3:\n            result.append(skip_message(count - 3))\n\n        return result\n\n    def format_exception(self, type_, value, tb, *, from_decorator=False):\n        yield from self._format_exception(value, tb, is_first=True, from_decorator=from_decorator)\n"
  },
  {
    "path": "libs/loguru/_colorama.py",
    "content": "import builtins\nimport os\nimport sys\n\n\ndef should_colorize(stream):\n    if stream is None:\n        return False\n\n    if getattr(builtins, \"__IPYTHON__\", False) and (stream is sys.stdout or stream is sys.stderr):\n        try:\n            import ipykernel\n            import IPython\n\n            ipython = IPython.get_ipython()\n            is_jupyter_stream = isinstance(stream, ipykernel.iostream.OutStream)\n            is_jupyter_shell = isinstance(ipython, ipykernel.zmqshell.ZMQInteractiveShell)\n        except Exception:\n            pass\n        else:\n            if is_jupyter_stream and is_jupyter_shell:\n                return True\n\n    if stream is sys.__stdout__ or stream is sys.__stderr__:\n        if \"CI\" in os.environ and any(\n            ci in os.environ\n            for ci in [\"TRAVIS\", \"CIRCLECI\", \"APPVEYOR\", \"GITLAB_CI\", \"GITHUB_ACTIONS\"]\n        ):\n            return True\n        if \"PYCHARM_HOSTED\" in os.environ:\n            return True\n        if os.name == \"nt\" and \"TERM\" in os.environ:\n            return True\n\n    try:\n        return stream.isatty()\n    except Exception:\n        return False\n\n\ndef should_wrap(stream):\n    if os.name != \"nt\":\n        return False\n\n    if stream is not sys.__stdout__ and stream is not sys.__stderr__:\n        return False\n\n    from colorama.win32 import winapi_test\n\n    if not winapi_test():\n        return False\n\n    try:\n        from colorama.winterm import enable_vt_processing\n    except ImportError:\n        return True\n\n    try:\n        return not enable_vt_processing(stream.fileno())\n    except Exception:\n        return True\n\n\ndef wrap(stream):\n    from colorama import AnsiToWin32\n\n    return AnsiToWin32(stream, convert=True, strip=True, autoreset=False).stream\n"
  },
  {
    "path": "libs/loguru/_colorizer.py",
    "content": "import re\nfrom string import Formatter\n\n\nclass Style:\n    RESET_ALL = 0\n    BOLD = 1\n    DIM = 2\n    ITALIC = 3\n    UNDERLINE = 4\n    BLINK = 5\n    REVERSE = 7\n    HIDE = 8\n    STRIKE = 9\n    NORMAL = 22\n\n\nclass Fore:\n    BLACK = 30\n    RED = 31\n    GREEN = 32\n    YELLOW = 33\n    BLUE = 34\n    MAGENTA = 35\n    CYAN = 36\n    WHITE = 37\n    RESET = 39\n\n    LIGHTBLACK_EX = 90\n    LIGHTRED_EX = 91\n    LIGHTGREEN_EX = 92\n    LIGHTYELLOW_EX = 93\n    LIGHTBLUE_EX = 94\n    LIGHTMAGENTA_EX = 95\n    LIGHTCYAN_EX = 96\n    LIGHTWHITE_EX = 97\n\n\nclass Back:\n    BLACK = 40\n    RED = 41\n    GREEN = 42\n    YELLOW = 43\n    BLUE = 44\n    MAGENTA = 45\n    CYAN = 46\n    WHITE = 47\n    RESET = 49\n\n    LIGHTBLACK_EX = 100\n    LIGHTRED_EX = 101\n    LIGHTGREEN_EX = 102\n    LIGHTYELLOW_EX = 103\n    LIGHTBLUE_EX = 104\n    LIGHTMAGENTA_EX = 105\n    LIGHTCYAN_EX = 106\n    LIGHTWHITE_EX = 107\n\n\ndef ansi_escape(codes):\n    return {name: \"\\033[%dm\" % code for name, code in codes.items()}\n\n\nclass TokenType:\n    TEXT = 1\n    ANSI = 2\n    LEVEL = 3\n    CLOSING = 4\n\n\nclass AnsiParser:\n    _style = ansi_escape(\n        {\n            \"b\": Style.BOLD,\n            \"d\": Style.DIM,\n            \"n\": Style.NORMAL,\n            \"h\": Style.HIDE,\n            \"i\": Style.ITALIC,\n            \"l\": Style.BLINK,\n            \"s\": Style.STRIKE,\n            \"u\": Style.UNDERLINE,\n            \"v\": Style.REVERSE,\n            \"bold\": Style.BOLD,\n            \"dim\": Style.DIM,\n            \"normal\": Style.NORMAL,\n            \"hide\": Style.HIDE,\n            \"italic\": Style.ITALIC,\n            \"blink\": Style.BLINK,\n            \"strike\": Style.STRIKE,\n            \"underline\": Style.UNDERLINE,\n            \"reverse\": Style.REVERSE,\n        }\n    )\n\n    _foreground = ansi_escape(\n        {\n            \"k\": Fore.BLACK,\n            \"r\": Fore.RED,\n            \"g\": Fore.GREEN,\n            \"y\": Fore.YELLOW,\n            \"e\": Fore.BLUE,\n            \"m\": Fore.MAGENTA,\n            \"c\": Fore.CYAN,\n            \"w\": Fore.WHITE,\n            \"lk\": Fore.LIGHTBLACK_EX,\n            \"lr\": Fore.LIGHTRED_EX,\n            \"lg\": Fore.LIGHTGREEN_EX,\n            \"ly\": Fore.LIGHTYELLOW_EX,\n            \"le\": Fore.LIGHTBLUE_EX,\n            \"lm\": Fore.LIGHTMAGENTA_EX,\n            \"lc\": Fore.LIGHTCYAN_EX,\n            \"lw\": Fore.LIGHTWHITE_EX,\n            \"black\": Fore.BLACK,\n            \"red\": Fore.RED,\n            \"green\": Fore.GREEN,\n            \"yellow\": Fore.YELLOW,\n            \"blue\": Fore.BLUE,\n            \"magenta\": Fore.MAGENTA,\n            \"cyan\": Fore.CYAN,\n            \"white\": Fore.WHITE,\n            \"light-black\": Fore.LIGHTBLACK_EX,\n            \"light-red\": Fore.LIGHTRED_EX,\n            \"light-green\": Fore.LIGHTGREEN_EX,\n            \"light-yellow\": Fore.LIGHTYELLOW_EX,\n            \"light-blue\": Fore.LIGHTBLUE_EX,\n            \"light-magenta\": Fore.LIGHTMAGENTA_EX,\n            \"light-cyan\": Fore.LIGHTCYAN_EX,\n            \"light-white\": Fore.LIGHTWHITE_EX,\n        }\n    )\n\n    _background = ansi_escape(\n        {\n            \"K\": Back.BLACK,\n            \"R\": Back.RED,\n            \"G\": Back.GREEN,\n            \"Y\": Back.YELLOW,\n            \"E\": Back.BLUE,\n            \"M\": Back.MAGENTA,\n            \"C\": Back.CYAN,\n            \"W\": Back.WHITE,\n            \"LK\": Back.LIGHTBLACK_EX,\n            \"LR\": Back.LIGHTRED_EX,\n            \"LG\": Back.LIGHTGREEN_EX,\n            \"LY\": Back.LIGHTYELLOW_EX,\n            \"LE\": Back.LIGHTBLUE_EX,\n            \"LM\": Back.LIGHTMAGENTA_EX,\n            \"LC\": Back.LIGHTCYAN_EX,\n            \"LW\": Back.LIGHTWHITE_EX,\n            \"BLACK\": Back.BLACK,\n            \"RED\": Back.RED,\n            \"GREEN\": Back.GREEN,\n            \"YELLOW\": Back.YELLOW,\n            \"BLUE\": Back.BLUE,\n            \"MAGENTA\": Back.MAGENTA,\n            \"CYAN\": Back.CYAN,\n            \"WHITE\": Back.WHITE,\n            \"LIGHT-BLACK\": Back.LIGHTBLACK_EX,\n            \"LIGHT-RED\": Back.LIGHTRED_EX,\n            \"LIGHT-GREEN\": Back.LIGHTGREEN_EX,\n            \"LIGHT-YELLOW\": Back.LIGHTYELLOW_EX,\n            \"LIGHT-BLUE\": Back.LIGHTBLUE_EX,\n            \"LIGHT-MAGENTA\": Back.LIGHTMAGENTA_EX,\n            \"LIGHT-CYAN\": Back.LIGHTCYAN_EX,\n            \"LIGHT-WHITE\": Back.LIGHTWHITE_EX,\n        }\n    )\n\n    _regex_tag = re.compile(r\"(\\\\*)(</?(?:[fb]g\\s)?[^<>\\s]*>)\")\n\n    def __init__(self):\n        self._tokens = []\n        self._tags = []\n        self._color_tokens = []\n\n    @staticmethod\n    def strip(tokens):\n        output = \"\"\n        for type_, value in tokens:\n            if type_ == TokenType.TEXT:\n                output += value\n        return output\n\n    @staticmethod\n    def colorize(tokens, ansi_level):\n        output = \"\"\n\n        for type_, value in tokens:\n            if type_ == TokenType.LEVEL:\n                if ansi_level is None:\n                    raise ValueError(\n                        \"The '<level>' color tag is not allowed in this context, \"\n                        \"it has not yet been associated to any color value.\"\n                    )\n                value = ansi_level\n            output += value\n\n        return output\n\n    @staticmethod\n    def wrap(tokens, *, ansi_level, color_tokens):\n        output = \"\"\n\n        for type_, value in tokens:\n            if type_ == TokenType.LEVEL:\n                value = ansi_level\n            output += value\n            if type_ == TokenType.CLOSING:\n                for subtype, subvalue in color_tokens:\n                    if subtype == TokenType.LEVEL:\n                        subvalue = ansi_level\n                    output += subvalue\n\n        return output\n\n    def feed(self, text, *, raw=False):\n        if raw:\n            self._tokens.append((TokenType.TEXT, text))\n            return\n\n        position = 0\n\n        for match in self._regex_tag.finditer(text):\n            escaping, markup = match.group(1), match.group(2)\n\n            self._tokens.append((TokenType.TEXT, text[position : match.start()]))\n\n            position = match.end()\n\n            escaping_count = len(escaping)\n            backslashes = \"\\\\\" * (escaping_count // 2)\n\n            if escaping_count % 2 == 1:\n                self._tokens.append((TokenType.TEXT, backslashes + markup))\n                continue\n\n            if escaping_count > 0:\n                self._tokens.append((TokenType.TEXT, backslashes))\n\n            is_closing = markup[1] == \"/\"\n            tag = markup[2:-1] if is_closing else markup[1:-1]\n\n            if is_closing:\n                if self._tags and (tag == \"\" or tag == self._tags[-1]):\n                    self._tags.pop()\n                    self._color_tokens.pop()\n                    self._tokens.append((TokenType.CLOSING, \"\\033[0m\"))\n                    self._tokens.extend(self._color_tokens)\n                    continue\n                if tag in self._tags:\n                    raise ValueError('Closing tag \"%s\" violates nesting rules' % markup)\n                raise ValueError('Closing tag \"%s\" has no corresponding opening tag' % markup)\n\n            if tag in {\"lvl\", \"level\"}:\n                token = (TokenType.LEVEL, None)\n            else:\n                ansi = self._get_ansicode(tag)\n\n                if ansi is None:\n                    raise ValueError(\n                        'Tag \"%s\" does not correspond to any known color directive, '\n                        \"make sure you did not misspelled it (or prepend '\\\\' to escape it)\"\n                        % markup\n                    )\n\n                token = (TokenType.ANSI, ansi)\n\n            self._tags.append(tag)\n            self._color_tokens.append(token)\n            self._tokens.append(token)\n\n        self._tokens.append((TokenType.TEXT, text[position:]))\n\n    def done(self, *, strict=True):\n        if strict and self._tags:\n            faulty_tag = self._tags.pop(0)\n            raise ValueError('Opening tag \"<%s>\" has no corresponding closing tag' % faulty_tag)\n        return self._tokens\n\n    def current_color_tokens(self):\n        return list(self._color_tokens)\n\n    def _get_ansicode(self, tag):\n        style = self._style\n        foreground = self._foreground\n        background = self._background\n\n        # Substitute on a direct match.\n        if tag in style:\n            return style[tag]\n        if tag in foreground:\n            return foreground[tag]\n        if tag in background:\n            return background[tag]\n\n        # An alternative syntax for setting the color (e.g. <fg red>, <bg red>).\n        if tag.startswith(\"fg \") or tag.startswith(\"bg \"):\n            st, color = tag[:2], tag[3:]\n            code = \"38\" if st == \"fg\" else \"48\"\n\n            if st == \"fg\" and color.lower() in foreground:\n                return foreground[color.lower()]\n            if st == \"bg\" and color.upper() in background:\n                return background[color.upper()]\n            if color.isdigit() and int(color) <= 255:\n                return \"\\033[%s;5;%sm\" % (code, color)\n            if re.match(r\"#(?:[a-fA-F0-9]{3}){1,2}$\", color):\n                hex_color = color[1:]\n                if len(hex_color) == 3:\n                    hex_color *= 2\n                rgb = tuple(int(hex_color[i : i + 2], 16) for i in (0, 2, 4))\n                return \"\\033[%s;2;%s;%s;%sm\" % ((code, *rgb))\n            if color.count(\",\") == 2:\n                colors = tuple(color.split(\",\"))\n                if all(x.isdigit() and int(x) <= 255 for x in colors):\n                    return \"\\033[%s;2;%s;%s;%sm\" % ((code, *colors))\n\n        return None\n\n\nclass ColoringMessage(str):\n    __fields__ = (\"_messages\",)\n\n    def __format__(self, spec):\n        return next(self._messages).__format__(spec)\n\n\nclass ColoredMessage:\n    def __init__(self, tokens):\n        self.tokens = tokens\n        self.stripped = AnsiParser.strip(tokens)\n\n    def colorize(self, ansi_level):\n        return AnsiParser.colorize(self.tokens, ansi_level)\n\n\nclass ColoredFormat:\n    def __init__(self, tokens, messages_color_tokens):\n        self._tokens = tokens\n        self._messages_color_tokens = messages_color_tokens\n\n    def strip(self):\n        return AnsiParser.strip(self._tokens)\n\n    def colorize(self, ansi_level):\n        return AnsiParser.colorize(self._tokens, ansi_level)\n\n    def make_coloring_message(self, message, *, ansi_level, colored_message):\n        messages = [\n            (\n                message\n                if color_tokens is None\n                else AnsiParser.wrap(\n                    colored_message.tokens, ansi_level=ansi_level, color_tokens=color_tokens\n                )\n            )\n            for color_tokens in self._messages_color_tokens\n        ]\n        coloring = ColoringMessage(message)\n        coloring._messages = iter(messages)\n        return coloring\n\n\nclass Colorizer:\n    @staticmethod\n    def prepare_format(string):\n        tokens, messages_color_tokens = Colorizer._parse_without_formatting(string)\n        return ColoredFormat(tokens, messages_color_tokens)\n\n    @staticmethod\n    def prepare_message(string, args=(), kwargs={}):  # noqa: B006\n        tokens = Colorizer._parse_with_formatting(string, args, kwargs)\n        return ColoredMessage(tokens)\n\n    @staticmethod\n    def prepare_simple_message(string):\n        parser = AnsiParser()\n        parser.feed(string)\n        tokens = parser.done()\n        return ColoredMessage(tokens)\n\n    @staticmethod\n    def ansify(text):\n        parser = AnsiParser()\n        parser.feed(text.strip())\n        tokens = parser.done(strict=False)\n        return AnsiParser.colorize(tokens, None)\n\n    @staticmethod\n    def _parse_with_formatting(\n        string, args, kwargs, *, recursion_depth=2, auto_arg_index=0, recursive=False\n    ):\n        # This function re-implements Formatter._vformat()\n\n        if recursion_depth < 0:\n            raise ValueError(\"Max string recursion exceeded\")\n\n        formatter = Formatter()\n        parser = AnsiParser()\n\n        for literal_text, field_name, format_spec, conversion in formatter.parse(string):\n            parser.feed(literal_text, raw=recursive)\n\n            if field_name is not None:\n                if field_name == \"\":\n                    if auto_arg_index is False:\n                        raise ValueError(\n                            \"cannot switch from manual field \"\n                            \"specification to automatic field \"\n                            \"numbering\"\n                        )\n                    field_name = str(auto_arg_index)\n                    auto_arg_index += 1\n                elif field_name.isdigit():\n                    if auto_arg_index:\n                        raise ValueError(\n                            \"cannot switch from manual field \"\n                            \"specification to automatic field \"\n                            \"numbering\"\n                        )\n                    auto_arg_index = False\n\n                obj, _ = formatter.get_field(field_name, args, kwargs)\n                obj = formatter.convert_field(obj, conversion)\n\n                format_spec, auto_arg_index = Colorizer._parse_with_formatting(\n                    format_spec,\n                    args,\n                    kwargs,\n                    recursion_depth=recursion_depth - 1,\n                    auto_arg_index=auto_arg_index,\n                    recursive=True,\n                )\n\n                formatted = formatter.format_field(obj, format_spec)\n                parser.feed(formatted, raw=True)\n\n        tokens = parser.done()\n\n        if recursive:\n            return AnsiParser.strip(tokens), auto_arg_index\n\n        return tokens\n\n    @staticmethod\n    def _parse_without_formatting(string, *, recursion_depth=2, recursive=False):\n        if recursion_depth < 0:\n            raise ValueError(\"Max string recursion exceeded\")\n\n        formatter = Formatter()\n        parser = AnsiParser()\n\n        messages_color_tokens = []\n\n        for literal_text, field_name, format_spec, conversion in formatter.parse(string):\n            if literal_text and literal_text[-1] in \"{}\":\n                literal_text += literal_text[-1]\n\n            parser.feed(literal_text, raw=recursive)\n\n            if field_name is not None:\n                if field_name == \"message\":\n                    if recursive:\n                        messages_color_tokens.append(None)\n                    else:\n                        color_tokens = parser.current_color_tokens()\n                        messages_color_tokens.append(color_tokens)\n                field = \"{%s\" % field_name\n                if conversion:\n                    field += \"!%s\" % conversion\n                if format_spec:\n                    field += \":%s\" % format_spec\n                field += \"}\"\n                parser.feed(field, raw=True)\n\n                _, color_tokens = Colorizer._parse_without_formatting(\n                    format_spec, recursion_depth=recursion_depth - 1, recursive=True\n                )\n                messages_color_tokens.extend(color_tokens)\n\n        return parser.done(), messages_color_tokens\n"
  },
  {
    "path": "libs/loguru/_contextvars.py",
    "content": "import sys\n\n\ndef load_contextvar_class():\n    if sys.version_info >= (3, 7):\n        from contextvars import ContextVar\n    elif sys.version_info >= (3, 5, 3):\n        from aiocontextvars import ContextVar\n    else:\n        from contextvars import ContextVar\n\n    return ContextVar\n\n\nContextVar = load_contextvar_class()\n"
  },
  {
    "path": "libs/loguru/_ctime_functions.py",
    "content": "import os\n\n\ndef load_ctime_functions():\n    if os.name == \"nt\":\n        import win32_setctime\n\n        def get_ctime_windows(filepath):\n            return os.stat(filepath).st_ctime\n\n        def set_ctime_windows(filepath, timestamp):\n            if not win32_setctime.SUPPORTED:\n                return\n\n            try:\n                win32_setctime.setctime(filepath, timestamp)\n            except (OSError, ValueError):\n                pass\n\n        return get_ctime_windows, set_ctime_windows\n\n    if hasattr(os.stat_result, \"st_birthtime\"):\n\n        def get_ctime_macos(filepath):\n            return os.stat(filepath).st_birthtime\n\n        def set_ctime_macos(filepath, timestamp):\n            pass\n\n        return get_ctime_macos, set_ctime_macos\n\n    if hasattr(os, \"getxattr\") and hasattr(os, \"setxattr\"):\n\n        def get_ctime_linux(filepath):\n            try:\n                return float(os.getxattr(filepath, b\"user.loguru_crtime\"))\n            except OSError:\n                return os.stat(filepath).st_mtime\n\n        def set_ctime_linux(filepath, timestamp):\n            try:\n                os.setxattr(filepath, b\"user.loguru_crtime\", str(timestamp).encode(\"ascii\"))\n            except OSError:\n                pass\n\n        return get_ctime_linux, set_ctime_linux\n\n    def get_ctime_fallback(filepath):\n        return os.stat(filepath).st_mtime\n\n    def set_ctime_fallback(filepath, timestamp):\n        pass\n\n    return get_ctime_fallback, set_ctime_fallback\n\n\nget_ctime, set_ctime = load_ctime_functions()\n"
  },
  {
    "path": "libs/loguru/_datetime.py",
    "content": "import re\nfrom calendar import day_abbr, day_name, month_abbr, month_name\nfrom datetime import datetime as datetime_\nfrom datetime import timedelta, timezone\nfrom functools import lru_cache, partial\nfrom time import localtime, strftime\n\ntokens = r\"H{1,2}|h{1,2}|m{1,2}|s{1,2}|S+|YYYY|YY|M{1,4}|D{1,4}|Z{1,2}|zz|A|X|x|E|Q|dddd|ddd|d\"\n\npattern = re.compile(r\"(?:{0})|\\[(?:{0}|!UTC|)\\]\".format(tokens))\n\n\ndef _builtin_datetime_formatter(is_utc, format_string, dt):\n    if is_utc:\n        dt = dt.astimezone(timezone.utc)\n    return dt.strftime(format_string)\n\n\ndef _loguru_datetime_formatter(is_utc, format_string, formatters, dt):\n    if is_utc:\n        dt = dt.astimezone(timezone.utc)\n    t = dt.timetuple()\n    args = tuple(f(t, dt) for f in formatters)\n    return format_string % args\n\n\ndef _default_datetime_formatter(dt):\n    return \"%04d-%02d-%02d %02d:%02d:%02d.%03d\" % (\n        dt.year,\n        dt.month,\n        dt.day,\n        dt.hour,\n        dt.minute,\n        dt.second,\n        dt.microsecond // 1000,\n    )\n\n\ndef _format_timezone(tzinfo, *, sep):\n    offset = tzinfo.utcoffset(None).total_seconds()\n    sign = \"+\" if offset >= 0 else \"-\"\n    (h, m), s = divmod(abs(offset // 60), 60), abs(offset) % 60\n    z = \"%s%02d%s%02d\" % (sign, h, sep, m)\n    if s > 0:\n        if s.is_integer():\n            z += \"%s%02d\" % (sep, s)\n        else:\n            z += \"%s%09.06f\" % (sep, s)\n    return z\n\n\n@lru_cache(maxsize=32)\ndef _compile_format(spec):\n    if spec == \"YYYY-MM-DD HH:mm:ss.SSS\":\n        return _default_datetime_formatter\n\n    is_utc = spec.endswith(\"!UTC\")\n\n    if is_utc:\n        spec = spec[:-4]\n\n    if not spec:\n        spec = \"%Y-%m-%dT%H:%M:%S.%f%z\"\n\n    if \"%\" in spec:\n        return partial(_builtin_datetime_formatter, is_utc, spec)\n\n    if \"SSSSSSS\" in spec:\n        raise ValueError(\n            \"Invalid time format: the provided format string contains more than six successive \"\n            \"'S' characters. This may be due to an attempt to use nanosecond precision, which \"\n            \"is not supported.\"\n        )\n\n    rep = {\n        \"YYYY\": (\"%04d\", lambda t, dt: t.tm_year),\n        \"YY\": (\"%02d\", lambda t, dt: t.tm_year % 100),\n        \"Q\": (\"%d\", lambda t, dt: (t.tm_mon - 1) // 3 + 1),\n        \"MMMM\": (\"%s\", lambda t, dt: month_name[t.tm_mon]),\n        \"MMM\": (\"%s\", lambda t, dt: month_abbr[t.tm_mon]),\n        \"MM\": (\"%02d\", lambda t, dt: t.tm_mon),\n        \"M\": (\"%d\", lambda t, dt: t.tm_mon),\n        \"DDDD\": (\"%03d\", lambda t, dt: t.tm_yday),\n        \"DDD\": (\"%d\", lambda t, dt: t.tm_yday),\n        \"DD\": (\"%02d\", lambda t, dt: t.tm_mday),\n        \"D\": (\"%d\", lambda t, dt: t.tm_mday),\n        \"dddd\": (\"%s\", lambda t, dt: day_name[t.tm_wday]),\n        \"ddd\": (\"%s\", lambda t, dt: day_abbr[t.tm_wday]),\n        \"d\": (\"%d\", lambda t, dt: t.tm_wday),\n        \"E\": (\"%d\", lambda t, dt: t.tm_wday + 1),\n        \"HH\": (\"%02d\", lambda t, dt: t.tm_hour),\n        \"H\": (\"%d\", lambda t, dt: t.tm_hour),\n        \"hh\": (\"%02d\", lambda t, dt: (t.tm_hour - 1) % 12 + 1),\n        \"h\": (\"%d\", lambda t, dt: (t.tm_hour - 1) % 12 + 1),\n        \"mm\": (\"%02d\", lambda t, dt: t.tm_min),\n        \"m\": (\"%d\", lambda t, dt: t.tm_min),\n        \"ss\": (\"%02d\", lambda t, dt: t.tm_sec),\n        \"s\": (\"%d\", lambda t, dt: t.tm_sec),\n        \"S\": (\"%d\", lambda t, dt: dt.microsecond // 100000),\n        \"SS\": (\"%02d\", lambda t, dt: dt.microsecond // 10000),\n        \"SSS\": (\"%03d\", lambda t, dt: dt.microsecond // 1000),\n        \"SSSS\": (\"%04d\", lambda t, dt: dt.microsecond // 100),\n        \"SSSSS\": (\"%05d\", lambda t, dt: dt.microsecond // 10),\n        \"SSSSSS\": (\"%06d\", lambda t, dt: dt.microsecond),\n        \"A\": (\"%s\", lambda t, dt: \"AM\" if t.tm_hour < 12 else \"PM\"),\n        \"Z\": (\"%s\", lambda t, dt: _format_timezone(dt.tzinfo or timezone.utc, sep=\":\")),\n        \"ZZ\": (\"%s\", lambda t, dt: _format_timezone(dt.tzinfo or timezone.utc, sep=\"\")),\n        \"zz\": (\"%s\", lambda t, dt: (dt.tzinfo or timezone.utc).tzname(dt) or \"\"),\n        \"X\": (\"%d\", lambda t, dt: dt.timestamp()),\n        \"x\": (\"%d\", lambda t, dt: int(dt.timestamp() * 1000000 + dt.microsecond)),\n    }\n\n    format_string = \"\"\n    formatters = []\n    pos = 0\n\n    for match in pattern.finditer(spec):\n        start, end = match.span()\n        format_string += spec[pos:start]\n        pos = end\n\n        token = match.group(0)\n\n        try:\n            specifier, formatter = rep[token]\n        except KeyError:\n            format_string += token[1:-1]\n        else:\n            format_string += specifier\n            formatters.append(formatter)\n\n    format_string += spec[pos:]\n\n    return partial(_loguru_datetime_formatter, is_utc, format_string, formatters)\n\n\nclass datetime(datetime_):  # noqa: N801\n\n    def __format__(self, fmt):\n        return _compile_format(fmt)(self)\n\n\ndef aware_now():\n    now = datetime_.now()\n    timestamp = now.timestamp()\n    local = localtime(timestamp)\n\n    try:\n        seconds = local.tm_gmtoff\n        zone = local.tm_zone\n    except AttributeError:\n        # Workaround for Python 3.5.\n        utc_naive = datetime_.fromtimestamp(timestamp, tz=timezone.utc).replace(tzinfo=None)\n        offset = datetime_.fromtimestamp(timestamp) - utc_naive\n        seconds = offset.total_seconds()\n        zone = strftime(\"%Z\")\n\n    tzinfo = timezone(timedelta(seconds=seconds), zone)\n\n    return datetime.combine(now.date(), now.time().replace(tzinfo=tzinfo))\n"
  },
  {
    "path": "libs/loguru/_defaults.py",
    "content": "from os import environ\n\n\ndef env(key, type_, default=None):\n    if key not in environ:\n        return default\n\n    val = environ[key]\n\n    if type_ is str:\n        return val\n    if type_ is bool:\n        if val.lower() in [\"1\", \"true\", \"yes\", \"y\", \"ok\", \"on\"]:\n            return True\n        if val.lower() in [\"0\", \"false\", \"no\", \"n\", \"nok\", \"off\"]:\n            return False\n        raise ValueError(\n            \"Invalid environment variable '%s' (expected a boolean): '%s'\" % (key, val)\n        )\n    if type_ is int:\n        try:\n            return int(val)\n        except ValueError:\n            raise ValueError(\n                \"Invalid environment variable '%s' (expected an integer): '%s'\" % (key, val)\n            ) from None\n    raise ValueError(\"The requested type '%s' is not supported\" % type_.__name__)\n\n\nLOGURU_AUTOINIT = env(\"LOGURU_AUTOINIT\", bool, True)\n\nLOGURU_FORMAT = env(\n    \"LOGURU_FORMAT\",\n    str,\n    \"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | \"\n    \"<level>{level: <8}</level> | \"\n    \"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>\",\n)\nLOGURU_FILTER = env(\"LOGURU_FILTER\", str, None)\nLOGURU_LEVEL = env(\"LOGURU_LEVEL\", str, \"DEBUG\")\nLOGURU_COLORIZE = env(\"LOGURU_COLORIZE\", bool, None)\nLOGURU_SERIALIZE = env(\"LOGURU_SERIALIZE\", bool, False)\nLOGURU_BACKTRACE = env(\"LOGURU_BACKTRACE\", bool, True)\nLOGURU_DIAGNOSE = env(\"LOGURU_DIAGNOSE\", bool, True)\nLOGURU_ENQUEUE = env(\"LOGURU_ENQUEUE\", bool, False)\nLOGURU_CONTEXT = env(\"LOGURU_CONTEXT\", str, None)\nLOGURU_CATCH = env(\"LOGURU_CATCH\", bool, True)\n\nLOGURU_TRACE_NO = env(\"LOGURU_TRACE_NO\", int, 5)\nLOGURU_TRACE_COLOR = env(\"LOGURU_TRACE_COLOR\", str, \"<cyan><bold>\")\nLOGURU_TRACE_ICON = env(\"LOGURU_TRACE_ICON\", str, \"\\u270F\\uFE0F\")  # Pencil\n\nLOGURU_DEBUG_NO = env(\"LOGURU_DEBUG_NO\", int, 10)\nLOGURU_DEBUG_COLOR = env(\"LOGURU_DEBUG_COLOR\", str, \"<blue><bold>\")\nLOGURU_DEBUG_ICON = env(\"LOGURU_DEBUG_ICON\", str, \"\\U0001F41E\")  # Lady Beetle\n\nLOGURU_INFO_NO = env(\"LOGURU_INFO_NO\", int, 20)\nLOGURU_INFO_COLOR = env(\"LOGURU_INFO_COLOR\", str, \"<bold>\")\nLOGURU_INFO_ICON = env(\"LOGURU_INFO_ICON\", str, \"\\u2139\\uFE0F\")  # Information\n\nLOGURU_SUCCESS_NO = env(\"LOGURU_SUCCESS_NO\", int, 25)\nLOGURU_SUCCESS_COLOR = env(\"LOGURU_SUCCESS_COLOR\", str, \"<green><bold>\")\nLOGURU_SUCCESS_ICON = env(\"LOGURU_SUCCESS_ICON\", str, \"\\u2705\")  # White Heavy Check Mark\n\nLOGURU_WARNING_NO = env(\"LOGURU_WARNING_NO\", int, 30)\nLOGURU_WARNING_COLOR = env(\"LOGURU_WARNING_COLOR\", str, \"<yellow><bold>\")\nLOGURU_WARNING_ICON = env(\"LOGURU_WARNING_ICON\", str, \"\\u26A0\\uFE0F\")  # Warning\n\nLOGURU_ERROR_NO = env(\"LOGURU_ERROR_NO\", int, 40)\nLOGURU_ERROR_COLOR = env(\"LOGURU_ERROR_COLOR\", str, \"<red><bold>\")\nLOGURU_ERROR_ICON = env(\"LOGURU_ERROR_ICON\", str, \"\\u274C\")  # Cross Mark\n\nLOGURU_CRITICAL_NO = env(\"LOGURU_CRITICAL_NO\", int, 50)\nLOGURU_CRITICAL_COLOR = env(\"LOGURU_CRITICAL_COLOR\", str, \"<RED><bold>\")\nLOGURU_CRITICAL_ICON = env(\"LOGURU_CRITICAL_ICON\", str, \"\\u2620\\uFE0F\")  # Skull and Crossbones\n"
  },
  {
    "path": "libs/loguru/_error_interceptor.py",
    "content": "import sys\nimport traceback\n\n\nclass ErrorInterceptor:\n    def __init__(self, should_catch, handler_id):\n        self._should_catch = should_catch\n        self._handler_id = handler_id\n\n    def should_catch(self):\n        return self._should_catch\n\n    def print(self, record=None, *, exception=None):\n        if not sys.stderr:\n            return\n\n        if exception is None:\n            type_, value, traceback_ = sys.exc_info()\n        else:\n            type_, value, traceback_ = (type(exception), exception, exception.__traceback__)\n\n        try:\n            sys.stderr.write(\"--- Logging error in Loguru Handler #%d ---\\n\" % self._handler_id)\n            try:\n                record_repr = str(record)\n            except Exception:\n                record_repr = \"/!\\\\ Unprintable record /!\\\\\"\n            sys.stderr.write(\"Record was: %s\\n\" % record_repr)\n            traceback.print_exception(type_, value, traceback_, None, sys.stderr)\n            sys.stderr.write(\"--- End of logging error ---\\n\")\n        except OSError:\n            pass\n        finally:\n            del type_, value, traceback_\n"
  },
  {
    "path": "libs/loguru/_file_sink.py",
    "content": "import datetime\nimport decimal\nimport glob\nimport numbers\nimport os\nimport shutil\nimport string\nfrom functools import partial\nfrom stat import ST_DEV, ST_INO\n\nfrom . import _string_parsers as string_parsers\nfrom ._ctime_functions import get_ctime, set_ctime\nfrom ._datetime import aware_now\n\n\ndef generate_rename_path(root, ext, creation_time):\n    creation_datetime = datetime.datetime.fromtimestamp(creation_time)\n    date = FileDateFormatter(creation_datetime)\n\n    renamed_path = \"{}.{}{}\".format(root, date, ext)\n    counter = 1\n\n    while os.path.exists(renamed_path):\n        counter += 1\n        renamed_path = \"{}.{}.{}{}\".format(root, date, counter, ext)\n\n    return renamed_path\n\n\nclass FileDateFormatter:\n    def __init__(self, datetime=None):\n        self.datetime = datetime or aware_now()\n\n    def __format__(self, spec):\n        if not spec:\n            spec = \"%Y-%m-%d_%H-%M-%S_%f\"\n        return self.datetime.__format__(spec)\n\n\nclass Compression:\n    @staticmethod\n    def add_compress(path_in, path_out, opener, **kwargs):\n        with opener(path_out, **kwargs) as f_comp:\n            f_comp.add(path_in, os.path.basename(path_in))\n\n    @staticmethod\n    def write_compress(path_in, path_out, opener, **kwargs):\n        with opener(path_out, **kwargs) as f_comp:\n            f_comp.write(path_in, os.path.basename(path_in))\n\n    @staticmethod\n    def copy_compress(path_in, path_out, opener, **kwargs):\n        with open(path_in, \"rb\") as f_in:\n            with opener(path_out, **kwargs) as f_out:\n                shutil.copyfileobj(f_in, f_out)\n\n    @staticmethod\n    def compression(path_in, ext, compress_function):\n        path_out = \"{}{}\".format(path_in, ext)\n\n        if os.path.exists(path_out):\n            creation_time = get_ctime(path_out)\n            root, ext_before = os.path.splitext(path_in)\n            renamed_path = generate_rename_path(root, ext_before + ext, creation_time)\n            os.rename(path_out, renamed_path)\n        compress_function(path_in, path_out)\n        os.remove(path_in)\n\n\nclass Retention:\n    @staticmethod\n    def retention_count(logs, number):\n        def key_log(log):\n            return (-os.stat(log).st_mtime, log)\n\n        for log in sorted(logs, key=key_log)[number:]:\n            os.remove(log)\n\n    @staticmethod\n    def retention_age(logs, seconds):\n        t = datetime.datetime.now().timestamp()\n        for log in logs:\n            if os.stat(log).st_mtime <= t - seconds:\n                os.remove(log)\n\n\nclass Rotation:\n    @staticmethod\n    def forward_day(t):\n        return t + datetime.timedelta(days=1)\n\n    @staticmethod\n    def forward_weekday(t, weekday):\n        while True:\n            t += datetime.timedelta(days=1)\n            if t.weekday() == weekday:\n                return t\n\n    @staticmethod\n    def forward_interval(t, interval):\n        return t + interval\n\n    @staticmethod\n    def rotation_size(message, file, size_limit):\n        file.seek(0, 2)\n        return file.tell() + len(message) > size_limit\n\n    class RotationTime:\n        def __init__(self, step_forward, time_init=None):\n            self._step_forward = step_forward\n            self._time_init = time_init\n            self._limit = None\n\n        def __call__(self, message, file):\n            record_time = message.record[\"time\"]\n\n            if self._limit is None:\n                filepath = os.path.realpath(file.name)\n                creation_time = get_ctime(filepath)\n                set_ctime(filepath, creation_time)\n                start_time = datetime.datetime.fromtimestamp(\n                    creation_time, tz=datetime.timezone.utc\n                )\n\n                time_init = self._time_init\n\n                if time_init is None:\n                    limit = start_time.astimezone(record_time.tzinfo).replace(tzinfo=None)\n                    limit = self._step_forward(limit)\n                else:\n                    tzinfo = record_time.tzinfo if time_init.tzinfo is None else time_init.tzinfo\n                    limit = start_time.astimezone(tzinfo).replace(\n                        hour=time_init.hour,\n                        minute=time_init.minute,\n                        second=time_init.second,\n                        microsecond=time_init.microsecond,\n                    )\n\n                    if limit <= start_time:\n                        limit = self._step_forward(limit)\n\n                    if time_init.tzinfo is None:\n                        limit = limit.replace(tzinfo=None)\n\n                self._limit = limit\n\n            if self._limit.tzinfo is None:\n                record_time = record_time.replace(tzinfo=None)\n\n            if record_time >= self._limit:\n                while self._limit <= record_time:\n                    self._limit = self._step_forward(self._limit)\n                return True\n            return False\n\n\nclass FileSink:\n    def __init__(\n        self,\n        path,\n        *,\n        rotation=None,\n        retention=None,\n        compression=None,\n        delay=False,\n        watch=False,\n        mode=\"a\",\n        buffering=1,\n        encoding=\"utf8\",\n        **kwargs\n    ):\n        self.encoding = encoding\n\n        self._kwargs = {**kwargs, \"mode\": mode, \"buffering\": buffering, \"encoding\": self.encoding}\n        self._path = str(path)\n\n        self._glob_patterns = self._make_glob_patterns(self._path)\n        self._rotation_function = self._make_rotation_function(rotation)\n        self._retention_function = self._make_retention_function(retention)\n        self._compression_function = self._make_compression_function(compression)\n\n        self._file = None\n        self._file_path = None\n\n        self._watch = watch\n        self._file_dev = -1\n        self._file_ino = -1\n\n        if not delay:\n            path = self._create_path()\n            self._create_dirs(path)\n            self._create_file(path)\n\n    def write(self, message):\n        if self._file is None:\n            path = self._create_path()\n            self._create_dirs(path)\n            self._create_file(path)\n\n        if self._watch:\n            self._reopen_if_needed()\n\n        if self._rotation_function is not None and self._rotation_function(message, self._file):\n            self._terminate_file(is_rotating=True)\n\n        self._file.write(message)\n\n    def stop(self):\n        if self._watch:\n            self._reopen_if_needed()\n\n        self._terminate_file(is_rotating=False)\n\n    def tasks_to_complete(self):\n        return []\n\n    def _create_path(self):\n        path = self._path.format_map({\"time\": FileDateFormatter()})\n        return os.path.abspath(path)\n\n    def _create_dirs(self, path):\n        dirname = os.path.dirname(path)\n        os.makedirs(dirname, exist_ok=True)\n\n    def _create_file(self, path):\n        self._file = open(path, **self._kwargs)\n        self._file_path = path\n\n        if self._watch:\n            fileno = self._file.fileno()\n            result = os.fstat(fileno)\n            self._file_dev = result[ST_DEV]\n            self._file_ino = result[ST_INO]\n\n    def _close_file(self):\n        self._file.flush()\n        self._file.close()\n\n        self._file = None\n        self._file_path = None\n        self._file_dev = -1\n        self._file_ino = -1\n\n    def _reopen_if_needed(self):\n        # Implemented based on standard library:\n        # https://github.com/python/cpython/blob/cb589d1b/Lib/logging/handlers.py#L486\n        if not self._file:\n            return\n\n        filepath = self._file_path\n\n        try:\n            result = os.stat(filepath)\n        except FileNotFoundError:\n            result = None\n\n        if not result or result[ST_DEV] != self._file_dev or result[ST_INO] != self._file_ino:\n            self._close_file()\n            self._create_dirs(filepath)\n            self._create_file(filepath)\n\n    def _terminate_file(self, *, is_rotating=False):\n        old_path = self._file_path\n\n        if self._file is not None:\n            self._close_file()\n\n        if is_rotating:\n            new_path = self._create_path()\n            self._create_dirs(new_path)\n\n            if new_path == old_path:\n                creation_time = get_ctime(old_path)\n                root, ext = os.path.splitext(old_path)\n                renamed_path = generate_rename_path(root, ext, creation_time)\n                os.rename(old_path, renamed_path)\n                old_path = renamed_path\n\n        if is_rotating or self._rotation_function is None:\n            if self._compression_function is not None and old_path is not None:\n                self._compression_function(old_path)\n\n            if self._retention_function is not None:\n                logs = {\n                    file\n                    for pattern in self._glob_patterns\n                    for file in glob.glob(pattern)\n                    if os.path.isfile(file)\n                }\n                self._retention_function(list(logs))\n\n        if is_rotating:\n            self._create_file(new_path)\n            set_ctime(new_path, datetime.datetime.now().timestamp())\n\n    @staticmethod\n    def _make_glob_patterns(path):\n        formatter = string.Formatter()\n        tokens = formatter.parse(path)\n        escaped = \"\".join(glob.escape(text) + \"*\" * (name is not None) for text, name, *_ in tokens)\n\n        root, ext = os.path.splitext(escaped)\n\n        if not ext:\n            return [escaped, escaped + \".*\"]\n\n        return [escaped, escaped + \".*\", root + \".*\" + ext, root + \".*\" + ext + \".*\"]\n\n    @staticmethod\n    def _make_rotation_function(rotation):\n        if rotation is None:\n            return None\n        if isinstance(rotation, str):\n            size = string_parsers.parse_size(rotation)\n            if size is not None:\n                return FileSink._make_rotation_function(size)\n            interval = string_parsers.parse_duration(rotation)\n            if interval is not None:\n                return FileSink._make_rotation_function(interval)\n            frequency = string_parsers.parse_frequency(rotation)\n            if frequency is not None:\n                return Rotation.RotationTime(frequency)\n            daytime = string_parsers.parse_daytime(rotation)\n            if daytime is not None:\n                day, time = daytime\n                if day is None:\n                    return FileSink._make_rotation_function(time)\n                if time is None:\n                    time = datetime.time(0, 0, 0)\n                step_forward = partial(Rotation.forward_weekday, weekday=day)\n                return Rotation.RotationTime(step_forward, time)\n            raise ValueError(\"Cannot parse rotation from: '%s'\" % rotation)\n        if isinstance(rotation, (numbers.Real, decimal.Decimal)):\n            return partial(Rotation.rotation_size, size_limit=rotation)\n        if isinstance(rotation, datetime.time):\n            return Rotation.RotationTime(Rotation.forward_day, rotation)\n        if isinstance(rotation, datetime.timedelta):\n            step_forward = partial(Rotation.forward_interval, interval=rotation)\n            return Rotation.RotationTime(step_forward)\n        if callable(rotation):\n            return rotation\n        raise TypeError(\"Cannot infer rotation for objects of type: '%s'\" % type(rotation).__name__)\n\n    @staticmethod\n    def _make_retention_function(retention):\n        if retention is None:\n            return None\n        if isinstance(retention, str):\n            interval = string_parsers.parse_duration(retention)\n            if interval is None:\n                raise ValueError(\"Cannot parse retention from: '%s'\" % retention)\n            return FileSink._make_retention_function(interval)\n        if isinstance(retention, int):\n            return partial(Retention.retention_count, number=retention)\n        if isinstance(retention, datetime.timedelta):\n            return partial(Retention.retention_age, seconds=retention.total_seconds())\n        if callable(retention):\n            return retention\n        raise TypeError(\n            \"Cannot infer retention for objects of type: '%s'\" % type(retention).__name__\n        )\n\n    @staticmethod\n    def _make_compression_function(compression):\n        if compression is None:\n            return None\n        if isinstance(compression, str):\n            ext = compression.strip().lstrip(\".\")\n\n            if ext == \"gz\":\n                import gzip\n\n                compress = partial(Compression.copy_compress, opener=gzip.open, mode=\"wb\")\n            elif ext == \"bz2\":\n                import bz2\n\n                compress = partial(Compression.copy_compress, opener=bz2.open, mode=\"wb\")\n\n            elif ext == \"xz\":\n                import lzma\n\n                compress = partial(\n                    Compression.copy_compress, opener=lzma.open, mode=\"wb\", format=lzma.FORMAT_XZ\n                )\n\n            elif ext == \"lzma\":\n                import lzma\n\n                compress = partial(\n                    Compression.copy_compress, opener=lzma.open, mode=\"wb\", format=lzma.FORMAT_ALONE\n                )\n            elif ext == \"tar\":\n                import tarfile\n\n                compress = partial(Compression.add_compress, opener=tarfile.open, mode=\"w:\")\n            elif ext == \"tar.gz\":\n                import gzip\n                import tarfile\n\n                compress = partial(Compression.add_compress, opener=tarfile.open, mode=\"w:gz\")\n            elif ext == \"tar.bz2\":\n                import bz2\n                import tarfile\n\n                compress = partial(Compression.add_compress, opener=tarfile.open, mode=\"w:bz2\")\n\n            elif ext == \"tar.xz\":\n                import lzma\n                import tarfile\n\n                compress = partial(Compression.add_compress, opener=tarfile.open, mode=\"w:xz\")\n            elif ext == \"zip\":\n                import zipfile\n\n                compress = partial(\n                    Compression.write_compress,\n                    opener=zipfile.ZipFile,\n                    mode=\"w\",\n                    compression=zipfile.ZIP_DEFLATED,\n                )\n            else:\n                raise ValueError(\"Invalid compression format: '%s'\" % ext)\n\n            return partial(Compression.compression, ext=\".\" + ext, compress_function=compress)\n        if callable(compression):\n            return compression\n        raise TypeError(\n            \"Cannot infer compression for objects of type: '%s'\" % type(compression).__name__\n        )\n"
  },
  {
    "path": "libs/loguru/_filters.py",
    "content": "def filter_none(record):\n    return record[\"name\"] is not None\n\n\ndef filter_by_name(record, parent, length):\n    name = record[\"name\"]\n    if name is None:\n        return False\n    return (name + \".\")[:length] == parent\n\n\ndef filter_by_level(record, level_per_module):\n    name = record[\"name\"]\n\n    while True:\n        level = level_per_module.get(name, None)\n        if level is False:\n            return False\n        if level is not None:\n            return record[\"level\"].no >= level\n        if not name:\n            return True\n        index = name.rfind(\".\")\n        name = name[:index] if index != -1 else \"\"\n"
  },
  {
    "path": "libs/loguru/_get_frame.py",
    "content": "import sys\nfrom sys import exc_info\n\n\ndef get_frame_fallback(n):\n    try:\n        raise Exception\n    except Exception:\n        frame = exc_info()[2].tb_frame.f_back\n        for _ in range(n):\n            frame = frame.f_back\n        return frame\n\n\ndef load_get_frame_function():\n    if hasattr(sys, \"_getframe\"):\n        get_frame = sys._getframe\n    else:\n        get_frame = get_frame_fallback\n    return get_frame\n\n\nget_frame = load_get_frame_function()\n"
  },
  {
    "path": "libs/loguru/_handler.py",
    "content": "import functools\nimport json\nimport multiprocessing\nimport os\nimport threading\nfrom contextlib import contextmanager\nfrom threading import Thread\n\nfrom ._colorizer import Colorizer\nfrom ._locks_machinery import create_handler_lock\n\n\ndef prepare_colored_format(format_, ansi_level):\n    colored = Colorizer.prepare_format(format_)\n    return colored, colored.colorize(ansi_level)\n\n\ndef prepare_stripped_format(format_):\n    colored = Colorizer.prepare_format(format_)\n    return colored.strip()\n\n\ndef memoize(function):\n    return functools.lru_cache(maxsize=64)(function)\n\n\nclass Message(str):\n    __slots__ = (\"record\",)\n\n\nclass Handler:\n    def __init__(\n        self,\n        *,\n        sink,\n        name,\n        levelno,\n        formatter,\n        is_formatter_dynamic,\n        filter_,\n        colorize,\n        serialize,\n        enqueue,\n        multiprocessing_context,\n        error_interceptor,\n        exception_formatter,\n        id_,\n        levels_ansi_codes\n    ):\n        self._name = name\n        self._sink = sink\n        self._levelno = levelno\n        self._formatter = formatter\n        self._is_formatter_dynamic = is_formatter_dynamic\n        self._filter = filter_\n        self._colorize = colorize\n        self._serialize = serialize\n        self._enqueue = enqueue\n        self._multiprocessing_context = multiprocessing_context\n        self._error_interceptor = error_interceptor\n        self._exception_formatter = exception_formatter\n        self._id = id_\n        self._levels_ansi_codes = levels_ansi_codes  # Warning, reference shared among handlers\n\n        self._decolorized_format = None\n        self._precolorized_formats = {}\n        self._memoize_dynamic_format = None\n\n        self._stopped = False\n        self._lock = create_handler_lock()\n        self._lock_acquired = threading.local()\n        self._queue = None\n        self._queue_lock = None\n        self._confirmation_event = None\n        self._confirmation_lock = None\n        self._owner_process_pid = None\n        self._thread = None\n\n        if self._is_formatter_dynamic:\n            if self._colorize:\n                self._memoize_dynamic_format = memoize(prepare_colored_format)\n            else:\n                self._memoize_dynamic_format = memoize(prepare_stripped_format)\n        else:\n            if self._colorize:\n                for level_name in self._levels_ansi_codes:\n                    self.update_format(level_name)\n            else:\n                self._decolorized_format = self._formatter.strip()\n\n        if self._enqueue:\n            if self._multiprocessing_context is None:\n                self._queue = multiprocessing.SimpleQueue()\n                self._confirmation_event = multiprocessing.Event()\n                self._confirmation_lock = multiprocessing.Lock()\n            else:\n                self._queue = self._multiprocessing_context.SimpleQueue()\n                self._confirmation_event = self._multiprocessing_context.Event()\n                self._confirmation_lock = self._multiprocessing_context.Lock()\n            self._queue_lock = create_handler_lock()\n            self._owner_process_pid = os.getpid()\n            self._thread = Thread(\n                target=self._queued_writer, daemon=True, name=\"loguru-writer-%d\" % self._id\n            )\n            self._thread.start()\n\n    def __repr__(self):\n        return \"(id=%d, level=%d, sink=%s)\" % (self._id, self._levelno, self._name)\n\n    @contextmanager\n    def _protected_lock(self):\n        \"\"\"Acquire the lock, but fail fast if its already acquired by the current thread.\"\"\"\n        if getattr(self._lock_acquired, \"acquired\", False):\n            raise RuntimeError(\n                \"Could not acquire internal lock because it was already in use (deadlock avoided). \"\n                \"This likely happened because the logger was re-used inside a sink, a signal \"\n                \"handler or a '__del__' method. This is not permitted because the logger and its \"\n                \"handlers are not re-entrant.\"\n            )\n        self._lock_acquired.acquired = True\n        try:\n            with self._lock:\n                yield\n        finally:\n            self._lock_acquired.acquired = False\n\n    def emit(self, record, level_id, from_decorator, is_raw, colored_message):\n        try:\n            if self._levelno > record[\"level\"].no:\n                return\n\n            if self._filter is not None:\n                if not self._filter(record):\n                    return\n\n            if self._is_formatter_dynamic:\n                dynamic_format = self._formatter(record)\n\n            formatter_record = record.copy()\n\n            if not record[\"exception\"]:\n                formatter_record[\"exception\"] = \"\"\n            else:\n                type_, value, tb = record[\"exception\"]\n                formatter = self._exception_formatter\n                lines = formatter.format_exception(type_, value, tb, from_decorator=from_decorator)\n                formatter_record[\"exception\"] = \"\".join(lines)\n\n            if colored_message is not None and colored_message.stripped != record[\"message\"]:\n                colored_message = None\n\n            if is_raw:\n                if colored_message is None or not self._colorize:\n                    formatted = record[\"message\"]\n                else:\n                    ansi_level = self._levels_ansi_codes[level_id]\n                    formatted = colored_message.colorize(ansi_level)\n            elif self._is_formatter_dynamic:\n                if not self._colorize:\n                    precomputed_format = self._memoize_dynamic_format(dynamic_format)\n                    formatted = precomputed_format.format_map(formatter_record)\n                elif colored_message is None:\n                    ansi_level = self._levels_ansi_codes[level_id]\n                    _, precomputed_format = self._memoize_dynamic_format(dynamic_format, ansi_level)\n                    formatted = precomputed_format.format_map(formatter_record)\n                else:\n                    ansi_level = self._levels_ansi_codes[level_id]\n                    formatter, precomputed_format = self._memoize_dynamic_format(\n                        dynamic_format, ansi_level\n                    )\n                    coloring_message = formatter.make_coloring_message(\n                        record[\"message\"], ansi_level=ansi_level, colored_message=colored_message\n                    )\n                    formatter_record[\"message\"] = coloring_message\n                    formatted = precomputed_format.format_map(formatter_record)\n\n            else:\n                if not self._colorize:\n                    precomputed_format = self._decolorized_format\n                    formatted = precomputed_format.format_map(formatter_record)\n                elif colored_message is None:\n                    ansi_level = self._levels_ansi_codes[level_id]\n                    precomputed_format = self._precolorized_formats[level_id]\n                    formatted = precomputed_format.format_map(formatter_record)\n                else:\n                    ansi_level = self._levels_ansi_codes[level_id]\n                    precomputed_format = self._precolorized_formats[level_id]\n                    coloring_message = self._formatter.make_coloring_message(\n                        record[\"message\"], ansi_level=ansi_level, colored_message=colored_message\n                    )\n                    formatter_record[\"message\"] = coloring_message\n                    formatted = precomputed_format.format_map(formatter_record)\n\n            if self._serialize:\n                formatted = self._serialize_record(formatted, record)\n\n            str_record = Message(formatted)\n            str_record.record = record\n\n            with self._protected_lock():\n                if self._stopped:\n                    return\n                if self._enqueue:\n                    self._queue.put(str_record)\n                else:\n                    self._sink.write(str_record)\n        except Exception:\n            if not self._error_interceptor.should_catch():\n                raise\n            self._error_interceptor.print(record)\n\n    def stop(self):\n        with self._protected_lock():\n            self._stopped = True\n            if self._enqueue:\n                if self._owner_process_pid != os.getpid():\n                    return\n                self._queue.put(None)\n                self._thread.join()\n                if hasattr(self._queue, \"close\"):\n                    self._queue.close()\n\n            self._sink.stop()\n\n    def complete_queue(self):\n        if not self._enqueue:\n            return\n\n        with self._confirmation_lock:\n            self._queue.put(True)\n            self._confirmation_event.wait()\n            self._confirmation_event.clear()\n\n    def tasks_to_complete(self):\n        if self._enqueue and self._owner_process_pid != os.getpid():\n            return []\n        lock = self._queue_lock if self._enqueue else self._protected_lock()\n        with lock:\n            return self._sink.tasks_to_complete()\n\n    def update_format(self, level_id):\n        if not self._colorize or self._is_formatter_dynamic:\n            return\n        ansi_code = self._levels_ansi_codes[level_id]\n        self._precolorized_formats[level_id] = self._formatter.colorize(ansi_code)\n\n    @property\n    def levelno(self):\n        return self._levelno\n\n    @staticmethod\n    def _serialize_record(text, record):\n        exception = record[\"exception\"]\n\n        if exception is not None:\n            exception = {\n                \"type\": None if exception.type is None else exception.type.__name__,\n                \"value\": exception.value,\n                \"traceback\": bool(exception.traceback),\n            }\n\n        serializable = {\n            \"text\": text,\n            \"record\": {\n                \"elapsed\": {\n                    \"repr\": record[\"elapsed\"],\n                    \"seconds\": record[\"elapsed\"].total_seconds(),\n                },\n                \"exception\": exception,\n                \"extra\": record[\"extra\"],\n                \"file\": {\"name\": record[\"file\"].name, \"path\": record[\"file\"].path},\n                \"function\": record[\"function\"],\n                \"level\": {\n                    \"icon\": record[\"level\"].icon,\n                    \"name\": record[\"level\"].name,\n                    \"no\": record[\"level\"].no,\n                },\n                \"line\": record[\"line\"],\n                \"message\": record[\"message\"],\n                \"module\": record[\"module\"],\n                \"name\": record[\"name\"],\n                \"process\": {\"id\": record[\"process\"].id, \"name\": record[\"process\"].name},\n                \"thread\": {\"id\": record[\"thread\"].id, \"name\": record[\"thread\"].name},\n                \"time\": {\"repr\": record[\"time\"], \"timestamp\": record[\"time\"].timestamp()},\n            },\n        }\n\n        return json.dumps(serializable, default=str, ensure_ascii=False) + \"\\n\"\n\n    def _queued_writer(self):\n        message = None\n        queue = self._queue\n\n        # We need to use a lock to protect sink during fork.\n        # Particularly, writing to stderr may lead to deadlock in child process.\n        lock = self._queue_lock\n\n        while True:\n            try:\n                message = queue.get()\n            except Exception:\n                with lock:\n                    self._error_interceptor.print(None)\n                continue\n\n            if message is None:\n                break\n\n            if message is True:\n                self._confirmation_event.set()\n                continue\n\n            with lock:\n                try:\n                    self._sink.write(message)\n                except Exception:\n                    self._error_interceptor.print(message.record)\n\n    def __getstate__(self):\n        state = self.__dict__.copy()\n        state[\"_lock\"] = None\n        state[\"_lock_acquired\"] = None\n        state[\"_memoize_dynamic_format\"] = None\n        if self._enqueue:\n            state[\"_sink\"] = None\n            state[\"_thread\"] = None\n            state[\"_owner_process\"] = None\n            state[\"_queue_lock\"] = None\n        return state\n\n    def __setstate__(self, state):\n        self.__dict__.update(state)\n        self._lock = create_handler_lock()\n        self._lock_acquired = threading.local()\n        if self._enqueue:\n            self._queue_lock = create_handler_lock()\n        if self._is_formatter_dynamic:\n            if self._colorize:\n                self._memoize_dynamic_format = memoize(prepare_colored_format)\n            else:\n                self._memoize_dynamic_format = memoize(prepare_stripped_format)\n"
  },
  {
    "path": "libs/loguru/_locks_machinery.py",
    "content": "import os\nimport threading\nimport weakref\n\nif not hasattr(os, \"register_at_fork\"):\n\n    def create_logger_lock():\n        return threading.Lock()\n\n    def create_handler_lock():\n        return threading.Lock()\n\nelse:\n    # While forking, we need to sanitize all locks to make sure the child process doesn't run into\n    # a deadlock (if a lock already acquired is inherited) and to protect sink from corrupted state.\n    # It's very important to acquire logger locks before handlers one to prevent possible deadlock\n    # while 'remove()' is called for example.\n\n    logger_locks = weakref.WeakSet()\n    handler_locks = weakref.WeakSet()\n\n    def acquire_locks():\n        for lock in logger_locks:\n            lock.acquire()\n\n        for lock in handler_locks:\n            lock.acquire()\n\n    def release_locks():\n        for lock in logger_locks:\n            lock.release()\n\n        for lock in handler_locks:\n            lock.release()\n\n    os.register_at_fork(\n        before=acquire_locks,\n        after_in_parent=release_locks,\n        after_in_child=release_locks,\n    )\n\n    def create_logger_lock():\n        lock = threading.Lock()\n        logger_locks.add(lock)\n        return lock\n\n    def create_handler_lock():\n        lock = threading.Lock()\n        handler_locks.add(lock)\n        return lock\n"
  },
  {
    "path": "libs/loguru/_logger.py",
    "content": "\"\"\"Core logging functionalities of the `Loguru` library.\n\n.. References and links rendered by Sphinx are kept here as \"module documentation\" so that they can\n   be used in the ``Logger`` docstrings but do not pollute ``help(logger)`` output.\n\n.. |Logger| replace:: :class:`~Logger`\n.. |add| replace:: :meth:`~Logger.add()`\n.. |remove| replace:: :meth:`~Logger.remove()`\n.. |complete| replace:: :meth:`~Logger.complete()`\n.. |catch| replace:: :meth:`~Logger.catch()`\n.. |bind| replace:: :meth:`~Logger.bind()`\n.. |contextualize| replace:: :meth:`~Logger.contextualize()`\n.. |patch| replace:: :meth:`~Logger.patch()`\n.. |opt| replace:: :meth:`~Logger.opt()`\n.. |log| replace:: :meth:`~Logger.log()`\n.. |level| replace:: :meth:`~Logger.level()`\n.. |enable| replace:: :meth:`~Logger.enable()`\n.. |disable| replace:: :meth:`~Logger.disable()`\n\n.. |Any| replace:: :obj:`~typing.Any`\n.. |str| replace:: :class:`str`\n.. |int| replace:: :class:`int`\n.. |bool| replace:: :class:`bool`\n.. |tuple| replace:: :class:`tuple`\n.. |namedtuple| replace:: :func:`namedtuple<collections.namedtuple>`\n.. |list| replace:: :class:`list`\n.. |dict| replace:: :class:`dict`\n.. |str.format| replace:: :meth:`str.format()`\n.. |Path| replace:: :class:`pathlib.Path`\n.. |match.groupdict| replace:: :meth:`re.Match.groupdict()`\n.. |Handler| replace:: :class:`logging.Handler`\n.. |sys.stderr| replace:: :data:`sys.stderr`\n.. |sys.exc_info| replace:: :func:`sys.exc_info()`\n.. |time| replace:: :class:`datetime.time`\n.. |datetime| replace:: :class:`datetime.datetime`\n.. |timedelta| replace:: :class:`datetime.timedelta`\n.. |open| replace:: :func:`open()`\n.. |logging| replace:: :mod:`logging`\n.. |signal| replace:: :mod:`signal`\n.. |contextvars| replace:: :mod:`contextvars`\n.. |multiprocessing| replace:: :mod:`multiprocessing`\n.. |Thread.run| replace:: :meth:`Thread.run()<threading.Thread.run()>`\n.. |Exception| replace:: :class:`Exception`\n.. |AbstractEventLoop| replace:: :class:`AbstractEventLoop<asyncio.AbstractEventLoop>`\n.. |asyncio.get_running_loop| replace:: :func:`asyncio.get_running_loop()`\n.. |asyncio.run| replace:: :func:`asyncio.run()`\n.. |loop.run_until_complete| replace::\n    :meth:`loop.run_until_complete()<asyncio.loop.run_until_complete()>`\n.. |loop.create_task| replace:: :meth:`loop.create_task()<asyncio.loop.create_task()>`\n\n.. |logger.trace| replace:: :meth:`logger.trace()<Logger.trace()>`\n.. |logger.debug| replace:: :meth:`logger.debug()<Logger.debug()>`\n.. |logger.info| replace:: :meth:`logger.info()<Logger.info()>`\n.. |logger.success| replace:: :meth:`logger.success()<Logger.success()>`\n.. |logger.warning| replace:: :meth:`logger.warning()<Logger.warning()>`\n.. |logger.error| replace:: :meth:`logger.error()<Logger.error()>`\n.. |logger.critical| replace:: :meth:`logger.critical()<Logger.critical()>`\n\n.. |file-like object| replace:: ``file-like object``\n.. _file-like object: https://docs.python.org/3/glossary.html#term-file-object\n.. |callable| replace:: ``callable``\n.. _callable: https://docs.python.org/3/library/functions.html#callable\n.. |coroutine function| replace:: ``coroutine function``\n.. _coroutine function: https://docs.python.org/3/glossary.html#term-coroutine-function\n.. |re.Pattern| replace:: ``re.Pattern``\n.. _re.Pattern: https://docs.python.org/3/library/re.html#re-objects\n.. |multiprocessing.Context| replace:: ``multiprocessing.Context``\n.. _multiprocessing.Context:\n   https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods\n\n.. |better_exceptions| replace:: ``better_exceptions``\n.. _better_exceptions: https://github.com/Qix-/better-exceptions\n\n.. |loguru-config| replace:: ``loguru-config``\n.. _loguru-config: https://github.com/erezinman/loguru-config\n\n.. _Pendulum: https://pendulum.eustace.io/docs/#tokens\n\n.. _@Qix-: https://github.com/Qix-\n.. _@erezinman: https://github.com/erezinman\n.. _@sdispater: https://github.com/sdispater\n\n.. _formatting directives: https://docs.python.org/3/library/string.html#format-string-syntax\n.. _reentrant: https://en.wikipedia.org/wiki/Reentrancy_(computing)\n\"\"\"\n\nimport builtins\nimport contextlib\nimport functools\nimport logging\nimport re\nimport sys\nimport threading\nimport warnings\nfrom collections import namedtuple\nfrom inspect import isclass, iscoroutinefunction, isgeneratorfunction\nfrom multiprocessing import current_process, get_context\nfrom multiprocessing.context import BaseContext\nfrom os.path import basename, splitext\nfrom threading import current_thread\n\nfrom . import _asyncio_loop, _colorama, _defaults, _filters\nfrom ._better_exceptions import ExceptionFormatter\nfrom ._colorizer import Colorizer\nfrom ._contextvars import ContextVar\nfrom ._datetime import aware_now\nfrom ._error_interceptor import ErrorInterceptor\nfrom ._file_sink import FileSink\nfrom ._get_frame import get_frame\nfrom ._handler import Handler\nfrom ._locks_machinery import create_logger_lock\nfrom ._recattrs import RecordException, RecordFile, RecordLevel, RecordProcess, RecordThread\nfrom ._simple_sinks import AsyncSink, CallableSink, StandardSink, StreamSink\n\nif sys.version_info >= (3, 6):\n    from os import PathLike\nelse:\n    from pathlib import PurePath as PathLike\n\n\nLevel = namedtuple(\"Level\", [\"name\", \"no\", \"color\", \"icon\"])  # noqa: PYI024\n\nstart_time = aware_now()\n\ncontext = ContextVar(\"loguru_context\", default={})\n\n\nclass Core:\n    def __init__(self):\n        levels = [\n            Level(\n                \"TRACE\",\n                _defaults.LOGURU_TRACE_NO,\n                _defaults.LOGURU_TRACE_COLOR,\n                _defaults.LOGURU_TRACE_ICON,\n            ),\n            Level(\n                \"DEBUG\",\n                _defaults.LOGURU_DEBUG_NO,\n                _defaults.LOGURU_DEBUG_COLOR,\n                _defaults.LOGURU_DEBUG_ICON,\n            ),\n            Level(\n                \"INFO\",\n                _defaults.LOGURU_INFO_NO,\n                _defaults.LOGURU_INFO_COLOR,\n                _defaults.LOGURU_INFO_ICON,\n            ),\n            Level(\n                \"SUCCESS\",\n                _defaults.LOGURU_SUCCESS_NO,\n                _defaults.LOGURU_SUCCESS_COLOR,\n                _defaults.LOGURU_SUCCESS_ICON,\n            ),\n            Level(\n                \"WARNING\",\n                _defaults.LOGURU_WARNING_NO,\n                _defaults.LOGURU_WARNING_COLOR,\n                _defaults.LOGURU_WARNING_ICON,\n            ),\n            Level(\n                \"ERROR\",\n                _defaults.LOGURU_ERROR_NO,\n                _defaults.LOGURU_ERROR_COLOR,\n                _defaults.LOGURU_ERROR_ICON,\n            ),\n            Level(\n                \"CRITICAL\",\n                _defaults.LOGURU_CRITICAL_NO,\n                _defaults.LOGURU_CRITICAL_COLOR,\n                _defaults.LOGURU_CRITICAL_ICON,\n            ),\n        ]\n        self.levels = {level.name: level for level in levels}\n        self.levels_ansi_codes = {\n            **{name: Colorizer.ansify(level.color) for name, level in self.levels.items()},\n            None: \"\",\n        }\n\n        # Cache used internally to quickly access level attributes based on their name or severity.\n        # It can also contain integers as keys, it serves to avoid calling \"isinstance()\" repeatedly\n        # when \"logger.log()\" is used.\n        self.levels_lookup = {\n            name: (name, name, level.no, level.icon) for name, level in self.levels.items()\n        }\n\n        self.handlers_count = 0\n        self.handlers = {}\n\n        self.extra = {}\n        self.patcher = None\n\n        self.min_level = float(\"inf\")\n        self.enabled = {}\n        self.activation_list = []\n        self.activation_none = True\n\n        self.thread_locals = threading.local()\n        self.lock = create_logger_lock()\n\n    def __getstate__(self):\n        state = self.__dict__.copy()\n        state[\"thread_locals\"] = None\n        state[\"lock\"] = None\n        return state\n\n    def __setstate__(self, state):\n        self.__dict__.update(state)\n        self.thread_locals = threading.local()\n        self.lock = create_logger_lock()\n\n\nclass Logger:\n    \"\"\"An object to dispatch logging messages to configured handlers.\n\n    The |Logger| is the core object of ``loguru``, every logging configuration and usage pass\n    through a call to one of its methods. There is only one logger, so there is no need to retrieve\n    one before usage.\n\n    Once the ``logger`` is imported, it can be used to write messages about events happening in your\n    code. By reading the output logs of your application, you gain a better understanding of the\n    flow of your program and you more easily track and debug unexpected behaviors.\n\n    Handlers to which the logger sends log messages are added using the |add| method. Note that you\n    can use the |Logger| right after import as it comes pre-configured (logs are emitted to\n    |sys.stderr| by default). Messages can be logged with different severity levels and they can be\n    formatted using curly braces (it uses |str.format| under the hood).\n\n    When a message is logged, a \"record\" is associated with it. This record is a dict which contains\n    information about the logging context: time, function, file, line, thread, level... It also\n    contains the ``__name__`` of the module, this is why you don't need named loggers.\n\n    You should not instantiate a |Logger| by yourself, use ``from loguru import logger`` instead.\n    \"\"\"\n\n    def __init__(self, core, exception, depth, record, lazy, colors, raw, capture, patchers, extra):\n        self._core = core\n        self._options = (exception, depth, record, lazy, colors, raw, capture, patchers, extra)\n\n    def __repr__(self):\n        return \"<loguru.logger handlers=%r>\" % list(self._core.handlers.values())\n\n    def add(\n        self,\n        sink,\n        *,\n        level=_defaults.LOGURU_LEVEL,\n        format=_defaults.LOGURU_FORMAT,\n        filter=_defaults.LOGURU_FILTER,\n        colorize=_defaults.LOGURU_COLORIZE,\n        serialize=_defaults.LOGURU_SERIALIZE,\n        backtrace=_defaults.LOGURU_BACKTRACE,\n        diagnose=_defaults.LOGURU_DIAGNOSE,\n        enqueue=_defaults.LOGURU_ENQUEUE,\n        context=_defaults.LOGURU_CONTEXT,\n        catch=_defaults.LOGURU_CATCH,\n        **kwargs\n    ):\n        r\"\"\"Add a handler sending log messages to a sink adequately configured.\n\n        Parameters\n        ----------\n        sink : |file-like object|_, |str|, |Path|, |callable|_, |coroutine function|_ or |Handler|\n            An object in charge of receiving formatted logging messages and propagating them to an\n            appropriate endpoint.\n        level : |int| or |str|, optional\n            The minimum severity level from which logged messages should be sent to the sink.\n        format : |str| or |callable|_, optional\n            The template used to format logged messages before being sent to the sink.\n        filter : |callable|_, |str| or |dict|, optional\n            A directive optionally used to decide for each logged message whether it should be sent\n            to the sink or not.\n        colorize : |bool|, optional\n            Whether the color markups contained in the formatted message should be converted to ansi\n            codes for terminal coloration, or stripped otherwise. If ``None``, the choice is\n            automatically made based on the sink being a tty or not.\n        serialize : |bool|, optional\n            Whether the logged message and its records should be first converted to a JSON string\n            before being sent to the sink.\n        backtrace : |bool|, optional\n            Whether the exception trace formatted should be extended upward, beyond the catching\n            point, to show the full stacktrace which generated the error.\n        diagnose : |bool|, optional\n            Whether the exception trace should display the variables values to eases the debugging.\n            This should be set to ``False`` in production to avoid leaking sensitive data.\n        enqueue : |bool|, optional\n            Whether the messages to be logged should first pass through a multiprocessing-safe queue\n            before reaching the sink. This is useful while logging to a file through multiple\n            processes. This also has the advantage of making logging calls non-blocking.\n        context : |multiprocessing.Context| or |str|, optional\n            A context object or name that will be used for all tasks involving internally the\n            |multiprocessing| module, in particular when ``enqueue=True``. If ``None``, the default\n            context is used.\n        catch : |bool|, optional\n            Whether errors occurring while sink handles logs messages should be automatically\n            caught. If ``True``, an exception message is displayed on |sys.stderr| but the exception\n            is not propagated to the caller, preventing your app to crash.\n        **kwargs\n            Additional parameters that are only valid to configure a coroutine or file sink (see\n            below).\n\n\n        If and only if the sink is a coroutine function, the following parameter applies:\n\n        Parameters\n        ----------\n        loop : |AbstractEventLoop|, optional\n            The event loop in which the asynchronous logging task will be scheduled and executed. If\n            ``None``, the loop used is the one returned by |asyncio.get_running_loop| at the time of\n            the logging call (task is discarded if there is no loop currently running).\n\n\n        If and only if the sink is a file path, the following parameters apply:\n\n        Parameters\n        ----------\n        rotation : |str|, |int|, |time|, |timedelta| or |callable|_, optional\n            A condition indicating whenever the current logged file should be closed and a new one\n            started.\n        retention : |str|, |int|, |timedelta| or |callable|_, optional\n            A directive filtering old files that should be removed during rotation or end of\n            program.\n        compression : |str| or |callable|_, optional\n            A compression or archive format to which log files should be converted at closure.\n        delay : |bool|, optional\n            Whether the file should be created as soon as the sink is configured, or delayed until\n            first logged message. It defaults to ``False``.\n        watch : |bool|, optional\n            Whether or not the file should be watched and re-opened when deleted or changed (based\n            on its device and inode properties) by an external program. It defaults to ``False``.\n        mode : |str|, optional\n            The opening mode as for built-in |open| function. It defaults to ``\"a\"`` (open the\n            file in appending mode).\n        buffering : |int|, optional\n            The buffering policy as for built-in |open| function. It defaults to ``1`` (line\n            buffered file).\n        encoding : |str|, optional\n            The file encoding as for built-in |open| function. It defaults to ``\"utf8\"``.\n        **kwargs\n            Others parameters are passed to the built-in |open| function.\n\n        Returns\n        -------\n        :class:`int`\n            An identifier associated with the added sink and which should be used to\n            |remove| it.\n\n        Raises\n        ------\n        ValueError\n            If any of the arguments passed to configure the sink is invalid.\n\n        Notes\n        -----\n        Extended summary follows.\n\n        .. _sink:\n\n        .. rubric:: The sink parameter\n\n        The ``sink`` handles incoming log messages and proceed to their writing somewhere and\n        somehow. A sink can take many forms:\n\n        - A |file-like object|_ like ``sys.stderr`` or ``open(\"file.log\", \"w\")``. Anything with\n          a ``.write()`` method is considered as a file-like object. Custom handlers may also\n          implement ``flush()`` (called after each logged message), ``stop()`` (called at sink\n          termination) and ``complete()`` (awaited by the eponymous method).\n        - A file path as |str| or |Path|. It can be parametrized with some additional parameters,\n          see below.\n        - A |callable|_ (such as a simple function) like ``lambda msg: print(msg)``. This\n          allows for logging procedure entirely defined by user preferences and needs.\n        - A asynchronous |coroutine function|_ defined with the ``async def`` statement. The\n          coroutine object returned by such function will be added to the event loop using\n          |loop.create_task|. The tasks should be awaited before ending the loop by using\n          |complete|.\n        - A built-in |Handler| like ``logging.StreamHandler``. In such a case, the `Loguru` records\n          are automatically converted to the structure expected by the |logging| module.\n\n        Note that the logging functions are not `reentrant`_. This means you should avoid using\n        the ``logger`` inside any of your sinks or from within |signal| handlers. Otherwise, you\n        may face deadlock if the module's sink was not explicitly disabled.\n\n        .. _message:\n\n        .. rubric:: The logged message\n\n        The logged message passed to all added sinks is nothing more than a string of the\n        formatted log, to which a special attribute is associated: the ``.record`` which is a dict\n        containing all contextual information possibly needed (see below).\n\n        Logged messages are formatted according to the ``format`` of the added sink. This format\n        is usually a string containing braces fields to display attributes from the record dict.\n\n        If fine-grained control is needed, the ``format`` can also be a function which takes the\n        record as parameter and return the format template string. However, note that in such a\n        case, you should take care of appending the line ending and exception field to the returned\n        format, while ``\"\\n{exception}\"`` is automatically appended for convenience if ``format`` is\n        a string.\n\n        The ``filter`` attribute can be used to control which messages are effectively passed to the\n        sink and which one are ignored. A function can be used, accepting the record as an\n        argument, and returning ``True`` if the message should be logged, ``False`` otherwise. If\n        a string is used, only the records with the same ``name`` and its children will be allowed.\n        One can also pass a ``dict`` mapping module names to minimum required level. In such case,\n        each log record will search for it's closest parent in the ``dict`` and use the associated\n        level as the filter. The ``dict`` values can be ``int`` severity, ``str`` level name or\n        ``True`` and ``False`` to respectively authorize and discard all module logs\n        unconditionally. In order to set a default level, the ``\"\"`` module name should be used as\n        it is the parent of all modules (it does not suppress global ``level`` threshold, though).\n\n        Note that while calling a logging method, the keyword arguments (if any) are automatically\n        added to the ``extra`` dict for convenient contextualization (in addition to being used for\n        formatting).\n\n        .. _levels:\n\n        .. rubric:: The severity levels\n\n        Each logged message is associated with a severity level. These levels make it possible to\n        prioritize messages and to choose the verbosity of the logs according to usages. For\n        example, it allows to display some debugging information to a developer, while hiding it to\n        the end user running the application.\n\n        The ``level`` attribute of every added sink controls the minimum threshold from which log\n        messages are allowed to be emitted. While using the ``logger``, you are in charge of\n        configuring the appropriate granularity of your logs. It is possible to add even more custom\n        levels by using the |level| method.\n\n        Here are the standard levels with their default severity value, each one is associated with\n        a logging method of the same name:\n\n        +----------------------+------------------------+------------------------+\n        | Level name           | Severity value         | Logger method          |\n        +======================+========================+========================+\n        | ``TRACE``            | 5                      | |logger.trace|         |\n        +----------------------+------------------------+------------------------+\n        | ``DEBUG``            | 10                     | |logger.debug|         |\n        +----------------------+------------------------+------------------------+\n        | ``INFO``             | 20                     | |logger.info|          |\n        +----------------------+------------------------+------------------------+\n        | ``SUCCESS``          | 25                     | |logger.success|       |\n        +----------------------+------------------------+------------------------+\n        | ``WARNING``          | 30                     | |logger.warning|       |\n        +----------------------+------------------------+------------------------+\n        | ``ERROR``            | 40                     | |logger.error|         |\n        +----------------------+------------------------+------------------------+\n        | ``CRITICAL``         | 50                     | |logger.critical|      |\n        +----------------------+------------------------+------------------------+\n\n        .. _record:\n\n        .. rubric:: The record dict\n\n        The record is just a Python dict, accessible from sinks by ``message.record``. It contains\n        all contextual information of the logging call (time, function, file, line, level, etc.).\n\n        Each of the record keys can be used in the handler's ``format`` so the corresponding value\n        is properly displayed in the logged message (e.g. ``\"{level}\"`` will return ``\"INFO\"``).\n        Some records' values are objects with two or more attributes. These can be formatted with\n        ``\"{key.attr}\"`` (``\"{key}\"`` would display one by default).\n\n        Note that you can use any `formatting directives`_ available in Python's ``str.format()``\n        method (e.g. ``\"{key: >3}\"`` will right-align and pad to a width of 3 characters). This is\n        particularly useful for time formatting (see below).\n\n        +------------+---------------------------------+----------------------------+\n        | Key        | Description                     | Attributes                 |\n        +============+=================================+============================+\n        | elapsed    | The time elapsed since the      | See |timedelta|            |\n        |            | start of the program            |                            |\n        +------------+---------------------------------+----------------------------+\n        | exception  | The formatted exception if any, | ``type``, ``value``,       |\n        |            | ``None`` otherwise              | ``traceback``              |\n        +------------+---------------------------------+----------------------------+\n        | extra      | The dict of attributes          | None                       |\n        |            | bound by the user (see |bind|)  |                            |\n        +------------+---------------------------------+----------------------------+\n        | file       | The file where the logging call | ``name`` (default),        |\n        |            | was made                        | ``path``                   |\n        +------------+---------------------------------+----------------------------+\n        | function   | The function from which the     | None                       |\n        |            | logging call was made           |                            |\n        +------------+---------------------------------+----------------------------+\n        | level      | The severity used to log the    | ``name`` (default),        |\n        |            | message                         | ``no``, ``icon``           |\n        +------------+---------------------------------+----------------------------+\n        | line       | The line number in the source   | None                       |\n        |            | code                            |                            |\n        +------------+---------------------------------+----------------------------+\n        | message    | The logged message (not yet     | None                       |\n        |            | formatted)                      |                            |\n        +------------+---------------------------------+----------------------------+\n        | module     | The module where the logging    | None                       |\n        |            | call was made                   |                            |\n        +------------+---------------------------------+----------------------------+\n        | name       | The ``__name__`` where the      | None                       |\n        |            | logging call was made           |                            |\n        +------------+---------------------------------+----------------------------+\n        | process    | The process in which the        | ``name``, ``id`` (default) |\n        |            | logging call was made           |                            |\n        +------------+---------------------------------+----------------------------+\n        | thread     | The thread in which the         | ``name``, ``id`` (default) |\n        |            | logging call was made           |                            |\n        +------------+---------------------------------+----------------------------+\n        | time       | The aware local time when the   | See |datetime|             |\n        |            | logging call was made           |                            |\n        +------------+---------------------------------+----------------------------+\n\n        .. _time:\n\n        .. rubric:: The time formatting\n\n        To use your favorite time representation, you can set it directly in the time formatter\n        specifier of your handler format, like for example ``format=\"{time:HH:mm:ss} {message}\"``.\n        Note that this datetime represents your local time, and it is also made timezone-aware,\n        so you can display the UTC offset to avoid ambiguities.\n\n        The time field can be formatted using more human-friendly tokens. These constitute a subset\n        of the one used by the `Pendulum`_ library of `@sdispater`_. To escape a token, just add\n        square brackets around it, for example ``\"[YY]\"`` would display literally ``\"YY\"``.\n\n        If you prefer to display UTC rather than local time, you can add ``\"!UTC\"`` at the very end\n        of the time format, like ``{time:HH:mm:ss!UTC}``. Doing so will convert the ``datetime``\n        to UTC before formatting.\n\n        If no time formatter specifier is used, like for example if ``format=\"{time} {message}\"``,\n        the default one will use ISO 8601.\n\n        +------------------------+---------+----------------------------------------+\n        |                        | Token   | Output                                 |\n        +========================+=========+========================================+\n        | Year                   | YYYY    | 2000, 2001, 2002 ... 2012, 2013        |\n        |                        +---------+----------------------------------------+\n        |                        | YY      | 00, 01, 02 ... 12, 13                  |\n        +------------------------+---------+----------------------------------------+\n        | Quarter                | Q       | 1 2 3 4                                |\n        +------------------------+---------+----------------------------------------+\n        | Month                  | MMMM    | January, February, March ...           |\n        |                        +---------+----------------------------------------+\n        |                        | MMM     | Jan, Feb, Mar ...                      |\n        |                        +---------+----------------------------------------+\n        |                        | MM      | 01, 02, 03 ... 11, 12                  |\n        |                        +---------+----------------------------------------+\n        |                        | M       | 1, 2, 3 ... 11, 12                     |\n        +------------------------+---------+----------------------------------------+\n        | Day of Year            | DDDD    | 001, 002, 003 ... 364, 365             |\n        |                        +---------+----------------------------------------+\n        |                        | DDD     | 1, 2, 3 ... 364, 365                   |\n        +------------------------+---------+----------------------------------------+\n        | Day of Month           | DD      | 01, 02, 03 ... 30, 31                  |\n        |                        +---------+----------------------------------------+\n        |                        | D       | 1, 2, 3 ... 30, 31                     |\n        +------------------------+---------+----------------------------------------+\n        | Day of Week            | dddd    | Monday, Tuesday, Wednesday ...         |\n        |                        +---------+----------------------------------------+\n        |                        | ddd     | Mon, Tue, Wed ...                      |\n        |                        +---------+----------------------------------------+\n        |                        | d       | 0, 1, 2 ... 6                          |\n        +------------------------+---------+----------------------------------------+\n        | Days of ISO Week       | E       | 1, 2, 3 ... 7                          |\n        +------------------------+---------+----------------------------------------+\n        | Hour                   | HH      | 00, 01, 02 ... 23, 24                  |\n        |                        +---------+----------------------------------------+\n        |                        | H       | 0, 1, 2 ... 23, 24                     |\n        |                        +---------+----------------------------------------+\n        |                        | hh      | 01, 02, 03 ... 11, 12                  |\n        |                        +---------+----------------------------------------+\n        |                        | h       | 1, 2, 3 ... 11, 12                     |\n        +------------------------+---------+----------------------------------------+\n        | Minute                 | mm      | 00, 01, 02 ... 58, 59                  |\n        |                        +---------+----------------------------------------+\n        |                        | m       | 0, 1, 2 ... 58, 59                     |\n        +------------------------+---------+----------------------------------------+\n        | Second                 | ss      | 00, 01, 02 ... 58, 59                  |\n        |                        +---------+----------------------------------------+\n        |                        | s       | 0, 1, 2 ... 58, 59                     |\n        +------------------------+---------+----------------------------------------+\n        | Fractional Second      | S       | 0 1 ... 8 9                            |\n        |                        +---------+----------------------------------------+\n        |                        | SS      | 00, 01, 02 ... 98, 99                  |\n        |                        +---------+----------------------------------------+\n        |                        | SSS     | 000 001 ... 998 999                    |\n        |                        +---------+----------------------------------------+\n        |                        | SSSS... | 000[0..] 001[0..] ... 998[0..] 999[0..]|\n        |                        +---------+----------------------------------------+\n        |                        | SSSSSS  | 000000 000001 ... 999998 999999        |\n        +------------------------+---------+----------------------------------------+\n        | AM / PM                | A       | AM, PM                                 |\n        +------------------------+---------+----------------------------------------+\n        | Timezone               | Z       | -07:00, -06:00 ... +06:00, +07:00      |\n        |                        +---------+----------------------------------------+\n        |                        | ZZ      | -0700, -0600 ... +0600, +0700          |\n        |                        +---------+----------------------------------------+\n        |                        | zz      | EST CST ... MST PST                    |\n        +------------------------+---------+----------------------------------------+\n        | Seconds timestamp      | X       | 1381685817, 1234567890.123             |\n        +------------------------+---------+----------------------------------------+\n        | Microseconds timestamp | x       | 1234567890123                          |\n        +------------------------+---------+----------------------------------------+\n\n        .. _file:\n\n        .. rubric:: The file sinks\n\n        If the sink is a |str| or a |Path|, the corresponding file will be opened for writing logs.\n        The path can also contain a special ``\"{time}\"`` field that will be formatted with the\n        current date at file creation. The file is closed at sink stop, i.e. when the application\n        ends or the handler is removed.\n\n        The ``rotation`` check is made before logging each message. If there is already an existing\n        file with the same name that the file to be created, then the existing file is renamed by\n        appending the date to its basename to prevent file overwriting. This parameter accepts:\n\n        - an |int| which corresponds to the maximum file size in bytes before that the current\n          logged file is closed and a new one started over.\n        - a |timedelta| which indicates the frequency of each new rotation.\n        - a |time| which specifies the hour when the daily rotation should occur.\n        - a |str| for human-friendly parametrization of one of the previously enumerated types.\n          Examples: ``\"100 MB\"``, ``\"0.5 GB\"``, ``\"1 month 2 weeks\"``, ``\"4 days\"``, ``\"10h\"``,\n          ``\"monthly\"``, ``\"18:00\"``, ``\"sunday\"``, ``\"w0\"``, ``\"monday at 12:00\"``, ...\n        - a |callable|_ which will be invoked before logging. It should accept two arguments: the\n          logged message and the file object, and it should return ``True`` if the rotation should\n          happen now, ``False`` otherwise.\n\n        The ``retention`` occurs at rotation or at sink stop if rotation is ``None``. Files\n        resulting from previous sessions or rotations are automatically collected from disk. A file\n        is selected if it matches the pattern ``\"basename(.*).ext(.*)\"`` (possible time fields are\n        beforehand replaced with ``.*``) based on the configured sink. Afterwards, the list is\n        processed to determine files to be retained. This parameter accepts:\n\n        - an |int| which indicates the number of log files to keep, while older files are deleted.\n        - a |timedelta| which specifies the maximum age of files to keep.\n        - a |str| for human-friendly parametrization of the maximum age of files to keep.\n          Examples: ``\"1 week, 3 days\"``, ``\"2 months\"``, ...\n        - a |callable|_ which will be invoked before the retention process. It should accept the\n          list of log files as argument and process to whatever it wants (moving files, removing\n          them, etc.).\n\n        The ``compression`` happens at rotation or at sink stop if rotation is ``None``. This\n        parameter accepts:\n\n        - a |str| which corresponds to the compressed or archived file extension. This can be one\n          of: ``\"gz\"``, ``\"bz2\"``, ``\"xz\"``, ``\"lzma\"``, ``\"tar\"``, ``\"tar.gz\"``, ``\"tar.bz2\"``,\n          ``\"tar.xz\"``, ``\"zip\"``.\n        - a |callable|_ which will be invoked before file termination. It should accept the path of\n          the log file as argument and process to whatever it wants (custom compression, network\n          sending, removing it, etc.).\n\n        Either way, if you use a custom function designed according to your preferences, you must be\n        very careful not to use the ``logger`` within your function. Otherwise, there is a risk that\n        your program hang because of a deadlock.\n\n        .. _color:\n\n        .. rubric:: The color markups\n\n        To add colors to your logs, you just have to enclose your format string with the appropriate\n        tags (e.g. ``<red>some message</red>``). These tags are automatically removed if the sink\n        doesn't support ansi codes. For convenience, you can use ``</>`` to close the last opening\n        tag without repeating its name (e.g. ``<red>another message</>``).\n\n        The special tag ``<level>`` (abbreviated with ``<lvl>``) is transformed according to\n        the configured color of the logged message level.\n\n        Tags which are not recognized will raise an exception during parsing, to inform you about\n        possible misuse. If you wish to display a markup tag literally, you can escape it by\n        prepending a ``\\`` like for example ``\\<blue>``. To prevent the escaping to occur, you can\n        simply double the ``\\`` (e.g. ``\\\\<blue>`` will print a literal ``\\`` before colored text).\n        If, for some reason, you need to escape a string programmatically, note that the regex used\n        internally to parse markup tags is ``r\"(\\\\*)(</?(?:[fb]g\\s)?[^<>\\s]*>)\"``.\n\n        Note that when logging a message with ``opt(colors=True)``, color tags present in the\n        formatting arguments (``args`` and ``kwargs``) are completely ignored. This is important if\n        you need to log strings containing markups that might interfere with the color tags (in this\n        case, do not use f-string).\n\n        Here are the available tags (note that compatibility may vary depending on terminal):\n\n        +------------------------------------+--------------------------------------+\n        | Color (abbr)                       | Styles (abbr)                        |\n        +====================================+======================================+\n        | Black (k)                          | Bold (b)                             |\n        +------------------------------------+--------------------------------------+\n        | Blue (e)                           | Dim (d)                              |\n        +------------------------------------+--------------------------------------+\n        | Cyan (c)                           | Normal (n)                           |\n        +------------------------------------+--------------------------------------+\n        | Green (g)                          | Italic (i)                           |\n        +------------------------------------+--------------------------------------+\n        | Magenta (m)                        | Underline (u)                        |\n        +------------------------------------+--------------------------------------+\n        | Red (r)                            | Strike (s)                           |\n        +------------------------------------+--------------------------------------+\n        | White (w)                          | Reverse (v)                          |\n        +------------------------------------+--------------------------------------+\n        | Yellow (y)                         | Blink (l)                            |\n        +------------------------------------+--------------------------------------+\n        |                                    | Hide (h)                             |\n        +------------------------------------+--------------------------------------+\n\n        Usage:\n\n        +-----------------+-------------------------------------------------------------------+\n        | Description     | Examples                                                          |\n        |                 +---------------------------------+---------------------------------+\n        |                 | Foreground                      | Background                      |\n        +=================+=================================+=================================+\n        | Basic colors    | ``<red>``, ``<r>``              | ``<GREEN>``, ``<G>``            |\n        +-----------------+---------------------------------+---------------------------------+\n        | Light colors    | ``<light-blue>``, ``<le>``      | ``<LIGHT-CYAN>``, ``<LC>``      |\n        +-----------------+---------------------------------+---------------------------------+\n        | 8-bit colors    | ``<fg 86>``, ``<fg 255>``       | ``<bg 42>``, ``<bg 9>``         |\n        +-----------------+---------------------------------+---------------------------------+\n        | Hex colors      | ``<fg #00005f>``, ``<fg #EE1>`` | ``<bg #AF5FD7>``, ``<bg #fff>`` |\n        +-----------------+---------------------------------+---------------------------------+\n        | RGB colors      | ``<fg 0,95,0>``                 | ``<bg 72,119,65>``              |\n        +-----------------+---------------------------------+---------------------------------+\n        | Stylizing       | ``<bold>``, ``<b>``,  ``<underline>``, ``<u>``                    |\n        +-----------------+-------------------------------------------------------------------+\n\n        .. _env:\n\n        .. rubric:: The environment variables\n\n        The default values of sink parameters can be entirely customized. This is particularly\n        useful if you don't like the log format of the pre-configured sink.\n\n        Each of the |add| default parameter can be modified by setting the ``LOGURU_[PARAM]``\n        environment variable. For example on Linux: ``export LOGURU_FORMAT=\"{time} - {message}\"``\n        or ``export LOGURU_DIAGNOSE=NO``.\n\n        The default levels' attributes can also be modified by setting the ``LOGURU_[LEVEL]_[ATTR]``\n        environment variable. For example, on Windows: ``setx LOGURU_DEBUG_COLOR \"<blue>\"``\n        or ``setx LOGURU_TRACE_ICON \"🚀\"``. If you use the ``set`` command, do not include quotes\n        but escape special symbol as needed, e.g. ``set LOGURU_DEBUG_COLOR=^<blue^>``.\n\n        If you want to disable the pre-configured sink, you can set the ``LOGURU_AUTOINIT``\n        variable to ``False``.\n\n        On Linux, you will probably need to edit the ``~/.profile`` file to make this persistent. On\n        Windows, don't forget to restart your terminal for the change to be taken into account.\n\n        Examples\n        --------\n        >>> logger.add(sys.stdout, format=\"{time} - {level} - {message}\", filter=\"sub.module\")\n\n        >>> logger.add(\"file_{time}.log\", level=\"TRACE\", rotation=\"100 MB\")\n\n        >>> def debug_only(record):\n        ...     return record[\"level\"].name == \"DEBUG\"\n        ...\n        >>> logger.add(\"debug.log\", filter=debug_only)  # Other levels are filtered out\n\n        >>> def my_sink(message):\n        ...     record = message.record\n        ...     update_db(message, time=record[\"time\"], level=record[\"level\"])\n        ...\n        >>> logger.add(my_sink)\n\n        >>> level_per_module = {\n        ...     \"\": \"DEBUG\",\n        ...     \"third.lib\": \"WARNING\",\n        ...     \"anotherlib\": False\n        ... }\n        >>> logger.add(lambda m: print(m, end=\"\"), filter=level_per_module, level=0)\n\n        >>> async def publish(message):\n        ...     await api.post(message)\n        ...\n        >>> logger.add(publish, serialize=True)\n\n        >>> from logging import StreamHandler\n        >>> logger.add(StreamHandler(sys.stderr), format=\"{message}\")\n\n        >>> class RandomStream:\n        ...     def __init__(self, seed, threshold):\n        ...         self.threshold = threshold\n        ...         random.seed(seed)\n        ...     def write(self, message):\n        ...         if random.random() > self.threshold:\n        ...             print(message)\n        ...\n        >>> stream_object = RandomStream(seed=12345, threshold=0.25)\n        >>> logger.add(stream_object, level=\"INFO\")\n        \"\"\"\n        with self._core.lock:\n            handler_id = self._core.handlers_count\n            self._core.handlers_count += 1\n\n        error_interceptor = ErrorInterceptor(catch, handler_id)\n\n        if colorize is None and serialize:\n            colorize = False\n\n        if isinstance(sink, (str, PathLike)):\n            path = sink\n            name = \"'%s'\" % path\n\n            if colorize is None:\n                colorize = False\n\n            wrapped_sink = FileSink(path, **kwargs)\n            kwargs = {}\n            encoding = wrapped_sink.encoding\n            terminator = \"\\n\"\n            exception_prefix = \"\"\n        elif hasattr(sink, \"write\") and callable(sink.write):\n            name = getattr(sink, \"name\", None) or repr(sink)\n\n            if colorize is None:\n                colorize = _colorama.should_colorize(sink)\n\n            if colorize is True and _colorama.should_wrap(sink):\n                stream = _colorama.wrap(sink)\n            else:\n                stream = sink\n\n            wrapped_sink = StreamSink(stream)\n            encoding = getattr(sink, \"encoding\", None)\n            terminator = \"\\n\"\n            exception_prefix = \"\"\n        elif isinstance(sink, logging.Handler):\n            name = repr(sink)\n\n            if colorize is None:\n                colorize = False\n\n            wrapped_sink = StandardSink(sink)\n            encoding = getattr(sink, \"encoding\", None)\n            terminator = \"\"\n            exception_prefix = \"\\n\"\n        elif iscoroutinefunction(sink) or iscoroutinefunction(\n            getattr(sink, \"__call__\", None)  # noqa: B004\n        ):\n            name = getattr(sink, \"__name__\", None) or repr(sink)\n\n            if colorize is None:\n                colorize = False\n\n            loop = kwargs.pop(\"loop\", None)\n\n            # The worker thread needs an event loop, it can't create a new one internally because it\n            # has to be accessible by the user while calling \"complete()\", instead we use the global\n            # one when the sink is added. If \"enqueue=False\" the event loop is dynamically retrieved\n            # at each logging call, which is much more convenient. However, coroutine can't access\n            # running loop in Python 3.5.2 and earlier versions, see python/asyncio#452.\n            if enqueue and loop is None:\n                try:\n                    loop = _asyncio_loop.get_running_loop()\n                except RuntimeError as e:\n                    raise ValueError(\n                        \"An event loop is required to add a coroutine sink with `enqueue=True`, \"\n                        \"but none has been passed as argument and none is currently running.\"\n                    ) from e\n\n            coro = sink if iscoroutinefunction(sink) else sink.__call__\n            wrapped_sink = AsyncSink(coro, loop, error_interceptor)\n            encoding = \"utf8\"\n            terminator = \"\\n\"\n            exception_prefix = \"\"\n        elif callable(sink):\n            name = getattr(sink, \"__name__\", None) or repr(sink)\n\n            if colorize is None:\n                colorize = False\n\n            wrapped_sink = CallableSink(sink)\n            encoding = \"utf8\"\n            terminator = \"\\n\"\n            exception_prefix = \"\"\n        else:\n            raise TypeError(\"Cannot log to objects of type '%s'\" % type(sink).__name__)\n\n        if kwargs:\n            raise TypeError(\"add() got an unexpected keyword argument '%s'\" % next(iter(kwargs)))\n\n        if filter is None:\n            filter_func = None\n        elif filter == \"\":\n            filter_func = _filters.filter_none\n        elif isinstance(filter, str):\n            parent = filter + \".\"\n            length = len(parent)\n            filter_func = functools.partial(_filters.filter_by_name, parent=parent, length=length)\n        elif isinstance(filter, dict):\n            level_per_module = {}\n            for module, level_ in filter.items():\n                if module is not None and not isinstance(module, str):\n                    raise TypeError(\n                        \"The filter dict contains an invalid module, \"\n                        \"it should be a string (or None), not: '%s'\" % type(module).__name__\n                    )\n                if level_ is False:\n                    levelno_ = False\n                elif level_ is True:\n                    levelno_ = 0\n                elif isinstance(level_, str):\n                    try:\n                        levelno_ = self.level(level_).no\n                    except ValueError:\n                        raise ValueError(\n                            \"The filter dict contains a module '%s' associated to a level name \"\n                            \"which does not exist: '%s'\" % (module, level_)\n                        ) from None\n                elif isinstance(level_, int):\n                    levelno_ = level_\n                else:\n                    raise TypeError(\n                        \"The filter dict contains a module '%s' associated to an invalid level, \"\n                        \"it should be an integer, a string or a boolean, not: '%s'\"\n                        % (module, type(level_).__name__)\n                    )\n                if levelno_ < 0:\n                    raise ValueError(\n                        \"The filter dict contains a module '%s' associated to an invalid level, \"\n                        \"it should be a positive integer, not: '%d'\" % (module, levelno_)\n                    )\n                level_per_module[module] = levelno_\n            filter_func = functools.partial(\n                _filters.filter_by_level, level_per_module=level_per_module\n            )\n        elif callable(filter):\n            if filter == builtins.filter:\n                raise ValueError(\n                    \"The built-in 'filter()' function cannot be used as a 'filter' parameter, \"\n                    \"this is most likely a mistake (please double-check the arguments passed \"\n                    \"to 'logger.add()').\"\n                )\n            filter_func = filter\n        else:\n            raise TypeError(\n                \"Invalid filter, it should be a function, a string or a dict, not: '%s'\"\n                % type(filter).__name__\n            )\n\n        if isinstance(level, str):\n            levelno = self.level(level).no\n        elif isinstance(level, int):\n            levelno = level\n        else:\n            raise TypeError(\n                \"Invalid level, it should be an integer or a string, not: '%s'\"\n                % type(level).__name__\n            )\n\n        if levelno < 0:\n            raise ValueError(\n                \"Invalid level value, it should be a positive integer, not: %d\" % levelno\n            )\n\n        if isinstance(format, str):\n            try:\n                formatter = Colorizer.prepare_format(format + terminator + \"{exception}\")\n            except ValueError as e:\n                raise ValueError(\n                    \"Invalid format, color markups could not be parsed correctly\"\n                ) from e\n            is_formatter_dynamic = False\n        elif callable(format):\n            if format == builtins.format:\n                raise ValueError(\n                    \"The built-in 'format()' function cannot be used as a 'format' parameter, \"\n                    \"this is most likely a mistake (please double-check the arguments passed \"\n                    \"to 'logger.add()').\"\n                )\n            formatter = format\n            is_formatter_dynamic = True\n        else:\n            raise TypeError(\n                \"Invalid format, it should be a string or a function, not: '%s'\"\n                % type(format).__name__\n            )\n\n        if not isinstance(encoding, str):\n            encoding = \"ascii\"\n\n        if isinstance(context, str):\n            context = get_context(context)\n        elif context is not None and not isinstance(context, BaseContext):\n            raise TypeError(\n                \"Invalid context, it should be a string or a multiprocessing context, \"\n                \"not: '%s'\" % type(context).__name__\n            )\n\n        with self._core.lock:\n            exception_formatter = ExceptionFormatter(\n                colorize=colorize,\n                encoding=encoding,\n                diagnose=diagnose,\n                backtrace=backtrace,\n                hidden_frames_filename=self.catch.__code__.co_filename,\n                prefix=exception_prefix,\n            )\n\n            handler = Handler(\n                name=name,\n                sink=wrapped_sink,\n                levelno=levelno,\n                formatter=formatter,\n                is_formatter_dynamic=is_formatter_dynamic,\n                filter_=filter_func,\n                colorize=colorize,\n                serialize=serialize,\n                enqueue=enqueue,\n                multiprocessing_context=context,\n                id_=handler_id,\n                error_interceptor=error_interceptor,\n                exception_formatter=exception_formatter,\n                levels_ansi_codes=self._core.levels_ansi_codes,\n            )\n\n            handlers = self._core.handlers.copy()\n            handlers[handler_id] = handler\n\n            self._core.min_level = min(self._core.min_level, levelno)\n            self._core.handlers = handlers\n\n        return handler_id\n\n    def remove(self, handler_id=None):\n        \"\"\"Remove a previously added handler and stop sending logs to its sink.\n\n        Parameters\n        ----------\n        handler_id : |int| or ``None``\n            The id of the sink to remove, as it was returned by the |add| method. If ``None``, all\n            handlers are removed. The pre-configured handler is guaranteed to have the index ``0``.\n\n        Raises\n        ------\n        ValueError\n            If ``handler_id`` is not ``None`` but there is no active handler with such id.\n\n        Examples\n        --------\n        >>> i = logger.add(sys.stderr, format=\"{message}\")\n        >>> logger.info(\"Logging\")\n        Logging\n        >>> logger.remove(i)\n        >>> logger.info(\"No longer logging\")\n        \"\"\"\n        if not (handler_id is None or isinstance(handler_id, int)):\n            raise TypeError(\n                \"Invalid handler id, it should be an integer as returned \"\n                \"by the 'add()' method (or None), not: '%s'\" % type(handler_id).__name__\n            )\n\n        with self._core.lock:\n            if handler_id is not None and handler_id not in self._core.handlers:\n                raise ValueError(\"There is no existing handler with id %d\" % handler_id) from None\n\n            if handler_id is None:\n                handler_ids = list(self._core.handlers)\n            else:\n                handler_ids = [handler_id]\n\n            for handler_id in handler_ids:\n                handlers = self._core.handlers.copy()\n                handler = handlers.pop(handler_id)\n\n                # This needs to be done first in case \"stop()\" raises an exception\n                levelnos = (h.levelno for h in handlers.values())\n                self._core.min_level = min(levelnos, default=float(\"inf\"))\n                self._core.handlers = handlers\n\n                handler.stop()\n\n    def complete(self):\n        \"\"\"Wait for the end of enqueued messages and asynchronous tasks scheduled by handlers.\n\n        This method proceeds in two steps: first it waits for all logging messages added to handlers\n        with ``enqueue=True`` to be processed, then it returns an object that can be awaited to\n        finalize all logging tasks added to the event loop by coroutine sinks.\n\n        It can be called from non-asynchronous code. This is especially recommended when the\n        ``logger`` is utilized with ``multiprocessing`` to ensure messages put to the internal\n        queue have been properly transmitted before leaving a child process.\n\n        The returned object should be awaited before the end of a coroutine executed by\n        |asyncio.run| or |loop.run_until_complete| to ensure all asynchronous logging messages are\n        processed. The function |asyncio.get_running_loop| is called beforehand, only tasks\n        scheduled in the same loop that the current one will be awaited by the method.\n\n        Returns\n        -------\n        :term:`awaitable`\n            An awaitable object which ensures all asynchronous logging calls are completed when\n            awaited.\n\n        Examples\n        --------\n        >>> async def sink(message):\n        ...     await asyncio.sleep(0.1)  # IO processing...\n        ...     print(message, end=\"\")\n        ...\n        >>> async def work():\n        ...     logger.info(\"Start\")\n        ...     logger.info(\"End\")\n        ...     await logger.complete()\n        ...\n        >>> logger.add(sink)\n        1\n        >>> asyncio.run(work())\n        Start\n        End\n\n        >>> def process():\n        ...     logger.info(\"Message sent from the child\")\n        ...     logger.complete()\n        ...\n        >>> logger.add(sys.stderr, enqueue=True)\n        1\n        >>> process = multiprocessing.Process(target=process)\n        >>> process.start()\n        >>> process.join()\n        Message sent from the child\n        \"\"\"\n        tasks = []\n\n        with self._core.lock:\n            handlers = self._core.handlers.copy()\n            for handler in handlers.values():\n                handler.complete_queue()\n                tasks.extend(handler.tasks_to_complete())\n\n        class AwaitableCompleter:\n            def __await__(self):\n                for task in tasks:\n                    yield from task.__await__()\n\n        return AwaitableCompleter()\n\n    def catch(\n        self,\n        exception=Exception,\n        *,\n        level=\"ERROR\",\n        reraise=False,\n        onerror=None,\n        exclude=None,\n        default=None,\n        message=\"An error has been caught in function '{record[function]}', \"\n        \"process '{record[process].name}' ({record[process].id}), \"\n        \"thread '{record[thread].name}' ({record[thread].id}):\"\n    ):\n        \"\"\"Return a decorator to automatically log possibly caught error in wrapped function.\n\n        This is useful to ensure unexpected exceptions are logged, the entire program can be\n        wrapped by this method. This is also very useful to decorate |Thread.run| methods while\n        using threads to propagate errors to the main logger thread.\n\n        Note that the visibility of variables values (which uses the great |better_exceptions|_\n        library from `@Qix-`_) depends on the ``diagnose`` option of each configured sink.\n\n        The returned object can also be used as a context manager.\n\n        Parameters\n        ----------\n        exception : |Exception|, optional\n            The type of exception to intercept. If several types should be caught, a tuple of\n            exceptions can be used too.\n        level : |str| or |int|, optional\n            The level name or severity with which the message should be logged.\n        reraise : |bool|, optional\n            Whether the exception should be raised again and hence propagated to the caller.\n        onerror : |callable|_, optional\n            A function that will be called if an error occurs, once the message has been logged.\n            It should accept the exception instance as it sole argument.\n        exclude : |Exception|, optional\n            A type of exception (or a tuple of types) that will be purposely ignored and hence\n            propagated to the caller without being logged.\n        default : |Any|, optional\n            The value to be returned by the decorated function if an error occurred without being\n            re-raised.\n        message : |str|, optional\n            The message that will be automatically logged if an exception occurs. Note that it will\n            be formatted with the ``record`` attribute.\n\n        Returns\n        -------\n        :term:`decorator` / :term:`context manager`\n            An object that can be used to decorate a function or as a context manager to log\n            exceptions possibly caught.\n\n        Examples\n        --------\n        >>> @logger.catch\n        ... def f(x):\n        ...     100 / x\n        ...\n        >>> def g():\n        ...     f(10)\n        ...     f(0)\n        ...\n        >>> g()\n        ERROR - An error has been caught in function 'g', process 'Main' (367), thread 'ch1' (1398):\n        Traceback (most recent call last):\n          File \"program.py\", line 12, in <module>\n            g()\n            └ <function g at 0x7f225fe2bc80>\n        > File \"program.py\", line 10, in g\n            f(0)\n            └ <function f at 0x7f225fe2b9d8>\n          File \"program.py\", line 6, in f\n            100 / x\n                  └ 0\n        ZeroDivisionError: division by zero\n\n        >>> with logger.catch(message=\"Because we never know...\"):\n        ...    main()  # No exception, no logs\n\n        >>> # Use 'onerror' to prevent the program exit code to be 0 (if 'reraise=False') while\n        >>> # also avoiding the stacktrace to be duplicated on stderr (if 'reraise=True').\n        >>> @logger.catch(onerror=lambda _: sys.exit(1))\n        ... def main():\n        ...     1 / 0\n        \"\"\"\n        if callable(exception) and (\n            not isclass(exception) or not issubclass(exception, BaseException)\n        ):\n            return self.catch()(exception)\n\n        logger = self\n\n        class Catcher:\n            def __init__(self, from_decorator):\n                self._from_decorator = from_decorator\n\n            def __enter__(self):\n                return None\n\n            def __exit__(self, type_, value, traceback_):\n                if type_ is None:\n                    return None\n\n                # We must prevent infinite recursion in case \"logger.catch()\" handles an exception\n                # that occurs while logging another exception. This can happen for example when\n                # the exception formatter calls \"repr(obj)\" while the \"__repr__\" method is broken\n                # but decorated with \"logger.catch()\". In such a case, we ignore the catching\n                # mechanism and just let the exception be thrown (that way, the formatter will\n                # rightly assume the object is unprintable).\n                if getattr(logger._core.thread_locals, \"already_logging_exception\", False):\n                    return False\n\n                if not issubclass(type_, exception):\n                    return False\n\n                if exclude is not None and issubclass(type_, exclude):\n                    return False\n\n                from_decorator = self._from_decorator\n                _, depth, _, *options = logger._options\n\n                if from_decorator:\n                    depth += 1\n\n                catch_options = [(type_, value, traceback_), depth, True, *options]\n\n                logger._core.thread_locals.already_logging_exception = True\n                try:\n                    logger._log(level, from_decorator, catch_options, message, (), {})\n                finally:\n                    logger._core.thread_locals.already_logging_exception = False\n\n                if onerror is not None:\n                    onerror(value)\n\n                return not reraise\n\n            def __call__(self, function):\n                if isclass(function):\n                    raise TypeError(\n                        \"Invalid object decorated with 'catch()', it must be a function, \"\n                        \"not a class (tried to wrap '%s')\" % function.__name__\n                    )\n\n                catcher = Catcher(True)\n\n                if iscoroutinefunction(function):\n\n                    async def catch_wrapper(*args, **kwargs):\n                        with catcher:\n                            return await function(*args, **kwargs)\n                        return default\n\n                elif isgeneratorfunction(function):\n\n                    def catch_wrapper(*args, **kwargs):\n                        with catcher:\n                            return (yield from function(*args, **kwargs))\n                        return default\n\n                else:\n\n                    def catch_wrapper(*args, **kwargs):\n                        with catcher:\n                            return function(*args, **kwargs)\n                        return default\n\n                functools.update_wrapper(catch_wrapper, function)\n                return catch_wrapper\n\n        return Catcher(False)\n\n    def opt(\n        self,\n        *,\n        exception=None,\n        record=False,\n        lazy=False,\n        colors=False,\n        raw=False,\n        capture=True,\n        depth=0,\n        ansi=False\n    ):\n        r\"\"\"Parametrize a logging call to slightly change generated log message.\n\n        Note that it's not possible to chain |opt| calls, the last one takes precedence over the\n        others as it will \"reset\" the options to their default values.\n\n        Parameters\n        ----------\n        exception : |bool|, |tuple| or |Exception|, optional\n            If it does not evaluate as ``False``, the passed exception is formatted and added to the\n            log message. It could be an |Exception| object or a ``(type, value, traceback)`` tuple,\n            otherwise the exception information is retrieved from |sys.exc_info|.\n        record : |bool|, optional\n            If ``True``, the record dict contextualizing the logging call can be used to format the\n            message by using ``{record[key]}`` in the log message.\n        lazy : |bool|, optional\n            If ``True``, the logging call attribute to format the message should be functions which\n            will be called only if the level is high enough. This can be used to avoid expensive\n            functions if not necessary.\n        colors : |bool|, optional\n            If ``True``, logged message will be colorized according to the markups it possibly\n            contains.\n        raw : |bool|, optional\n            If ``True``, the formatting of each sink will be bypassed and the message will be sent\n            as is.\n        capture : |bool|, optional\n            If ``False``, the ``**kwargs`` of logged message will not automatically populate\n            the ``extra`` dict (although they are still used for formatting).\n        depth : |int|, optional\n            Specify which stacktrace should be used to contextualize the logged message. This is\n            useful while using the logger from inside a wrapped function to retrieve worthwhile\n            information.\n        ansi : |bool|, optional\n            Deprecated since version 0.4.1: the ``ansi`` parameter will be removed in Loguru 1.0.0,\n            it is replaced by ``colors`` which is a more appropriate name.\n\n        Returns\n        -------\n        :class:`~Logger`\n            A logger wrapping the core logger, but transforming logged message adequately before\n            sending.\n\n        Examples\n        --------\n        >>> try:\n        ...     1 / 0\n        ... except ZeroDivisionError:\n        ...    logger.opt(exception=True).debug(\"Exception logged with debug level:\")\n        ...\n        [18:10:02] DEBUG in '<module>' - Exception logged with debug level:\n        Traceback (most recent call last, catch point marked):\n        > File \"<stdin>\", line 2, in <module>\n        ZeroDivisionError: division by zero\n\n        >>> logger.opt(record=True).info(\"Current line is: {record[line]}\")\n        [18:10:33] INFO in '<module>' - Current line is: 1\n\n        >>> logger.opt(lazy=True).debug(\"If sink <= DEBUG: {x}\", x=lambda: math.factorial(2**5))\n        [18:11:19] DEBUG in '<module>' - If sink <= DEBUG: 263130836933693530167218012160000000\n\n        >>> logger.opt(colors=True).warning(\"We got a <red>BIG</red> problem\")\n        [18:11:30] WARNING in '<module>' - We got a BIG problem\n\n        >>> logger.opt(raw=True).debug(\"No formatting\\n\")\n        No formatting\n\n        >>> logger.opt(capture=False).info(\"Displayed but not captured: {value}\", value=123)\n        [18:11:41] Displayed but not captured: 123\n\n        >>> def wrapped():\n        ...     logger.opt(depth=1).info(\"Get parent context\")\n        ...\n        >>> def func():\n        ...     wrapped()\n        ...\n        >>> func()\n        [18:11:54] DEBUG in 'func' - Get parent context\n        \"\"\"\n        if ansi:\n            colors = True\n            warnings.warn(\n                \"The 'ansi' parameter is deprecated, please use 'colors' instead\",\n                DeprecationWarning,\n                stacklevel=2,\n            )\n\n        args = self._options[-2:]\n        return Logger(self._core, exception, depth, record, lazy, colors, raw, capture, *args)\n\n    def bind(__self, **kwargs):  # noqa: N805\n        \"\"\"Bind attributes to the ``extra`` dict of each logged message record.\n\n        This is used to add custom context to each logging call.\n\n        Parameters\n        ----------\n        **kwargs\n            Mapping between keys and values that will be added to the ``extra`` dict.\n\n        Returns\n        -------\n        :class:`~Logger`\n            A logger wrapping the core logger, but which sends record with the customized ``extra``\n            dict.\n\n        Examples\n        --------\n        >>> logger.add(sys.stderr, format=\"{extra[ip]} - {message}\")\n        >>> class Server:\n        ...     def __init__(self, ip):\n        ...         self.ip = ip\n        ...         self.logger = logger.bind(ip=ip)\n        ...     def call(self, message):\n        ...         self.logger.info(message)\n        ...\n        >>> instance_1 = Server(\"192.168.0.200\")\n        >>> instance_2 = Server(\"127.0.0.1\")\n        >>> instance_1.call(\"First instance\")\n        192.168.0.200 - First instance\n        >>> instance_2.call(\"Second instance\")\n        127.0.0.1 - Second instance\n        \"\"\"\n        *options, extra = __self._options\n        return Logger(__self._core, *options, {**extra, **kwargs})\n\n    @contextlib.contextmanager\n    def contextualize(__self, **kwargs):  # noqa: N805\n        \"\"\"Bind attributes to the context-local ``extra`` dict while inside the ``with`` block.\n\n        Contrary to |bind| there is no ``logger`` returned, the ``extra`` dict is modified in-place\n        and updated globally. Most importantly, it uses |contextvars| which means that\n        contextualized values are unique to each threads and asynchronous tasks.\n\n        The ``extra`` dict will retrieve its initial state once the context manager is exited.\n\n        Parameters\n        ----------\n        **kwargs\n            Mapping between keys and values that will be added to the context-local ``extra`` dict.\n\n        Returns\n        -------\n        :term:`context manager` / :term:`decorator`\n            A context manager (usable as a decorator too) that will bind the attributes once entered\n            and restore the initial state of the ``extra`` dict while exited.\n\n        Examples\n        --------\n        >>> logger.add(sys.stderr, format=\"{message} | {extra}\")\n        1\n        >>> def task():\n        ...     logger.info(\"Processing!\")\n        ...\n        >>> with logger.contextualize(task_id=123):\n        ...     task()\n        ...\n        Processing! | {'task_id': 123}\n        >>> logger.info(\"Done.\")\n        Done. | {}\n        \"\"\"\n        with __self._core.lock:\n            new_context = {**context.get(), **kwargs}\n            token = context.set(new_context)\n\n        try:\n            yield\n        finally:\n            with __self._core.lock:\n                context.reset(token)\n\n    def patch(self, patcher):\n        \"\"\"Attach a function to modify the record dict created by each logging call.\n\n        The ``patcher`` may be used to update the record on-the-fly before it's propagated to the\n        handlers. This allows the \"extra\" dict to be populated with dynamic values and also permits\n        advanced modifications of the record emitted while logging a message. The function is called\n        once before sending the log message to the different handlers.\n\n        It is recommended to apply modification on the ``record[\"extra\"]`` dict rather than on the\n        ``record`` dict itself, as some values are used internally by `Loguru`, and modify them may\n        produce unexpected results.\n\n        The logger can be patched multiple times. In this case, the functions are called in the\n        same order as they are added.\n\n        Parameters\n        ----------\n        patcher: |callable|_\n            The function to which the record dict will be passed as the sole argument. This function\n            is in charge of updating the record in-place, the function does not need to return any\n            value, the modified record object will be re-used.\n\n        Returns\n        -------\n        :class:`~Logger`\n            A logger wrapping the core logger, but which records are passed through the ``patcher``\n            function before being sent to the added handlers.\n\n        Examples\n        --------\n        >>> logger.add(sys.stderr, format=\"{extra[utc]} {message}\")\n        >>> logger = logger.patch(lambda record: record[\"extra\"].update(utc=datetime.utcnow())\n        >>> logger.info(\"That's way, you can log messages with time displayed in UTC\")\n\n        >>> def wrapper(func):\n        ...     @functools.wraps(func)\n        ...     def wrapped(*args, **kwargs):\n        ...         logger.patch(lambda r: r.update(function=func.__name__)).info(\"Wrapped!\")\n        ...         return func(*args, **kwargs)\n        ...     return wrapped\n\n        >>> def recv_record_from_network(pipe):\n        ...     record = pickle.loads(pipe.read())\n        ...     level, message = record[\"level\"], record[\"message\"]\n        ...     logger.patch(lambda r: r.update(record)).log(level, message)\n        \"\"\"\n        *options, patchers, extra = self._options\n        return Logger(self._core, *options, [*patchers, patcher], extra)\n\n    def level(self, name, no=None, color=None, icon=None):\n        r\"\"\"Add, update or retrieve a logging level.\n\n        Logging levels are defined by their ``name`` to which a severity ``no``, an ansi ``color``\n        tag and an ``icon`` are associated and possibly modified at run-time. To |log| to a custom\n        level, you should necessarily use its name, the severity number is not linked back to levels\n        name (this implies that several levels can share the same severity).\n\n        To add a new level, its ``name`` and its ``no`` are required. A ``color`` and an ``icon``\n        can also be specified or will be empty by default.\n\n        To update an existing level, pass its ``name`` with the parameters to be changed. It is not\n        possible to modify the ``no`` of a level once it has been added.\n\n        To retrieve level information, the ``name`` solely suffices.\n\n        Parameters\n        ----------\n        name : |str|\n            The name of the logging level.\n        no : |int|\n            The severity of the level to be added or updated.\n        color : |str|\n            The color markup of the level to be added or updated.\n        icon : |str|\n            The icon of the level to be added or updated.\n\n        Returns\n        -------\n        ``Level``\n            A |namedtuple| containing information about the level.\n\n        Raises\n        ------\n        ValueError\n            If attempting to access a level with a ``name`` that is not registered, or if trying to\n            change the severity ``no`` of an existing level.\n\n        Examples\n        --------\n        >>> level = logger.level(\"ERROR\")\n        >>> print(level)\n        Level(name='ERROR', no=40, color='<red><bold>', icon='❌')\n        >>> logger.add(sys.stderr, format=\"{level.no} {level.icon} {message}\")\n        1\n        >>> logger.level(\"CUSTOM\", no=15, color=\"<blue>\", icon=\"@\")\n        Level(name='CUSTOM', no=15, color='<blue>', icon='@')\n        >>> logger.log(\"CUSTOM\", \"Logging...\")\n        15 @ Logging...\n        >>> logger.level(\"WARNING\", icon=r\"/!\\\\\")\n        Level(name='WARNING', no=30, color='<yellow><bold>', icon='/!\\\\\\\\')\n        >>> logger.warning(\"Updated!\")\n        30 /!\\\\ Updated!\n        \"\"\"\n        if not isinstance(name, str):\n            raise TypeError(\n                \"Invalid level name, it should be a string, not: '%s'\" % type(name).__name__\n            )\n\n        if no is color is icon is None:\n            try:\n                return self._core.levels[name]\n            except KeyError:\n                raise ValueError(\"Level '%s' does not exist\" % name) from None\n\n        if name not in self._core.levels:\n            if no is None:\n                raise ValueError(\n                    \"Level '%s' does not exist, you have to create it by specifying a level no\"\n                    % name\n                )\n            old_color, old_icon = \"\", \" \"\n        elif no is not None:\n            raise ValueError(\"Level '%s' already exists, you can't update its severity no\" % name)\n        else:\n            _, no, old_color, old_icon = self.level(name)\n\n        if color is None:\n            color = old_color\n\n        if icon is None:\n            icon = old_icon\n\n        if not isinstance(no, int):\n            raise TypeError(\n                \"Invalid level no, it should be an integer, not: '%s'\" % type(no).__name__\n            )\n\n        if no < 0:\n            raise ValueError(\"Invalid level no, it should be a positive integer, not: %d\" % no)\n\n        ansi = Colorizer.ansify(color)\n        level = Level(name, no, color, icon)\n\n        with self._core.lock:\n            self._core.levels[name] = level\n            self._core.levels_ansi_codes[name] = ansi\n            self._core.levels_lookup[name] = (name, name, no, icon)\n            for handler in self._core.handlers.values():\n                handler.update_format(name)\n\n        return level\n\n    def disable(self, name):\n        \"\"\"Disable logging of messages coming from ``name`` module and its children.\n\n        Developers of library using `Loguru` should absolutely disable it to avoid disrupting\n        users with unrelated logs messages.\n\n        Note that in some rare circumstances, it is not possible for `Loguru` to\n        determine the module's ``__name__`` value. In such situation, ``record[\"name\"]`` will be\n        equal to ``None``, this is why ``None`` is also a valid argument.\n\n        Parameters\n        ----------\n        name : |str| or ``None``\n            The name of the parent module to disable.\n\n        Examples\n        --------\n        >>> logger.info(\"Allowed message by default\")\n        [22:21:55] Allowed message by default\n        >>> logger.disable(\"my_library\")\n        >>> logger.info(\"While publishing a library, don't forget to disable logging\")\n        \"\"\"\n        self._change_activation(name, False)\n\n    def enable(self, name):\n        \"\"\"Enable logging of messages coming from ``name`` module and its children.\n\n        Logging is generally disabled by imported library using `Loguru`, hence this function\n        allows users to receive these messages anyway.\n\n        To enable all logs regardless of the module they are coming from, an empty string ``\"\"`` can\n        be passed.\n\n        Parameters\n        ----------\n        name : |str| or ``None``\n            The name of the parent module to re-allow.\n\n        Examples\n        --------\n        >>> logger.disable(\"__main__\")\n        >>> logger.info(\"Disabled, so nothing is logged.\")\n        >>> logger.enable(\"__main__\")\n        >>> logger.info(\"Re-enabled, messages are logged.\")\n        [22:46:12] Re-enabled, messages are logged.\n        \"\"\"\n        self._change_activation(name, True)\n\n    def configure(self, *, handlers=None, levels=None, extra=None, patcher=None, activation=None):\n        \"\"\"Configure the core logger.\n\n        It should be noted that ``extra`` values set using this function are available across all\n        modules, so this is the best way to set overall default values.\n\n        To load the configuration directly from a file, such as JSON or YAML, it is also possible to\n        use the |loguru-config|_ library developed by `@erezinman`_.\n\n        Parameters\n        ----------\n        handlers : |list| of |dict|, optional\n            A list of each handler to be added. The list should contain dicts of params passed to\n            the |add| function as keyword arguments. If not ``None``, all previously added\n            handlers are first removed.\n        levels : |list| of |dict|, optional\n            A list of each level to be added or updated. The list should contain dicts of params\n            passed to the |level| function as keyword arguments. This will never remove previously\n            created levels.\n        extra : |dict|, optional\n            A dict containing additional parameters bound to the core logger, useful to share\n            common properties if you call |bind| in several of your files modules. If not ``None``,\n            this will remove previously configured ``extra`` dict.\n        patcher : |callable|_, optional\n            A function that will be applied to the record dict of each logged messages across all\n            modules using the logger. It should modify the dict in-place without returning anything.\n            The function is executed prior to the one possibly added by the |patch| method. If not\n            ``None``, this will replace previously configured ``patcher`` function.\n        activation : |list| of |tuple|, optional\n            A list of ``(name, state)`` tuples which denotes which loggers should be enabled (if\n            ``state`` is ``True``) or disabled (if ``state`` is ``False``). The calls to |enable|\n            and |disable| are made accordingly to the list order. This will not modify previously\n            activated loggers, so if you need a fresh start prepend your list with ``(\"\", False)``\n            or ``(\"\", True)``.\n\n        Returns\n        -------\n        :class:`list` of :class:`int`\n            A list containing the identifiers of added sinks (if any).\n\n        Examples\n        --------\n        >>> logger.configure(\n        ...     handlers=[\n        ...         dict(sink=sys.stderr, format=\"[{time}] {message}\"),\n        ...         dict(sink=\"file.log\", enqueue=True, serialize=True),\n        ...     ],\n        ...     levels=[dict(name=\"NEW\", no=13, icon=\"¤\", color=\"\")],\n        ...     extra={\"common_to_all\": \"default\"},\n        ...     patcher=lambda record: record[\"extra\"].update(some_value=42),\n        ...     activation=[(\"my_module.secret\", False), (\"another_library.module\", True)],\n        ... )\n        [1, 2]\n\n        >>> # Set a default \"extra\" dict to logger across all modules, without \"bind()\"\n        >>> extra = {\"context\": \"foo\"}\n        >>> logger.configure(extra=extra)\n        >>> logger.add(sys.stderr, format=\"{extra[context]} - {message}\")\n        >>> logger.info(\"Context without bind\")\n        >>> # => \"foo - Context without bind\"\n        >>> logger.bind(context=\"bar\").info(\"Suppress global context\")\n        >>> # => \"bar - Suppress global context\"\n        \"\"\"\n        if handlers is not None:\n            self.remove()\n        else:\n            handlers = []\n\n        if levels is not None:\n            for params in levels:\n                self.level(**params)\n\n        if patcher is not None:\n            with self._core.lock:\n                self._core.patcher = patcher\n\n        if extra is not None:\n            with self._core.lock:\n                self._core.extra.clear()\n                self._core.extra.update(extra)\n\n        if activation is not None:\n            for name, state in activation:\n                if state:\n                    self.enable(name)\n                else:\n                    self.disable(name)\n\n        return [self.add(**params) for params in handlers]\n\n    def _change_activation(self, name, status):\n        if not (name is None or isinstance(name, str)):\n            raise TypeError(\n                \"Invalid name, it should be a string (or None), not: '%s'\" % type(name).__name__\n            )\n\n        with self._core.lock:\n            enabled = self._core.enabled.copy()\n\n            if name is None:\n                for n in enabled:\n                    if n is None:\n                        enabled[n] = status\n                self._core.activation_none = status\n                self._core.enabled = enabled\n                return\n\n            if name != \"\":\n                name += \".\"\n\n            activation_list = [\n                (n, s) for n, s in self._core.activation_list if n[: len(name)] != name\n            ]\n\n            parent_status = next((s for n, s in activation_list if name[: len(n)] == n), None)\n            if parent_status != status and not (name == \"\" and status is True):\n                activation_list.append((name, status))\n\n                def modules_depth(x):\n                    return x[0].count(\".\")\n\n                activation_list.sort(key=modules_depth, reverse=True)\n\n            for n in enabled:\n                if n is not None and (n + \".\")[: len(name)] == name:\n                    enabled[n] = status\n\n            self._core.activation_list = activation_list\n            self._core.enabled = enabled\n\n    @staticmethod\n    def parse(file, pattern, *, cast={}, chunk=2**16):  # noqa: B006\n        \"\"\"Parse raw logs and extract each entry as a |dict|.\n\n        The logging format has to be specified as the regex ``pattern``, it will then be\n        used to parse the ``file`` and retrieve each entry based on the named groups present\n        in the regex.\n\n        Parameters\n        ----------\n        file : |str|, |Path| or |file-like object|_\n            The path of the log file to be parsed, or an already opened file object.\n        pattern : |str| or |re.Pattern|_\n            The regex to use for logs parsing, it should contain named groups which will be included\n            in the returned dict.\n        cast : |callable|_ or |dict|, optional\n            A function that should convert in-place the regex groups parsed (a dict of string\n            values) to more appropriate types. If a dict is passed, it should be a mapping between\n            keys of parsed log dict and the function that should be used to convert the associated\n            value.\n        chunk : |int|, optional\n            The number of bytes read while iterating through the logs, this avoids having to load\n            the whole file in memory.\n\n        Yields\n        ------\n        :class:`dict`\n            The dict mapping regex named groups to matched values, as returned by |match.groupdict|\n            and optionally converted according to ``cast`` argument.\n\n        Examples\n        --------\n        >>> reg = r\"(?P<lvl>[0-9]+): (?P<msg>.*)\"    # If log format is \"{level.no} - {message}\"\n        >>> for e in logger.parse(\"file.log\", reg):  # A file line could be \"10 - A debug message\"\n        ...     print(e)                             # => {'lvl': '10', 'msg': 'A debug message'}\n\n        >>> caster = dict(lvl=int)                   # Parse 'lvl' key as an integer\n        >>> for e in logger.parse(\"file.log\", reg, cast=caster):\n        ...     print(e)                             # => {'lvl': 10, 'msg': 'A debug message'}\n\n        >>> def cast(groups):\n        ...     if \"date\" in groups:\n        ...         groups[\"date\"] = datetime.strptime(groups[\"date\"], \"%Y-%m-%d %H:%M:%S\")\n        ...\n        >>> with open(\"file.log\") as file:\n        ...     for log in logger.parse(file, reg, cast=cast):\n        ...         print(log[\"date\"], log[\"something_else\"])\n        \"\"\"\n        if isinstance(file, (str, PathLike)):\n\n            @contextlib.contextmanager\n            def opener():\n                with open(str(file)) as fileobj:\n                    yield fileobj\n\n        elif hasattr(file, \"read\") and callable(file.read):\n\n            @contextlib.contextmanager\n            def opener():\n                yield file\n\n        else:\n            raise TypeError(\n                \"Invalid file, it should be a string path or a file object, not: '%s'\"\n                % type(file).__name__\n            )\n\n        if isinstance(cast, dict):\n\n            def cast_function(groups):\n                for key, converter in cast.items():\n                    if key in groups:\n                        groups[key] = converter(groups[key])\n\n        elif callable(cast):\n            cast_function = cast\n        else:\n            raise TypeError(\n                \"Invalid cast, it should be a function or a dict, not: '%s'\" % type(cast).__name__\n            )\n\n        try:\n            regex = re.compile(pattern)\n        except TypeError:\n            raise TypeError(\n                \"Invalid pattern, it should be a string or a compiled regex, not: '%s'\"\n                % type(pattern).__name__\n            ) from None\n\n        with opener() as fileobj:\n            matches = Logger._find_iter(fileobj, regex, chunk)\n\n            for match in matches:\n                groups = match.groupdict()\n                cast_function(groups)\n                yield groups\n\n    @staticmethod\n    def _find_iter(fileobj, regex, chunk):\n        buffer = fileobj.read(0)\n\n        while True:\n            text = fileobj.read(chunk)\n            buffer += text\n            matches = list(regex.finditer(buffer))\n\n            if not text:\n                yield from matches\n                break\n\n            if len(matches) > 1:\n                end = matches[-2].end()\n                buffer = buffer[end:]\n                yield from matches[:-1]\n\n    def _log(self, level, from_decorator, options, message, args, kwargs):\n        core = self._core\n\n        if not core.handlers:\n            return\n\n        try:\n            level_id, level_name, level_no, level_icon = core.levels_lookup[level]\n        except (KeyError, TypeError):\n            if isinstance(level, str):\n                raise ValueError(\"Level '%s' does not exist\" % level) from None\n            if not isinstance(level, int):\n                raise TypeError(\n                    \"Invalid level, it should be an integer or a string, not: '%s'\"\n                    % type(level).__name__\n                ) from None\n            if level < 0:\n                raise ValueError(\n                    \"Invalid level value, it should be a positive integer, not: %d\" % level\n                ) from None\n            cache = (None, \"Level %d\" % level, level, \" \")\n            level_id, level_name, level_no, level_icon = cache\n            core.levels_lookup[level] = cache\n\n        if level_no < core.min_level:\n            return\n\n        (exception, depth, record, lazy, colors, raw, capture, patchers, extra) = options\n\n        try:\n            frame = get_frame(depth + 2)\n        except ValueError:\n            f_globals = {}\n            f_lineno = 0\n            co_name = \"<unknown>\"\n            co_filename = \"<unknown>\"\n        else:\n            f_globals = frame.f_globals\n            f_lineno = frame.f_lineno\n            co_name = frame.f_code.co_name\n            co_filename = frame.f_code.co_filename\n\n        try:\n            name = f_globals[\"__name__\"]\n        except KeyError:\n            name = None\n\n        try:\n            if not core.enabled[name]:\n                return\n        except KeyError:\n            enabled = core.enabled\n            if name is None:\n                status = core.activation_none\n                enabled[name] = status\n                if not status:\n                    return\n            else:\n                dotted_name = name + \".\"\n                for dotted_module_name, status in core.activation_list:\n                    if dotted_name[: len(dotted_module_name)] == dotted_module_name:\n                        if status:\n                            break\n                        enabled[name] = False\n                        return\n                enabled[name] = True\n\n        current_datetime = aware_now()\n\n        file_name = basename(co_filename)\n        thread = current_thread()\n        process = current_process()\n        elapsed = current_datetime - start_time\n\n        if exception:\n            if isinstance(exception, BaseException):\n                type_, value, traceback = (type(exception), exception, exception.__traceback__)\n            elif isinstance(exception, tuple):\n                type_, value, traceback = exception\n            else:\n                type_, value, traceback = sys.exc_info()\n            exception = RecordException(type_, value, traceback)\n        else:\n            exception = None\n\n        log_record = {\n            \"elapsed\": elapsed,\n            \"exception\": exception,\n            \"extra\": {**core.extra, **context.get(), **extra},\n            \"file\": RecordFile(file_name, co_filename),\n            \"function\": co_name,\n            \"level\": RecordLevel(level_name, level_no, level_icon),\n            \"line\": f_lineno,\n            \"message\": str(message),\n            \"module\": splitext(file_name)[0],\n            \"name\": name,\n            \"process\": RecordProcess(process.ident, process.name),\n            \"thread\": RecordThread(thread.ident, thread.name),\n            \"time\": current_datetime,\n        }\n\n        if lazy:\n            args = [arg() for arg in args]\n            kwargs = {key: value() for key, value in kwargs.items()}\n\n        if capture and kwargs:\n            log_record[\"extra\"].update(kwargs)\n\n        if record:\n            if \"record\" in kwargs:\n                raise TypeError(\n                    \"The message can't be formatted: 'record' shall not be used as a keyword \"\n                    \"argument while logger has been configured with '.opt(record=True)'\"\n                )\n            kwargs.update(record=log_record)\n\n        if colors:\n            if args or kwargs:\n                colored_message = Colorizer.prepare_message(message, args, kwargs)\n            else:\n                colored_message = Colorizer.prepare_simple_message(str(message))\n            log_record[\"message\"] = colored_message.stripped\n        elif args or kwargs:\n            colored_message = None\n            log_record[\"message\"] = message.format(*args, **kwargs)\n        else:\n            colored_message = None\n\n        if core.patcher:\n            core.patcher(log_record)\n\n        for patcher in patchers:\n            patcher(log_record)\n\n        for handler in core.handlers.values():\n            handler.emit(log_record, level_id, from_decorator, raw, colored_message)\n\n    def trace(__self, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log ``message.format(*args, **kwargs)`` with severity ``'TRACE'``.\"\"\"\n        __self._log(\"TRACE\", False, __self._options, __message, args, kwargs)\n\n    def debug(__self, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log ``message.format(*args, **kwargs)`` with severity ``'DEBUG'``.\"\"\"\n        __self._log(\"DEBUG\", False, __self._options, __message, args, kwargs)\n\n    def info(__self, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log ``message.format(*args, **kwargs)`` with severity ``'INFO'``.\"\"\"\n        __self._log(\"INFO\", False, __self._options, __message, args, kwargs)\n\n    def success(__self, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log ``message.format(*args, **kwargs)`` with severity ``'SUCCESS'``.\"\"\"\n        __self._log(\"SUCCESS\", False, __self._options, __message, args, kwargs)\n\n    def warning(__self, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log ``message.format(*args, **kwargs)`` with severity ``'WARNING'``.\"\"\"\n        __self._log(\"WARNING\", False, __self._options, __message, args, kwargs)\n\n    def error(__self, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log ``message.format(*args, **kwargs)`` with severity ``'ERROR'``.\"\"\"\n        __self._log(\"ERROR\", False, __self._options, __message, args, kwargs)\n\n    def critical(__self, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log ``message.format(*args, **kwargs)`` with severity ``'CRITICAL'``.\"\"\"\n        __self._log(\"CRITICAL\", False, __self._options, __message, args, kwargs)\n\n    def exception(__self, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log an ``'ERROR'```` message while also capturing the currently handled exception.\"\"\"\n        options = (True,) + __self._options[1:]\n        __self._log(\"ERROR\", False, options, __message, args, kwargs)\n\n    def log(__self, __level, __message, *args, **kwargs):  # noqa: N805\n        r\"\"\"Log ``message.format(*args, **kwargs)`` with severity ``level``.\"\"\"\n        __self._log(__level, False, __self._options, __message, args, kwargs)\n\n    def start(self, *args, **kwargs):\n        \"\"\"Add a handler sending log messages to a sink adequately configured.\n\n        Deprecated function, use |add| instead.\n\n        Warnings\n        --------\n        .. deprecated:: 0.2.2\n          ``start()`` will be removed in Loguru 1.0.0, it is replaced by ``add()`` which is a less\n          confusing name.\n        \"\"\"\n        warnings.warn(\n            \"The 'start()' method is deprecated, please use 'add()' instead\",\n            DeprecationWarning,\n            stacklevel=2,\n        )\n        return self.add(*args, **kwargs)\n\n    def stop(self, *args, **kwargs):\n        \"\"\"Remove a previously added handler and stop sending logs to its sink.\n\n        Deprecated function, use |remove| instead.\n\n        Warnings\n        --------\n        .. deprecated:: 0.2.2\n          ``stop()`` will be removed in Loguru 1.0.0, it is replaced by ``remove()`` which is a less\n          confusing name.\n        \"\"\"\n        warnings.warn(\n            \"The 'stop()' method is deprecated, please use 'remove()' instead\",\n            DeprecationWarning,\n            stacklevel=2,\n        )\n        return self.remove(*args, **kwargs)\n"
  },
  {
    "path": "libs/loguru/_recattrs.py",
    "content": "import pickle\nfrom collections import namedtuple\n\n\nclass RecordLevel:\n    __slots__ = (\"icon\", \"name\", \"no\")\n\n    def __init__(self, name, no, icon):\n        self.name = name\n        self.no = no\n        self.icon = icon\n\n    def __repr__(self):\n        return \"(name=%r, no=%r, icon=%r)\" % (self.name, self.no, self.icon)\n\n    def __format__(self, spec):\n        return self.name.__format__(spec)\n\n\nclass RecordFile:\n    __slots__ = (\"name\", \"path\")\n\n    def __init__(self, name, path):\n        self.name = name\n        self.path = path\n\n    def __repr__(self):\n        return \"(name=%r, path=%r)\" % (self.name, self.path)\n\n    def __format__(self, spec):\n        return self.name.__format__(spec)\n\n\nclass RecordThread:\n    __slots__ = (\"id\", \"name\")\n\n    def __init__(self, id_, name):\n        self.id = id_\n        self.name = name\n\n    def __repr__(self):\n        return \"(id=%r, name=%r)\" % (self.id, self.name)\n\n    def __format__(self, spec):\n        return self.id.__format__(spec)\n\n\nclass RecordProcess:\n    __slots__ = (\"id\", \"name\")\n\n    def __init__(self, id_, name):\n        self.id = id_\n        self.name = name\n\n    def __repr__(self):\n        return \"(id=%r, name=%r)\" % (self.id, self.name)\n\n    def __format__(self, spec):\n        return self.id.__format__(spec)\n\n\nclass RecordException(\n    namedtuple(\"RecordException\", (\"type\", \"value\", \"traceback\"))  # noqa: PYI024\n):\n    def __repr__(self):\n        return \"(type=%r, value=%r, traceback=%r)\" % (self.type, self.value, self.traceback)\n\n    def __reduce__(self):\n        # The traceback is not picklable, therefore it needs to be removed. Additionally, there's a\n        # possibility that the exception value is not picklable either. In such cases, we also need\n        # to remove it. This is done for user convenience, aiming to prevent error logging caused by\n        # custom exceptions from third-party libraries. If the serialization succeeds, we can reuse\n        # the pickled value later for optimization (so that it's not pickled twice). It's important\n        # to note that custom exceptions might not necessarily raise a PickleError, hence the\n        # generic Exception catch.\n        try:\n            pickled_value = pickle.dumps(self.value)\n        except Exception:\n            return (RecordException, (self.type, None, None))\n        else:\n            return (RecordException._from_pickled_value, (self.type, pickled_value, None))\n\n    @classmethod\n    def _from_pickled_value(cls, type_, pickled_value, traceback_):\n        try:\n            # It's safe to use \"pickle.loads()\" in this case because the pickled value is generated\n            # by the same code and is not coming from an untrusted source.\n            value = pickle.loads(pickled_value)\n        except Exception:\n            return cls(type_, None, traceback_)\n        else:\n            return cls(type_, value, traceback_)\n"
  },
  {
    "path": "libs/loguru/_simple_sinks.py",
    "content": "import inspect\nimport logging\nimport weakref\n\nfrom ._asyncio_loop import get_running_loop, get_task_loop\n\n\nclass StreamSink:\n    def __init__(self, stream):\n        self._stream = stream\n        self._flushable = callable(getattr(stream, \"flush\", None))\n        self._stoppable = callable(getattr(stream, \"stop\", None))\n        self._completable = inspect.iscoroutinefunction(getattr(stream, \"complete\", None))\n\n    def write(self, message):\n        self._stream.write(message)\n        if self._flushable:\n            self._stream.flush()\n\n    def stop(self):\n        if self._stoppable:\n            self._stream.stop()\n\n    def tasks_to_complete(self):\n        if not self._completable:\n            return []\n        return [self._stream.complete()]\n\n\nclass StandardSink:\n    def __init__(self, handler):\n        self._handler = handler\n\n    def write(self, message):\n        raw_record = message.record\n        message = str(message)\n        exc = raw_record[\"exception\"]\n        record = logging.getLogger().makeRecord(\n            raw_record[\"name\"],\n            raw_record[\"level\"].no,\n            raw_record[\"file\"].path,\n            raw_record[\"line\"],\n            message,\n            (),\n            (exc.type, exc.value, exc.traceback) if exc else None,\n            raw_record[\"function\"],\n            {\"extra\": raw_record[\"extra\"]},\n        )\n        if exc:\n            record.exc_text = \"\\n\"\n        record.levelname = raw_record[\"level\"].name\n        self._handler.handle(record)\n\n    def stop(self):\n        self._handler.close()\n\n    def tasks_to_complete(self):\n        return []\n\n\nclass AsyncSink:\n    def __init__(self, function, loop, error_interceptor):\n        self._function = function\n        self._loop = loop\n        self._error_interceptor = error_interceptor\n        self._tasks = weakref.WeakSet()\n\n    def write(self, message):\n        try:\n            loop = self._loop or get_running_loop()\n        except RuntimeError:\n            return\n\n        coroutine = self._function(message)\n        task = loop.create_task(coroutine)\n\n        def check_exception(future):\n            if future.cancelled() or future.exception() is None:\n                return\n            if not self._error_interceptor.should_catch():\n                raise future.exception()\n            self._error_interceptor.print(message.record, exception=future.exception())\n\n        task.add_done_callback(check_exception)\n        self._tasks.add(task)\n\n    def stop(self):\n        for task in self._tasks:\n            task.cancel()\n\n    def tasks_to_complete(self):\n        # To avoid errors due to \"self._tasks\" being mutated while iterated, the\n        # \"tasks_to_complete()\" method must be protected by the same lock as \"write()\" (which\n        # happens to be the handler lock). However, the tasks must not be awaited while the lock is\n        # acquired as this could lead to a deadlock. Therefore, we first need to collect the tasks\n        # to complete, then return them so that they can be awaited outside of the lock.\n        return [self._complete_task(task) for task in self._tasks]\n\n    async def _complete_task(self, task):\n        loop = get_running_loop()\n        if get_task_loop(task) is not loop:\n            return\n        try:\n            await task\n        except Exception:\n            pass  # Handled in \"check_exception()\"\n\n    def __getstate__(self):\n        state = self.__dict__.copy()\n        state[\"_tasks\"] = None\n        return state\n\n    def __setstate__(self, state):\n        self.__dict__.update(state)\n        self._tasks = weakref.WeakSet()\n\n\nclass CallableSink:\n    def __init__(self, function):\n        self._function = function\n\n    def write(self, message):\n        self._function(message)\n\n    def stop(self):\n        pass\n\n    def tasks_to_complete(self):\n        return []\n"
  },
  {
    "path": "libs/loguru/_string_parsers.py",
    "content": "import datetime\nimport re\n\n\nclass Frequencies:\n    @staticmethod\n    def hourly(t):\n        dt = t + datetime.timedelta(hours=1)\n        return dt.replace(minute=0, second=0, microsecond=0)\n\n    @staticmethod\n    def daily(t):\n        dt = t + datetime.timedelta(days=1)\n        return dt.replace(hour=0, minute=0, second=0, microsecond=0)\n\n    @staticmethod\n    def weekly(t):\n        dt = t + datetime.timedelta(days=7 - t.weekday())\n        return dt.replace(hour=0, minute=0, second=0, microsecond=0)\n\n    @staticmethod\n    def monthly(t):\n        if t.month == 12:\n            y, m = t.year + 1, 1\n        else:\n            y, m = t.year, t.month + 1\n        return t.replace(year=y, month=m, day=1, hour=0, minute=0, second=0, microsecond=0)\n\n    @staticmethod\n    def yearly(t):\n        y = t.year + 1\n        return t.replace(year=y, month=1, day=1, hour=0, minute=0, second=0, microsecond=0)\n\n\ndef parse_size(size):\n    size = size.strip()\n    reg = re.compile(r\"([e\\+\\-\\.\\d]+)\\s*([kmgtpezy])?(i)?(b)\", flags=re.I)\n\n    match = reg.fullmatch(size)\n\n    if not match:\n        return None\n\n    s, u, i, b = match.groups()\n\n    try:\n        s = float(s)\n    except ValueError as e:\n        raise ValueError(\"Invalid float value while parsing size: '%s'\" % s) from e\n\n    u = \"kmgtpezy\".index(u.lower()) + 1 if u else 0\n    i = 1024 if i else 1000\n    b = {\"b\": 8, \"B\": 1}[b] if b else 1\n    return s * i**u / b\n\n\ndef parse_duration(duration):\n    duration = duration.strip()\n    reg = r\"(?:([e\\+\\-\\.\\d]+)\\s*([a-z]+)[\\s\\,]*)\"\n\n    units = [\n        (\"y|years?\", 31536000),\n        (\"months?\", 2628000),\n        (\"w|weeks?\", 604800),\n        (\"d|days?\", 86400),\n        (\"h|hours?\", 3600),\n        (\"min(?:ute)?s?\", 60),\n        (\"s|sec(?:ond)?s?\", 1),  # spellchecker: disable-line\n        (\"ms|milliseconds?\", 0.001),\n        (\"us|microseconds?\", 0.000001),\n    ]\n\n    if not re.fullmatch(reg + \"+\", duration, flags=re.I):\n        return None\n\n    seconds = 0\n\n    for value, unit in re.findall(reg, duration, flags=re.I):\n        try:\n            value = float(value)\n        except ValueError as e:\n            raise ValueError(\"Invalid float value while parsing duration: '%s'\" % value) from e\n\n        try:\n            unit = next(u for r, u in units if re.fullmatch(r, unit, flags=re.I))\n        except StopIteration:\n            raise ValueError(\"Invalid unit value while parsing duration: '%s'\" % unit) from None\n\n        seconds += value * unit\n\n    return datetime.timedelta(seconds=seconds)\n\n\ndef parse_frequency(frequency):\n    frequencies = {\n        \"hourly\": Frequencies.hourly,\n        \"daily\": Frequencies.daily,\n        \"weekly\": Frequencies.weekly,\n        \"monthly\": Frequencies.monthly,\n        \"yearly\": Frequencies.yearly,\n    }\n    frequency = frequency.strip().lower()\n    return frequencies.get(frequency, None)\n\n\ndef parse_day(day):\n    days = {\n        \"monday\": 0,\n        \"tuesday\": 1,\n        \"wednesday\": 2,\n        \"thursday\": 3,\n        \"friday\": 4,\n        \"saturday\": 5,\n        \"sunday\": 6,\n    }\n    day = day.strip().lower()\n    if day in days:\n        return days[day]\n    if day.startswith(\"w\") and day[1:].isdigit():\n        day = int(day[1:])\n        if not 0 <= day < 7:\n            raise ValueError(\"Invalid weekday value while parsing day (expected [0-6]): '%d'\" % day)\n    else:\n        day = None\n\n    return day\n\n\ndef parse_time(time):\n    time = time.strip()\n    reg = re.compile(r\"^[\\d\\.\\:]+\\s*(?:[ap]m)?$\", flags=re.I)\n\n    if not reg.match(time):\n        return None\n\n    formats = [\n        \"%H\",\n        \"%H:%M\",\n        \"%H:%M:%S\",\n        \"%H:%M:%S.%f\",\n        \"%I %p\",\n        \"%I:%M %S\",\n        \"%I:%M:%S %p\",\n        \"%I:%M:%S.%f %p\",\n    ]\n\n    for format_ in formats:\n        try:\n            dt = datetime.datetime.strptime(time, format_)\n        except ValueError:\n            pass\n        else:\n            return dt.time()\n\n    raise ValueError(\"Unrecognized format while parsing time: '%s'\" % time)\n\n\ndef parse_daytime(daytime):\n    daytime = daytime.strip()\n    reg = re.compile(r\"^(.*?)\\s+at\\s+(.*)$\", flags=re.I)\n\n    match = reg.match(daytime)\n    if match:\n        day, time = match.groups()\n    else:\n        day = time = daytime\n\n    try:\n        parsed_day = parse_day(day)\n        if match and parsed_day is None:\n            raise ValueError(\"Unparsable day\")\n    except ValueError as e:\n        raise ValueError(\"Invalid day while parsing daytime: '%s'\" % day) from e\n\n    try:\n        parsed_time = parse_time(time)\n        if match and parsed_time is None:\n            raise ValueError(\"Unparsable time\")\n    except ValueError as e:\n        raise ValueError(\"Invalid time while parsing daytime: '%s'\" % time) from e\n\n    if parsed_day is None and parsed_time is None:\n        return None\n\n    return parsed_day, parsed_time\n"
  },
  {
    "path": "libs/loguru/py.typed",
    "content": ""
  },
  {
    "path": "libs/loguru-0.7.3.dist-info/METADATA",
    "content": "Metadata-Version: 2.3\nName: loguru\nVersion: 0.7.3\nSummary: Python logging made (stupidly) simple\nKeywords: loguru,logging,logger,log\nAuthor-email: Delgan <delgan.py@gmail.com>\nRequires-Python: >=3.5,<4.0\nDescription-Content-Type: text/markdown\nClassifier: Development Status :: 5 - Production/Stable\nClassifier: Topic :: System :: Logging\nClassifier: Intended Audience :: Developers\nClassifier: Natural Language :: English\nClassifier: License :: OSI Approved :: MIT License\nClassifier: Operating System :: OS Independent\nClassifier: Programming Language :: Python\nClassifier: Programming Language :: Python :: 3\nClassifier: Programming Language :: Python :: 3.5\nClassifier: Programming Language :: Python :: 3.6\nClassifier: Programming Language :: Python :: 3.7\nClassifier: Programming Language :: Python :: 3.8\nClassifier: Programming Language :: Python :: 3.9\nClassifier: Programming Language :: Python :: 3.10\nClassifier: Programming Language :: Python :: 3.11\nClassifier: Programming Language :: Python :: 3.12\nClassifier: Programming Language :: Python :: 3.13\nClassifier: Programming Language :: Python :: 3 :: Only\nClassifier: Programming Language :: Python :: Implementation :: PyPy\nClassifier: Programming Language :: Python :: Implementation :: CPython\nRequires-Dist: colorama>=0.3.4 ; sys_platform=='win32'\nRequires-Dist: aiocontextvars>=0.2.0 ; python_version<'3.7'\nRequires-Dist: win32-setctime>=1.0.0 ; sys_platform=='win32'\nRequires-Dist: pre-commit==4.0.1  ; extra == \"dev\" and ( python_version>='3.9')\nRequires-Dist: tox==3.27.1  ; extra == \"dev\" and ( python_version<'3.8')\nRequires-Dist: tox==4.23.2  ; extra == \"dev\" and ( python_version>='3.8')\nRequires-Dist: pytest==6.1.2  ; extra == \"dev\" and ( python_version<'3.8')\nRequires-Dist: pytest==8.3.2  ; extra == \"dev\" and ( python_version>='3.8')\nRequires-Dist: pytest-cov==2.12.1  ; extra == \"dev\" and ( python_version<'3.8')\nRequires-Dist: pytest-cov==5.0.0  ; extra == \"dev\" and ( python_version>='3.8' and python_version<'3.9')\nRequires-Dist: pytest-cov==6.0.0  ; extra == \"dev\" and ( python_version>='3.9')\nRequires-Dist: pytest-mypy-plugins==1.9.3  ; extra == \"dev\" and ( python_version>='3.6' and python_version<'3.8')\nRequires-Dist: pytest-mypy-plugins==3.1.0  ; extra == \"dev\" and ( python_version>='3.8')\nRequires-Dist: colorama==0.4.5  ; extra == \"dev\" and ( python_version<'3.8')\nRequires-Dist: colorama==0.4.6  ; extra == \"dev\" and ( python_version>='3.8')\nRequires-Dist: freezegun==1.1.0  ; extra == \"dev\" and ( python_version<'3.8')\nRequires-Dist: freezegun==1.5.0  ; extra == \"dev\" and ( python_version>='3.8')\nRequires-Dist: exceptiongroup==1.1.3  ; extra == \"dev\" and ( python_version>='3.7' and python_version<'3.11')\nRequires-Dist: mypy==v0.910  ; extra == \"dev\" and ( python_version<'3.6')\nRequires-Dist: mypy==v0.971  ; extra == \"dev\" and ( python_version>='3.6' and python_version<'3.7')\nRequires-Dist: mypy==v1.4.1  ; extra == \"dev\" and ( python_version>='3.7' and python_version<'3.8')\nRequires-Dist: mypy==v1.13.0  ; extra == \"dev\" and ( python_version>='3.8')\nRequires-Dist: Sphinx==8.1.3  ; extra == \"dev\" and ( python_version>='3.11')\nRequires-Dist: sphinx-rtd-theme==3.0.2  ; extra == \"dev\" and ( python_version>='3.11')\nRequires-Dist: myst-parser==4.0.0  ; extra == \"dev\" and ( python_version>='3.11')\nRequires-Dist: build==1.2.2  ; extra == \"dev\" and ( python_version>='3.11')\nRequires-Dist: twine==6.0.1  ; extra == \"dev\" and ( python_version>='3.11')\nProject-URL: Changelog, https://github.com/Delgan/loguru/blob/master/CHANGELOG.rst\nProject-URL: Documentation, https://loguru.readthedocs.io/en/stable/index.html\nProject-URL: Homepage, https://github.com/Delgan/loguru\nProvides-Extra: dev\n\n<p align=\"center\">\n    <a href=\"#readme\">\n        <img alt=\"Loguru logo\" src=\"https://raw.githubusercontent.com/Delgan/loguru/master/docs/_static/img/logo.png\">\n        <!-- Logo credits: Sambeet from Pixaday -->\n        <!-- Logo fonts: Comfortaa + Raleway -->\n    </a>\n</p>\n<p align=\"center\">\n    <a href=\"https://pypi.python.org/pypi/loguru\"><img alt=\"Pypi version\" src=\"https://img.shields.io/pypi/v/loguru.svg\"></a>\n    <a href=\"https://pypi.python.org/pypi/loguru\"><img alt=\"Python versions\" src=\"https://img.shields.io/badge/python-3.5%2B%20%7C%20PyPy-blue.svg\"></a>\n    <a href=\"https://loguru.readthedocs.io/en/stable/index.html\"><img alt=\"Documentation\" src=\"https://img.shields.io/readthedocs/loguru.svg\"></a>\n    <a href=\"https://github.com/Delgan/loguru/actions/workflows/tests.yml?query=branch:master\"><img alt=\"Build status\" src=\"https://img.shields.io/github/actions/workflow/status/Delgan/loguru/tests.yml?branch=master\"></a>\n    <a href=\"https://codecov.io/gh/delgan/loguru/branch/master\"><img alt=\"Coverage\" src=\"https://img.shields.io/codecov/c/github/delgan/loguru/master.svg\"></a>\n    <a href=\"https://app.codacy.com/gh/Delgan/loguru/dashboard\"><img alt=\"Code quality\" src=\"https://img.shields.io/codacy/grade/be7337df3c0d40d1929eb7f79b1671a6.svg\"></a>\n    <a href=\"https://github.com/Delgan/loguru/blob/master/LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/github/license/delgan/loguru.svg\"></a>\n</p>\n<p align=\"center\">\n    <a href=\"#readme\">\n        <img alt=\"Loguru logo\" src=\"https://raw.githubusercontent.com/Delgan/loguru/master/docs/_static/img/demo.gif\">\n    </a>\n</p>\n\n______________________________________________________________________\n\n**Loguru** is a library which aims to bring enjoyable logging in Python.\n\nDid you ever feel lazy about configuring a logger and used `print()` instead?... I did, yet logging is fundamental to every application and eases the process of debugging. Using **Loguru** you have no excuse not to use logging from the start, this is as simple as `from loguru import logger`.\n\nAlso, this library is intended to make Python logging less painful by adding a bunch of useful functionalities that solve caveats of the standard loggers. Using logs in your application should be an automatism, **Loguru** tries to make it both pleasant and powerful.\n\n<!-- end-of-readme-intro -->\n\n## Installation\n\n```\npip install loguru\n```\n\n## Features\n\n- [Ready to use out of the box without boilerplate](#ready-to-use-out-of-the-box-without-boilerplate)\n- [No Handler, no Formatter, no Filter: one function to rule them all](#no-handler-no-formatter-no-filter-one-function-to-rule-them-all)\n- [Easier file logging with rotation / retention / compression](#easier-file-logging-with-rotation--retention--compression)\n- [Modern string formatting using braces style](#modern-string-formatting-using-braces-style)\n- [Exceptions catching within threads or main](#exceptions-catching-within-threads-or-main)\n- [Pretty logging with colors](#pretty-logging-with-colors)\n- [Asynchronous, Thread-safe, Multiprocess-safe](#asynchronous-thread-safe-multiprocess-safe)\n- [Fully descriptive exceptions](#fully-descriptive-exceptions)\n- [Structured logging as needed](#structured-logging-as-needed)\n- [Lazy evaluation of expensive functions](#lazy-evaluation-of-expensive-functions)\n- [Customizable levels](#customizable-levels)\n- [Better datetime handling](#better-datetime-handling)\n- [Suitable for scripts and libraries](#suitable-for-scripts-and-libraries)\n- [Entirely compatible with standard logging](#entirely-compatible-with-standard-logging)\n- [Personalizable defaults through environment variables](#personalizable-defaults-through-environment-variables)\n- [Convenient parser](#convenient-parser)\n- [Exhaustive notifier](#exhaustive-notifier)\n- <s>[10x faster than built-in logging](#10x-faster-than-built-in-logging)</s>\n\n## Take the tour\n\n### Ready to use out of the box without boilerplate\n\nThe main concept of Loguru is that **there is one and only one** [`logger`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger).\n\nFor convenience, it is pre-configured and outputs to `stderr` to begin with (but that's entirely configurable).\n\n```python\nfrom loguru import logger\n\nlogger.debug(\"That's it, beautiful and simple logging!\")\n```\n\nThe [`logger`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger) is just an interface which dispatches log messages to configured handlers. Simple, right?\n\n### No Handler, no Formatter, no Filter: one function to rule them all\n\nHow to add a handler? How to set up logs formatting? How to filter messages? How to set level?\n\nOne answer: the [`add()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add) function.\n\n```python\nlogger.add(sys.stderr, format=\"{time} {level} {message}\", filter=\"my_module\", level=\"INFO\")\n```\n\nThis function should be used to register [sinks](https://loguru.readthedocs.io/en/stable/api/logger.html#sink) which are responsible for managing [log messages](https://loguru.readthedocs.io/en/stable/api/logger.html#message) contextualized with a [record dict](https://loguru.readthedocs.io/en/stable/api/logger.html#record). A sink can take many forms: a simple function, a string path, a file-like object, a coroutine function or a built-in Handler.\n\nNote that you may also  a previously added handler by using the identifier returned while adding it. This is particularly useful if you want to supersede the default `stderr` handler: just call [`logger.remove()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.remove) to make a fresh start.\n\n### Easier file logging with rotation / retention / compression\n\nIf you want to send logged messages to a file, you just have to use a string path as the sink. It can be automatically timed too for convenience:\n\n```python\nlogger.add(\"file_{time}.log\")\n```\n\nIt is also [easily configurable](https://loguru.readthedocs.io/en/stable/api/logger.html#file) if you need rotating logger, if you want to remove older logs, or if you wish to compress your files at closure.\n\n```python\nlogger.add(\"file_1.log\", rotation=\"500 MB\")    # Automatically rotate too big file\nlogger.add(\"file_2.log\", rotation=\"12:00\")     # New file is created each day at noon\nlogger.add(\"file_3.log\", rotation=\"1 week\")    # Once the file is too old, it's rotated\n\nlogger.add(\"file_X.log\", retention=\"10 days\")  # Cleanup after some time\n\nlogger.add(\"file_Y.log\", compression=\"zip\")    # Save some loved space\n```\n\n### Modern string formatting using braces style\n\nLoguru favors the much more elegant and powerful `{}` formatting over `%`, logging functions are actually equivalent to `str.format()`.\n\n```python\nlogger.info(\"If you're using Python {}, prefer {feature} of course!\", 3.6, feature=\"f-strings\")\n```\n\n### Exceptions catching within threads or main\n\nHave you ever seen your program crashing unexpectedly without seeing anything in the log file? Did you ever notice that exceptions occurring in threads were not logged? This can be solved using the [`catch()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.catch) decorator / context manager which ensures that any error is correctly propagated to the [`logger`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger).\n\n```python\n@logger.catch\ndef my_function(x, y, z):\n    # An error? It's caught anyway!\n    return 1 / (x + y + z)\n```\n\n### Pretty logging with colors\n\nLoguru automatically adds colors to your logs if your terminal is compatible. You can define your favorite style by using [markup tags](https://loguru.readthedocs.io/en/stable/api/logger.html#color) in the sink format.\n\n```python\nlogger.add(sys.stdout, colorize=True, format=\"<green>{time}</green> <level>{message}</level>\")\n```\n\n### Asynchronous, Thread-safe, Multiprocess-safe\n\nAll sinks added to the [`logger`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger) are thread-safe by default. They are not multiprocess-safe, but you can `enqueue` the messages to ensure logs integrity. This same argument can also be used if you want async logging.\n\n```python\nlogger.add(\"somefile.log\", enqueue=True)\n```\n\nCoroutine functions used as sinks are also supported and should be awaited with [`complete()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.complete).\n\n### Fully descriptive exceptions\n\nLogging exceptions that occur in your code is important to track bugs, but it's quite useless if you don't know why it failed. Loguru helps you identify problems by allowing the entire stack trace to be displayed, including values of variables (thanks [`better_exceptions`](https://github.com/Qix-/better-exceptions) for this!).\n\nThe code:\n\n```python\n# Caution, \"diagnose=True\" is the default and may leak sensitive data in prod\nlogger.add(\"out.log\", backtrace=True, diagnose=True)\n\ndef func(a, b):\n    return a / b\n\ndef nested(c):\n    try:\n        func(5, c)\n    except ZeroDivisionError:\n        logger.exception(\"What?!\")\n\nnested(0)\n```\n\nWould result in:\n\n```none\n2018-07-17 01:38:43.975 | ERROR    | __main__:nested:10 - What?!\nTraceback (most recent call last):\n\n  File \"test.py\", line 12, in <module>\n    nested(0)\n    └ <function nested at 0x7f5c755322f0>\n\n> File \"test.py\", line 8, in nested\n    func(5, c)\n    │       └ 0\n    └ <function func at 0x7f5c79fc2e18>\n\n  File \"test.py\", line 4, in func\n    return a / b\n           │   └ 0\n           └ 5\n\nZeroDivisionError: division by zero\n```\n\nNote that this feature won't work on default Python REPL due to unavailable frame data.\n\nSee also: [Security considerations when using Loguru](https://loguru.readthedocs.io/en/stable/resources/recipes.html#security-considerations-when-using-loguru).\n\n### Structured logging as needed\n\nWant your logs to be serialized for easier parsing or to pass them around? Using the `serialize` argument, each log message will be converted to a JSON string before being sent to the configured sink.\n\n```python\nlogger.add(custom_sink_function, serialize=True)\n```\n\nUsing [`bind()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.bind) you can contextualize your logger messages by modifying the `extra` record attribute.\n\n```python\nlogger.add(\"file.log\", format=\"{extra[ip]} {extra[user]} {message}\")\ncontext_logger = logger.bind(ip=\"192.168.0.1\", user=\"someone\")\ncontext_logger.info(\"Contextualize your logger easily\")\ncontext_logger.bind(user=\"someone_else\").info(\"Inline binding of extra attribute\")\ncontext_logger.info(\"Use kwargs to add context during formatting: {user}\", user=\"anybody\")\n```\n\nIt is possible to modify a context-local state temporarily with [`contextualize()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.contextualize):\n\n```python\nwith logger.contextualize(task=task_id):\n    do_something()\n    logger.info(\"End of task\")\n```\n\nYou can also have more fine-grained control over your logs by combining [`bind()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.bind) and `filter`:\n\n```python\nlogger.add(\"special.log\", filter=lambda record: \"special\" in record[\"extra\"])\nlogger.debug(\"This message is not logged to the file\")\nlogger.bind(special=True).info(\"This message, though, is logged to the file!\")\n```\n\nFinally, the [`patch()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.patch) method allows dynamic values to be attached to the record dict of each new message:\n\n```python\nlogger.add(sys.stderr, format=\"{extra[utc]} {message}\")\nlogger = logger.patch(lambda record: record[\"extra\"].update(utc=datetime.utcnow()))\n```\n\n### Lazy evaluation of expensive functions\n\nSometime you would like to log verbose information without performance penalty in production, you can use the [`opt()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.opt) method to achieve this.\n\n```python\nlogger.opt(lazy=True).debug(\"If sink level <= DEBUG: {x}\", x=lambda: expensive_function(2**64))\n\n# By the way, \"opt()\" serves many usages\nlogger.opt(exception=True).info(\"Error stacktrace added to the log message (tuple accepted too)\")\nlogger.opt(colors=True).info(\"Per message <blue>colors</blue>\")\nlogger.opt(record=True).info(\"Display values from the record (eg. {record[thread]})\")\nlogger.opt(raw=True).info(\"Bypass sink formatting\\n\")\nlogger.opt(depth=1).info(\"Use parent stack context (useful within wrapped functions)\")\nlogger.opt(capture=False).info(\"Keyword arguments not added to {dest} dict\", dest=\"extra\")\n```\n\n### Customizable levels\n\nLoguru comes with all standard [logging levels](https://loguru.readthedocs.io/en/stable/api/logger.html#levels) to which [`trace()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.trace) and [`success()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.success) are added. Do you need more? Then, just create it by using the [`level()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.level) function.\n\n```python\nnew_level = logger.level(\"SNAKY\", no=38, color=\"<yellow>\", icon=\"🐍\")\n\nlogger.log(\"SNAKY\", \"Here we go!\")\n```\n\n### Better datetime handling\n\nThe standard logging is bloated with arguments like `datefmt` or `msecs`, `%(asctime)s` and `%(created)s`, naive datetimes without timezone information, not intuitive formatting, etc. Loguru [fixes it](https://loguru.readthedocs.io/en/stable/api/logger.html#time):\n\n```python\nlogger.add(\"file.log\", format=\"{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}\")\n```\n\n### Suitable for scripts and libraries\n\nUsing the logger in your scripts is easy, and you can [`configure()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.configure) it at start. To use Loguru from inside a library, remember to never call [`add()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add) but use [`disable()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.disable) instead so logging functions become no-op. If a developer wishes to see your library's logs, they can [`enable()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.enable) it again.\n\n```python\n# For scripts\nconfig = {\n    \"handlers\": [\n        {\"sink\": sys.stdout, \"format\": \"{time} - {message}\"},\n        {\"sink\": \"file.log\", \"serialize\": True},\n    ],\n    \"extra\": {\"user\": \"someone\"}\n}\nlogger.configure(**config)\n\n# For libraries, should be your library's `__name__`\nlogger.disable(\"my_library\")\nlogger.info(\"No matter added sinks, this message is not displayed\")\n\n# In your application, enable the logger in the library\nlogger.enable(\"my_library\")\nlogger.info(\"This message however is propagated to the sinks\")\n```\n\nFor additional convenience, you can also use the [`loguru-config`](https://github.com/erezinman/loguru-config) library to setup the `logger` directly from a configuration file.\n\n### Entirely compatible with standard logging\n\nWish to use built-in logging `Handler` as a Loguru sink?\n\n```python\nhandler = logging.handlers.SysLogHandler(address=('localhost', 514))\nlogger.add(handler)\n```\n\nNeed to propagate Loguru messages to standard `logging`?\n\n```python\nclass PropagateHandler(logging.Handler):\n    def emit(self, record: logging.LogRecord) -> None:\n        logging.getLogger(record.name).handle(record)\n\nlogger.add(PropagateHandler(), format=\"{message}\")\n```\n\nWant to intercept standard `logging` messages toward your Loguru sinks?\n\n```python\nclass InterceptHandler(logging.Handler):\n    def emit(self, record: logging.LogRecord) -> None:\n        # Get corresponding Loguru level if it exists.\n        level: str | int\n        try:\n            level = logger.level(record.levelname).name\n        except ValueError:\n            level = record.levelno\n\n        # Find caller from where originated the logged message.\n        frame, depth = inspect.currentframe(), 0\n        while frame and (depth == 0 or frame.f_code.co_filename == logging.__file__):\n            frame = frame.f_back\n            depth += 1\n\n        logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())\n\nlogging.basicConfig(handlers=[InterceptHandler()], level=0, force=True)\n```\n\n### Personalizable defaults through environment variables\n\nDon't like the default logger formatting? Would prefer another `DEBUG` color? [No problem](https://loguru.readthedocs.io/en/stable/api/logger.html#env):\n\n```bash\n# Linux / OSX\nexport LOGURU_FORMAT=\"{time} | <lvl>{message}</lvl>\"\n\n# Windows\nsetx LOGURU_DEBUG_COLOR \"<green>\"\n```\n\n### Convenient parser\n\nIt is often useful to extract specific information from generated logs, this is why Loguru provides a [`parse()`](https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.parse) method which helps to deal with logs and regexes.\n\n```python\npattern = r\"(?P<time>.*) - (?P<level>[0-9]+) - (?P<message>.*)\"  # Regex with named groups\ncaster_dict = dict(time=dateutil.parser.parse, level=int)        # Transform matching groups\n\nfor groups in logger.parse(\"file.log\", pattern, cast=caster_dict):\n    print(\"Parsed:\", groups)\n    # {\"level\": 30, \"message\": \"Log example\", \"time\": datetime(2018, 12, 09, 11, 23, 55)}\n```\n\n### Exhaustive notifier\n\nLoguru can easily be combined with the great [`apprise`](https://github.com/caronc/apprise) library (must be installed separately) to receive an e-mail when your program fail unexpectedly or to send many other kind of notifications.\n\n```python\nimport apprise\n\n# Define the configuration constants.\nWEBHOOK_ID = \"123456790\"\nWEBHOOK_TOKEN = \"abc123def456\"\n\n# Prepare the object to send Discord notifications.\nnotifier = apprise.Apprise()\nnotifier.add(f\"discord://{WEBHOOK_ID}/{WEBHOOK_TOKEN}\")\n\n# Install a handler to be alerted on each error.\n# You can filter out logs from \"apprise\" itself to avoid recursive calls.\nlogger.add(notifier.notify, level=\"ERROR\", filter={\"apprise\": False})\n```\n\n<s>\n\n### 10x faster than built-in logging\n\n</s>\n\nAlthough logging impact on performances is in most cases negligible, a zero-cost logger would allow to use it anywhere without much concern. In an upcoming release, Loguru's critical functions will be implemented in C for maximum speed.\n\n<!-- end-of-readme-usage -->\n\n## Documentation\n\n- [API Reference](https://loguru.readthedocs.io/en/stable/api/logger.html)\n- [Help & Guides](https://loguru.readthedocs.io/en/stable/resources.html)\n- [Type hints](https://loguru.readthedocs.io/en/stable/api/type_hints.html)\n- [Contributing](https://loguru.readthedocs.io/en/stable/project/contributing.html)\n- [License](https://loguru.readthedocs.io/en/stable/project/license.html)\n- [Changelog](https://loguru.readthedocs.io/en/stable/project/changelog.html)\n\n"
  },
  {
    "path": "libs/loguru-0.7.3.dist-info/RECORD",
    "content": "loguru/__init__.py,sha256=GW5eD_nyI0UW3Lk4XMv2UkwKbXKwqXylyBvSJafD3xk,627\nloguru/__init__.pyi,sha256=vhY7gh-iV4t1PMmcQsuujyBX8-HPuNj8AR_Oyt4bpjM,11658\nloguru/_asyncio_loop.py,sha256=La8XzLjvRYpNiylZkOFwLKgd-WRMXzTZZAoEzlL68wY,597\nloguru/_better_exceptions.py,sha256=IPI3YCKsbL3tD0TphPhSnpyBcpQcgSOKskNV8EJD8Qw,21516\nloguru/_colorama.py,sha256=5Ic3cVIppzQa7mz2XbKJLmjiiPpHm4AVbqhSiXKVIs0,1735\nloguru/_colorizer.py,sha256=sHjJXRRAayCeF6etgSMUpA8hMJ5VIGkeEzANOvsem9w,14930\nloguru/_contextvars.py,sha256=Lns4FxY_Bl2qnLd3LmV7CH_t1p005yjkD_zsdAd2v5Y,321\nloguru/_ctime_functions.py,sha256=M8tyix09s7ChlaMQCfgNT8-UJCgsh3t2RcgNstzelNE,1527\nloguru/_datetime.py,sha256=_mig9sT-0bCPe8tEUKVOqI8r5OCMc1F8Nt0t1IxeIZU,5380\nloguru/_defaults.py,sha256=TKXt6ufw9yu00zOt0KawoEmVenvRp6Ekdr1S_n1virc,3007\nloguru/_error_interceptor.py,sha256=HRm9ExfZVrFJ-uJr1uGKvbsUabpKCj0rstOfgm7C5Bg,1107\nloguru/_file_sink.py,sha256=MkbsK_4HdHKdDnInDP2qu1x3v5Bdg7JsC35piWpjUVo,14404\nloguru/_filters.py,sha256=z__2q8k_XAO1qLf3OeqbN3UYN4sZWvel2_5sjbkXn7g,618\nloguru/_get_frame.py,sha256=UcTMXjeSl3Ihh1WesL4ell4TMDZN9PW-SPdyiVYQtlg,458\nloguru/_handler.py,sha256=BSn0W9AKNSSJHiQVu3AFxX8GhK0oRKkghHYtFhnpdgc,12634\nloguru/_locks_machinery.py,sha256=APEFg0Yx7pjnCLig5YMnBSZSw5yf8xybm2pd4uG44rw,1307\nloguru/_logger.py,sha256=VplGyfaU8nInwGvxCK3S3Yhm78Vix3mkfl4BqqpPaWA,97856\nloguru/_recattrs.py,sha256=jv53s9nSUgQ0GcYWIyE_cZ5UDt4NVzETGaiTRtpirDE,2884\nloguru/_simple_sinks.py,sha256=iZ1Xkvnxfew_AVjbZ2HZ0_cw8a1994YCGnH5XmL98sQ,3818\nloguru/_string_parsers.py,sha256=ExU3ThXKtFpS7KZyqjxn-zD9sqbu5Wh0tgr1nQ8daKo,4811\nloguru/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0\nloguru-0.7.3.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82\nloguru-0.7.3.dist-info/METADATA,sha256=OjcfiwiQFP2u4FXtxEDUSCQoR5Jq1nYTYhr0AvmXX9k,22596\nloguru-0.7.3.dist-info/RECORD,,\n"
  },
  {
    "path": "libs/loguru-0.7.3.dist-info/WHEEL",
    "content": "Wheel-Version: 1.0\nGenerator: flit 3.10.1\nRoot-Is-Purelib: true\nTag: py3-none-any\n"
  },
  {
    "path": "libs/mutf8/__init__.py",
    "content": "\"\"\"\nUtility methods for handling oddities in character encoding encountered\nwhen parsing and writing JVM ClassFiles or object serialization archives.\n\nMUTF-8 is the same as CESU-8, but with different encoding for 0x00 bytes.\n\n.. note::\n\n    http://bugs.python.org/issue2857 was an attempt in 2008 to get support\n    for MUTF-8/CESU-8 into the python core.\n\"\"\"\n\n\ntry:\n    from mutf8.cmutf8 import decode_modified_utf8, encode_modified_utf8\nexcept ImportError:\n    from mutf8.mutf8 import decode_modified_utf8, encode_modified_utf8\n\n\n# Shut up linters.\nALL_IMPORTS = [decode_modified_utf8, encode_modified_utf8]\n"
  },
  {
    "path": "libs/mutf8/mutf8.py",
    "content": "def decode_modified_utf8(s: bytes) -> str:\n    \"\"\"\n    Decodes a bytestring containing modified UTF-8 as defined in section\n    4.4.7 of the JVM specification.\n\n    :param s: bytestring to be converted.\n    :returns: A unicode representation of the original string.\n    \"\"\"\n    s_out = []\n    s_len = len(s)\n    s_ix = 0\n\n    while s_ix < s_len:\n        b1 = s[s_ix]\n        s_ix += 1\n\n        if b1 == 0:\n            raise UnicodeDecodeError(\n                'mutf-8',\n                s,\n                s_ix - 1,\n                s_ix,\n                'Embedded NULL byte in input.'\n            )\n        if b1 < 0x80:\n            # ASCII/one-byte codepoint.\n            s_out.append(chr(b1))\n        elif (b1 & 0xE0) == 0xC0:\n            # Two-byte codepoint.\n            if s_ix >= s_len:\n                raise UnicodeDecodeError(\n                        'mutf-8',\n                        s,\n                        s_ix - 1,\n                        s_ix,\n                        '2-byte codepoint started, but input too short to'\n                        ' finish.'\n                    )\n\n            s_out.append(\n                chr(\n                    (b1 & 0x1F) << 0x06 |\n                    (s[s_ix] & 0x3F)\n                )\n            )\n            s_ix += 1\n        elif (b1 & 0xF0) == 0xE0:\n            # Three-byte codepoint.\n            if s_ix + 1 >= s_len:\n                raise UnicodeDecodeError(\n                        'mutf-8',\n                        s,\n                        s_ix - 1,\n                        s_ix,\n                        '3-byte or 6-byte codepoint started, but input too'\n                        ' short to finish.'\n                    )\n\n            b2 = s[s_ix]\n            b3 = s[s_ix + 1]\n\n            if b1 == 0xED and (b2 & 0xF0) == 0xA0:\n                # Possible six-byte codepoint.\n                if s_ix + 4 >= s_len:\n                    raise UnicodeDecodeError(\n                            'mutf-8',\n                            s,\n                            s_ix - 1,\n                            s_ix,\n                            '3-byte or 6-byte codepoint started, but input too'\n                            ' short to finish.'\n                        )\n\n                b4 = s[s_ix + 2]\n                b5 = s[s_ix + 3]\n                b6 = s[s_ix + 4]\n\n                if b4 == 0xED and (b5 & 0xF0) == 0xB0:\n                    # Definite six-byte codepoint.\n                    s_out.append(\n                        chr(\n                            0x10000 |\n                            (b2 & 0x0F) << 0x10 |\n                            (b3 & 0x3F) << 0x0A |\n                            (b5 & 0x0F) << 0x06 |\n                            (b6 & 0x3F)\n                        )\n                    )\n                    s_ix += 5\n                    continue\n\n            s_out.append(\n                chr(\n                    (b1 & 0x0F) << 0x0C |\n                    (b2 & 0x3F) << 0x06 |\n                    (b3 & 0x3F)\n                )\n            )\n            s_ix += 2\n        else:\n            raise RuntimeError\n\n    return u''.join(s_out)\n\n\ndef encode_modified_utf8(u: str) -> bytes:\n    \"\"\"\n    Encodes a unicode string as modified UTF-8 as defined in section 4.4.7\n    of the JVM specification.\n\n    :param u: unicode string to be converted.\n    :returns: A decoded bytearray.\n    \"\"\"\n    final_string = bytearray()\n\n    for c in (ord(char) for char in u):\n        if c == 0x00:\n            # NULL byte encoding shortcircuit.\n            final_string.extend([0xC0, 0x80])\n        elif c <= 0x7F:\n            # ASCII\n            final_string.append(c)\n        elif c <= 0x7FF:\n            # Two-byte codepoint.\n            final_string.extend([\n                (0xC0 | (0x1F & (c >> 0x06))),\n                (0x80 | (0x3F & c))\n            ])\n        elif c <= 0xFFFF:\n            # Three-byte codepoint.\n            final_string.extend([\n                (0xE0 | (0x0F & (c >> 0x0C))),\n                (0x80 | (0x3F & (c >> 0x06))),\n                (0x80 | (0x3F & c))\n            ])\n        else:\n            # Six-byte codepoint.\n            final_string.extend([\n                0xED,\n                0xA0 | ((c >> 0x10) & 0x0F),\n                0x80 | ((c >> 0x0A) & 0x3f),\n                0xED,\n                0xb0 | ((c >> 0x06) & 0x0f),\n                0x80 | (c & 0x3f)\n            ])\n\n    return bytes(final_string)\n"
  },
  {
    "path": "libs/mutf8-1.0.6.dist-info/LICENCE",
    "content": "Copyright (c) 2012-2015 Tyler Kennedy <tk@tkte.ch>. All rights reserved.\n \nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"), \nto deal in the Software without restriction, including without limitation \nthe rights to use, copy, modify, merge, publish, distribute, sublicense, \nand/or sell copies of the Software, and to permit persons to whom the \nSoftware is furnished to do so, subject to the following conditions:\n \nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n \nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER \nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING \nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \nDEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "libs/mutf8-1.0.6.dist-info/METADATA",
    "content": "Metadata-Version: 2.1\nName: mutf8\nVersion: 1.0.6\nSummary: Fast MUTF-8 encoder & decoder\nHome-page: http://github.com/TkTech/mutf8\nAuthor: Tyler Kennedy\nAuthor-email: tk@tkte.ch\nLicense: UNKNOWN\nKeywords: mutf-8,cesu-8,jvm\nPlatform: UNKNOWN\nClassifier: Programming Language :: Python :: 3\nClassifier: License :: OSI Approved :: MIT License\nClassifier: Operating System :: OS Independent\nClassifier: Intended Audience :: Developers\nDescription-Content-Type: text/markdown\nLicense-File: LICENCE\nProvides-Extra: test\nRequires-Dist: pytest ; extra == 'test'\nRequires-Dist: pytest-benchmark ; extra == 'test'\n\n![Tests](https://github.com/TkTech/mutf8/workflows/Tests/badge.svg?branch=master)\n\n# mutf-8\n\nThis package contains simple pure-python as well as C encoders and decoders for\nthe MUTF-8 character encoding. In most cases, you can also parse the even-rarer\nCESU-8.\n\nThese days, you'll most likely encounter MUTF-8 when working on files or\nprotocols related to the JVM. Strings in a Java `.class` file are encoded using\nMUTF-8, strings passed by the JNI, as well as strings exported by the object\nserializer.\n\nThis library was extracted from [Lawu][], a Python library for working with JVM\nclass files.\n\n## 🎉 Installation\n\nInstall the package from PyPi:\n\n```\npip install mutf8\n```\n\nBinary wheels are available for the following:\n\n|                  | py3.6 | py3.7 | py3.8 | py3.9 |\n| ---------------- | ----- | ----- | ----- | ----- |\n| OS X (x86_64)    | y     | y     | y     | y     |\n| Windows (x86_64) | y     | y     | y     | y     |\n| Linux (x86_64)   | y     | y     | y     | y     |\n\nIf binary wheels are not available, it will attempt to build the C extension\nfrom source with any C99 compiler. If it could not build, it will fall back\nto a pure-python version.\n\n## Usage\n\nEncoding and decoding is simple:\n\n```python\nfrom mutf8 import encode_modified_utf8, decode_modified_utf8\n\nunicode = decode_modified_utf8(byte_like_object)\nbytes = encode_modified_utf8(unicode)\n```\n\nThis module *does not* register itself globally as a codec, since importing\nshould be side-effect-free.\n\n## 📈 Benchmarks\n\nThe C extension is significantly faster - often 20x to 40x faster.\n\n<!-- BENCHMARK START -->\n\n### MUTF-8 Decoding\n| Name                         |   Min (μs) |   Max (μs) |   StdDev |           Ops |\n|------------------------------|------------|------------|----------|---------------|\n| cmutf8-decode_modified_utf8  |    0.00009 |    0.00080 |  0.00000 | 9957678.56358 |\n| pymutf8-decode_modified_utf8 |    0.00190 |    0.06040 |  0.00000 |  450455.96019 |\n\n### MUTF-8 Encoding\n| Name                         |   Min (μs) |   Max (μs) |   StdDev |            Ops |\n|------------------------------|------------|------------|----------|----------------|\n| cmutf8-encode_modified_utf8  |    0.00008 |    0.00151 |  0.00000 | 11897361.05101 |\n| pymutf8-encode_modified_utf8 |    0.00180 |    0.16650 |  0.00000 |   474390.98091 |\n<!-- BENCHMARK END -->\n\n## C Extension\n\nThe C extension is optional. If a binary package is not available, or a C\ncompiler is not present, the pure-python version will be used instead. If you\nwant to ensure you're using the C version, import it directly:\n\n```python\nfrom mutf8.cmutf8 import decode_modified_utf8\n\ndecode_modified_utf(b'\\xED\\xA1\\x80\\xED\\xB0\\x80')\n```\n\n[Lawu]: https://github.com/tktech/lawu\n\n\n"
  },
  {
    "path": "libs/mutf8-1.0.6.dist-info/RECORD",
    "content": "mutf8/__init__.py,sha256=R2Lp5IRl93ExdyCFPth1mVOqBrVJwkDYBrr7R13wYa0,610\nmutf8/cmutf8.cpython-39-darwin.so,sha256=_uICzaOqphqZ9WBbruPP8ib87YbqlWqBB4ZyftDHius,34784\nmutf8/mutf8.py,sha256=aJGhvZCqVeMPKkk7vfIlnl5iLYAdph6pfWTTSN_bUPY,4402\nmutf8-1.0.6.dist-info/LICENCE,sha256=lnV_a9F3bpwgG-3fx89HzSmOnjIdKRRTu4nGlUcagds,1108\nmutf8-1.0.6.dist-info/METADATA,sha256=pqxeZBiGxi24Op2bMkkkM14COxkbVAgi0xOocmB3i0U,3350\nmutf8-1.0.6.dist-info/WHEEL,sha256=JUy4BYvpxE3q_zThzrovSWFCy1Gn9kn-80xq7K8G_1o,110\nmutf8-1.0.6.dist-info/top_level.txt,sha256=e_NSSiB0tApuNdHbYJLjd_BdvUEBwRwFhJPEYrj1o8Y,6\nmutf8-1.0.6.dist-info/RECORD,,\n"
  },
  {
    "path": "libs/mutf8-1.0.6.dist-info/WHEEL",
    "content": "Wheel-Version: 1.0\nGenerator: bdist_wheel (0.37.1)\nRoot-Is-Purelib: false\nTag: cp39-cp39-macosx_10_14_x86_64\n\n"
  },
  {
    "path": "libs/mutf8-1.0.6.dist-info/top_level.txt",
    "content": "mutf8\n"
  },
  {
    "path": "requirements.txt",
    "content": "PyQt5\ncryptography\n# winddows support\nlxml\nwin32_setctime\n# pyinstaller # Recommended for Windows builds"
  }
]